effectual 0.3.5__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {effectual-0.3.5 → effectual-0.4.0}/PKG-INFO +1 -1
- {effectual-0.3.5 → effectual-0.4.0}/pyproject.toml +3 -1
- {effectual-0.3.5 → effectual-0.4.0}/src/effectual/build.py +8 -7
- {effectual-0.3.5 → effectual-0.4.0}/src/effectual/developer.py +4 -4
- effectual-0.4.0/src/effectual/fileHash.py +34 -0
- {effectual-0.3.5 → effectual-0.4.0}/taskfile.yml +27 -27
- {effectual-0.3.5 → effectual-0.4.0}/uv.lock +1 -1
- effectual-0.3.5/src/effectual/fileHash.py +0 -32
- {effectual-0.3.5 → effectual-0.4.0}/.gitignore +0 -0
- {effectual-0.3.5 → effectual-0.4.0}/.python-version +0 -0
- {effectual-0.3.5 → effectual-0.4.0}/LICENSE +0 -0
- {effectual-0.3.5 → effectual-0.4.0}/README.md +0 -0
- {effectual-0.3.5 → effectual-0.4.0}/src/effectual/__init__.py +0 -0
- {effectual-0.3.5 → effectual-0.4.0}/src/effectual/colors.py +0 -0
- {effectual-0.3.5 → effectual-0.4.0}/src/effectual/config.py +0 -0
- {effectual-0.3.5 → effectual-0.4.0}/src/effectual/minifier.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "effectual"
|
3
|
-
version = "0.
|
3
|
+
version = "0.4.0"
|
4
4
|
description = "A python package/script bundler"
|
5
5
|
readme = "README.md"
|
6
6
|
license = "MIT"
|
@@ -137,6 +137,8 @@ docstring-code-line-length = "dynamic"
|
|
137
137
|
|
138
138
|
[tool.mypy]
|
139
139
|
|
140
|
+
disable_error_code = "name-defined"
|
141
|
+
|
140
142
|
warn_unused_configs = true
|
141
143
|
warn_redundant_casts = true
|
142
144
|
warn_unused_ignores = true
|
@@ -21,14 +21,14 @@ def bundleFiles(
|
|
21
21
|
compressionLevel: int,
|
22
22
|
minification: bool,
|
23
23
|
) -> None:
|
24
|
-
"""Bundles dependencies and scripts into a single .
|
24
|
+
"""Bundles dependencies and scripts into a single .pyz archive
|
25
25
|
|
26
26
|
Args:
|
27
27
|
sourceDirectory (Path): Source directory which must contain a __main__.py script
|
28
28
|
outputDirectory (Path): Output directory for the bundle
|
29
29
|
outputFileName (str): Name of the output bundle
|
30
30
|
compressionLevel (int): Compression level for the bundle from 0-9
|
31
|
-
minification (bool): If the
|
31
|
+
minification (bool): If the scripts should be minified
|
32
32
|
"""
|
33
33
|
outputDirectory.mkdir(parents=True, exist_ok=True)
|
34
34
|
outputPath: Path = outputDirectory / outputFileName
|
@@ -90,11 +90,12 @@ def dependencies(minify: bool) -> None:
|
|
90
90
|
|
91
91
|
|
92
92
|
def optimizeDependencies(file: Path) -> None:
|
93
|
+
stringFile: str = str(file)
|
93
94
|
if (
|
94
95
|
file.suffix in (".pyc", ".pyd", ".exe", ".typed")
|
95
|
-
or "__pycache__" in
|
96
|
-
or ".dist-info" in
|
97
|
-
or ".lock" in
|
96
|
+
or "__pycache__" in stringFile
|
97
|
+
or ".dist-info" in stringFile
|
98
|
+
or ".lock" in stringFile
|
98
99
|
):
|
99
100
|
try:
|
100
101
|
file.unlink()
|
@@ -128,7 +129,7 @@ def main() -> None:
|
|
128
129
|
)
|
129
130
|
|
130
131
|
uvHashPath: Path = Path("./.effectual_cache/pyprojectHash.toml")
|
131
|
-
currentHash: dict[str, dict] = dict()
|
132
|
+
currentHash: dict[str, dict[str, str]] = dict()
|
132
133
|
|
133
134
|
startTime = perf_counter()
|
134
135
|
|
@@ -139,7 +140,7 @@ def main() -> None:
|
|
139
140
|
|
140
141
|
if uvHashPath.exists():
|
141
142
|
with open(uvHashPath, "r") as file:
|
142
|
-
lastHash: dict = dict(rtoml.load(file)).get("hashes")
|
143
|
+
lastHash: dict[Any, Any] = dict(rtoml.load(file)).get("hashes")
|
143
144
|
if currentHash["hashes"] != lastHash:
|
144
145
|
with open(uvHashPath, "w") as file:
|
145
146
|
rtoml.dump(currentHash, file)
|
@@ -40,12 +40,12 @@ def main() -> None:
|
|
40
40
|
|
41
41
|
runCommand = subprocess.Popen(["uv", "run", outputFile], shell=True)
|
42
42
|
|
43
|
-
|
43
|
+
lastHashSet: set[str] = getAllHashes(sourceDirectory, ".py")
|
44
44
|
|
45
45
|
while True:
|
46
|
-
|
47
|
-
if
|
48
|
-
|
46
|
+
currentHashSet: set[str] = getAllHashes(sourceDirectory, ".py")
|
47
|
+
if currentHashSet != lastHashSet:
|
48
|
+
lastHashSet = currentHashSet
|
49
49
|
runCommand.kill()
|
50
50
|
runCommand.wait()
|
51
51
|
outputFile.unlink()
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import hashlib
|
2
|
+
from multiprocessing import Pool
|
3
|
+
from pathlib import Path
|
4
|
+
|
5
|
+
|
6
|
+
def getFilehash(filePath: Path) -> str:
|
7
|
+
"""Gets the file hash of a single python script
|
8
|
+
|
9
|
+
Args:
|
10
|
+
filePath (Path): Path to a file
|
11
|
+
|
12
|
+
Returns:
|
13
|
+
str: Hash of the file
|
14
|
+
"""
|
15
|
+
with open(filePath, "rb") as file:
|
16
|
+
fileHash = hashlib.sha1(file.read()).hexdigest()
|
17
|
+
return fileHash
|
18
|
+
|
19
|
+
|
20
|
+
def getAllHashes(sourceDirectory: Path, fileExtension: str) -> set[str]:
|
21
|
+
"""Gets all hashes in directory
|
22
|
+
|
23
|
+
Args:
|
24
|
+
sourceDirectory (Path): Path to a folder containing files
|
25
|
+
|
26
|
+
Returns:
|
27
|
+
set[str]: Set containing paths and hashes
|
28
|
+
"""
|
29
|
+
|
30
|
+
with Pool() as pool:
|
31
|
+
hashList: set[str] = set(
|
32
|
+
pool.map(getFilehash, sourceDirectory.glob(f"*.{fileExtension}"))
|
33
|
+
)
|
34
|
+
return hashList
|
@@ -1,27 +1,27 @@
|
|
1
|
-
version: "3.17"
|
2
|
-
|
3
|
-
tasks:
|
4
|
-
|
5
|
-
dist:
|
6
|
-
cmds:
|
7
|
-
- uv sync
|
8
|
-
- uv lock
|
9
|
-
- task: check
|
10
|
-
- uv build
|
11
|
-
- uv publish
|
12
|
-
|
13
|
-
check:
|
14
|
-
deps: [lint, format]
|
15
|
-
|
16
|
-
format:
|
17
|
-
cmds:
|
18
|
-
- uv run ruff format --config pyproject.toml
|
19
|
-
|
20
|
-
lint:
|
21
|
-
cmds:
|
22
|
-
- uv run ruff check --config pyproject.toml
|
23
|
-
|
24
|
-
|
25
|
-
type:
|
26
|
-
cmds:
|
27
|
-
- uv run mypy src/effectual/*.py
|
1
|
+
version: "3.17"
|
2
|
+
|
3
|
+
tasks:
|
4
|
+
|
5
|
+
dist:
|
6
|
+
cmds:
|
7
|
+
- uv sync
|
8
|
+
- uv lock
|
9
|
+
- task: check
|
10
|
+
- uv build
|
11
|
+
- uv publish
|
12
|
+
|
13
|
+
check:
|
14
|
+
deps: [lint, format]
|
15
|
+
|
16
|
+
format:
|
17
|
+
cmds:
|
18
|
+
- uv run ruff format --config pyproject.toml
|
19
|
+
|
20
|
+
lint:
|
21
|
+
cmds:
|
22
|
+
- uv run ruff check --config pyproject.toml
|
23
|
+
|
24
|
+
|
25
|
+
type:
|
26
|
+
cmds:
|
27
|
+
- uv run mypy src/effectual/*.py
|
@@ -1,32 +0,0 @@
|
|
1
|
-
import hashlib
|
2
|
-
from multiprocessing import Pool
|
3
|
-
from pathlib import Path
|
4
|
-
|
5
|
-
|
6
|
-
def getFilehash(filePath: Path) -> str:
|
7
|
-
"""Gets the file hash of a single python script
|
8
|
-
|
9
|
-
Args:
|
10
|
-
filePath (Path): Path to the python script
|
11
|
-
|
12
|
-
Returns:
|
13
|
-
str: Hash of the python script
|
14
|
-
"""
|
15
|
-
with open(filePath, "rb") as file:
|
16
|
-
fileHash = hashlib.sha256(file.read()).hexdigest()
|
17
|
-
return fileHash
|
18
|
-
|
19
|
-
|
20
|
-
def getAllHashes(sourceDirectory: Path) -> list[str]:
|
21
|
-
"""Gets all hashes in directory
|
22
|
-
|
23
|
-
Args:
|
24
|
-
sourceDirectory (Path): Path to the python scripts
|
25
|
-
|
26
|
-
Returns:
|
27
|
-
dict[str]: Dictionary containing paths and hashes
|
28
|
-
"""
|
29
|
-
|
30
|
-
with Pool() as pool:
|
31
|
-
hashList: list[str] = pool.map(getFilehash, sourceDirectory.glob("*.py"))
|
32
|
-
return hashList
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|