-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 8baf526
Showing
8 changed files
with
900 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
## 1.0 | ||
- Initial release. | ||
|
||
## 1.1 | ||
- Modified code structure. | ||
|
||
## 1.2 | ||
- Bug fixes. | ||
- Code refraction. | ||
|
||
## 1.3 | ||
- Renamed: | ||
- Classes: | ||
- `FileDate` ⟶ `File` | ||
- Functions | ||
- `Utils.release` ⟶ `Utils.drop` | ||
- Reduced code size. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
from filedate import File | ||
|
||
class Keep: | ||
"""Utility for "holding" and "dropping" file dates.""" | ||
def __init__(self, Files: list): | ||
self.files = Files | ||
|
||
def pick(self) -> dict: | ||
"""Pick the files dates.""" | ||
self.__dates = {Path: File(Path).get() for Path in self.files} | ||
|
||
def drop(self): | ||
"""Drop the files dates.""" | ||
for Key, Value in self.__dates.items(): | ||
File(Key).set( | ||
created = Value["created"], | ||
modified = Value["modified"], | ||
accessed = Value["accessed"] | ||
) | ||
|
||
hold = pick | ||
release = drop |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
"""Simple, convenient and cross-platform file date changing library.""" | ||
|
||
from .__main__ import * | ||
from .Utils import * | ||
|
||
#---# | ||
|
||
__author__ = "kubinka0505" | ||
__credits__ = __author__ | ||
__version__ = "1.3" | ||
__date__ = "05.12.2020" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
import os | ||
from platform import system | ||
from datetime import datetime | ||
from dateutil.parser import parse | ||
|
||
#---# | ||
|
||
class File: | ||
def __init__(self, File: str): | ||
self.file = os.path.abspath(os.path.expanduser(os.path.expandvars(File))) | ||
|
||
def _modify(parameter: str): | ||
"""Convert `set` parameter to Epoch time.""" | ||
if isinstance(parameter, str): | ||
parameter = parse(parameter).timestamp() | ||
try: | ||
parameter = parameter // 1 | ||
except TypeError: | ||
parameter = parameter.timestamp() | ||
return parameter | ||
|
||
|
||
def get(self) -> dict: | ||
"""Returns a dictionary containing `datetime.fromtimestamp` | ||
objects - when file was created, modified and accessed.""" | ||
info = os.stat(self.file) | ||
dict = { | ||
"created": info.st_ctime, | ||
"modified": info.st_mtime, | ||
"accessed": info.st_atime | ||
} | ||
|
||
for Key, Value in dict.items(): | ||
dict[Key] = datetime.fromtimestamp(Value) | ||
|
||
return dict | ||
|
||
#-----# | ||
|
||
def set(self, modified: str, created: str = None, accessed: str = None): | ||
"""Sets new file dates. | ||
All parameters except `self.File` support: | ||
- String datetime representations parsable by `dateutil.parser.parse` | ||
- Epoch times | ||
`created` parameter is Windows only.""" | ||
|
||
Dates = File(self.file).get() | ||
os.chmod(self.file, 511) | ||
|
||
#---# | ||
|
||
created = (File._modify(created) if created else Dates["created"].timestamp()) // 1 | ||
modified = (File._modify(modified) if modified else Dates["modified"].timestamp()) // 1 | ||
accessed = (File._modify(accessed) if accessed else Dates["accessed"].timestamp()) // 1 | ||
|
||
#---# | ||
|
||
if created: | ||
if system() == "Windows": | ||
from ctypes import windll, wintypes, byref | ||
|
||
timestamp = int((created * 1E7) + 116444736E9) | ||
ctime = wintypes.FILETIME(timestamp & 0xFFFFFFFF, timestamp >> 32) | ||
handle = windll.kernel32.CreateFileW(self.file, 256, 0, None, 3, 128, None) | ||
|
||
# Setting Creation Time | ||
windll.kernel32.SetFileTime(handle, byref(ctime), None, None) | ||
windll.kernel32.CloseHandle(handle) | ||
|
||
#---# | ||
|
||
# Setting Accessed & Modified Time | ||
os.utime(self.file, (accessed, modified)) | ||
|
||
return None if File.SET_SILENT else File(self.file).get() | ||
|
||
#-----# | ||
|
||
SET_SILENT = False |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
from setuptools import * | ||
|
||
setup( | ||
name = "filedate", | ||
description = "Simple, convenient and cross-platform file date changing library.", | ||
version = "1.3", | ||
author = "kubinka0505", | ||
license = "GPL v3", | ||
keywords = "filedate file date change changing changer", | ||
url = "https://github.com/kubinka0505/filedate", | ||
packages = find_packages(), | ||
install_requires = ["python-dateutil"], | ||
classifiers = [ | ||
"Development Status :: 6 - Mature", | ||
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)", | ||
"Programming Language :: Python :: 3 :: Only", | ||
"Operating System :: OS Independent", | ||
"Environment :: Console", | ||
"Intended Audience :: End Users/Desktop", | ||
"Topic :: Desktop Environment :: File Managers", | ||
"Natural Language :: English" | ||
], | ||
) |
Oops, something went wrong.