hunterMakesPy 0.2.4__py3-none-any.whl → 0.3.0__py3-none-any.whl
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.
- hunterMakesPy/__init__.py +2 -5
- hunterMakesPy/dataStructures.py +1 -6
- hunterMakesPy/filesystemToolkit.py +55 -1
- hunterMakesPy/tests/test_filesystemToolkit.py +187 -1
- {huntermakespy-0.2.4.dist-info → huntermakespy-0.3.0.dist-info}/METADATA +4 -13
- {huntermakespy-0.2.4.dist-info → huntermakespy-0.3.0.dist-info}/RECORD +9 -9
- {huntermakespy-0.2.4.dist-info → huntermakespy-0.3.0.dist-info}/WHEEL +0 -0
- {huntermakespy-0.2.4.dist-info → huntermakespy-0.3.0.dist-info}/licenses/LICENSE +0 -0
- {huntermakespy-0.2.4.dist-info → huntermakespy-0.3.0.dist-info}/top_level.txt +0 -0
hunterMakesPy/__init__.py
CHANGED
|
@@ -17,13 +17,10 @@ from hunterMakesPy.parseParameters import (defineConcurrencyLimit as defineConcu
|
|
|
17
17
|
|
|
18
18
|
from hunterMakesPy.filesystemToolkit import (importLogicalPath2Identifier as importLogicalPath2Identifier,
|
|
19
19
|
importPathFilename2Identifier as importPathFilename2Identifier, makeDirsSafely as makeDirsSafely,
|
|
20
|
-
writeStringToHere as writeStringToHere)
|
|
20
|
+
writePython as writePython, writeStringToHere as writeStringToHere)
|
|
21
21
|
|
|
22
22
|
from hunterMakesPy.dataStructures import stringItUp as stringItUp, updateExtendPolishDictionaryLists as updateExtendPolishDictionaryLists
|
|
23
23
|
|
|
24
|
-
import
|
|
25
|
-
|
|
26
|
-
if sys.version_info < (3, 14):
|
|
27
|
-
from hunterMakesPy.dataStructures import autoDecodingRLE as autoDecodingRLE
|
|
24
|
+
from hunterMakesPy.dataStructures import autoDecodingRLE as autoDecodingRLE
|
|
28
25
|
|
|
29
26
|
from hunterMakesPy._theSSOT import settingsPackage
|
hunterMakesPy/dataStructures.py
CHANGED
|
@@ -8,12 +8,7 @@ import more_itertools
|
|
|
8
8
|
import re as regex
|
|
9
9
|
|
|
10
10
|
def removeExtraWhitespace(text: str) -> str:
|
|
11
|
-
"""Remove extra whitespace from string representation of Python data structures.
|
|
12
|
-
|
|
13
|
-
This function replaces python_minifier.minify() for the specific use case of
|
|
14
|
-
minimizing string representations of lists, tuples, ranges, etc. It removes
|
|
15
|
-
spaces after commas, around brackets and parentheses.
|
|
16
|
-
"""
|
|
11
|
+
"""Remove extra whitespace from string representation of Python data structures."""
|
|
17
12
|
# Remove spaces after commas
|
|
18
13
|
text = regex.sub(r',\s+', ',', text)
|
|
19
14
|
# Remove spaces after opening brackets/parens
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
This module provides basic file I/O utilities such as importing callables from modules, safely creating directories, and writing to files or streams (pipes).
|
|
4
4
|
|
|
5
5
|
"""
|
|
6
|
-
|
|
6
|
+
from autoflake import fix_code as autoflake_fix_code
|
|
7
7
|
from hunterMakesPy import identifierDotAttribute
|
|
8
|
+
from isort import code as isort_code
|
|
8
9
|
from os import PathLike
|
|
9
10
|
from pathlib import Path, PurePath
|
|
10
11
|
from typing import Any, TYPE_CHECKING, TypeVar
|
|
@@ -97,6 +98,59 @@ def makeDirsSafely(pathFilename: Any) -> None:
|
|
|
97
98
|
with contextlib.suppress(OSError):
|
|
98
99
|
Path(pathFilename).parent.mkdir(parents=True, exist_ok=True)
|
|
99
100
|
|
|
101
|
+
settings_autoflakeDEFAULT: dict[str, list[str] | bool] = {
|
|
102
|
+
'additional_imports': [],
|
|
103
|
+
'expand_star_imports': True,
|
|
104
|
+
'remove_all_unused_imports': True,
|
|
105
|
+
'remove_duplicate_keys': False,
|
|
106
|
+
'remove_unused_variables': False,
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
settings_isortDEFAULT: dict[str, int | str | list[str]] = {
|
|
110
|
+
"combine_as_imports": True,
|
|
111
|
+
"force_alphabetical_sort_within_sections": True,
|
|
112
|
+
"from_first": True,
|
|
113
|
+
"honor_noqa": True,
|
|
114
|
+
"indent": "\t",
|
|
115
|
+
"line_length": 120,
|
|
116
|
+
"lines_after_imports": 1,
|
|
117
|
+
"lines_between_types": 0,
|
|
118
|
+
"multi_line_output": 4,
|
|
119
|
+
"no_sections": True,
|
|
120
|
+
"skip": ["__init__.py"], # TODO think
|
|
121
|
+
"use_parentheses": True,
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
def writePython(pythonSource: str, pathFilename: PathLike[Any] | PurePath | io.TextIOBase, settings: dict[str, dict[str, Any]] | None = None) -> None:
|
|
125
|
+
"""Format and write Python source code to a file or text stream.
|
|
126
|
+
|
|
127
|
+
(AI generated docstring)
|
|
128
|
+
|
|
129
|
+
This function processes Python source code through autoflake and isort formatters before writing to the specified destination.
|
|
130
|
+
The formatters remove unused imports, sort imports, and apply consistent code style according to the provided or default
|
|
131
|
+
settings.
|
|
132
|
+
|
|
133
|
+
Parameters
|
|
134
|
+
----------
|
|
135
|
+
pythonSource : str
|
|
136
|
+
The Python source code to format and write.
|
|
137
|
+
pathFilename : PathLike[Any] | PurePath | io.TextIOBase
|
|
138
|
+
The target destination: either a file path or an open text stream.
|
|
139
|
+
settings : dict[str, dict[str, Any]] | None = None
|
|
140
|
+
Configuration for the formatters. Keys are `'autoflake'` and `'isort'`, each mapping to a dictionary of formatter-specific
|
|
141
|
+
settings. If `None`, default settings are used for both formatters.
|
|
142
|
+
|
|
143
|
+
"""
|
|
144
|
+
if settings is None:
|
|
145
|
+
settings = {}
|
|
146
|
+
|
|
147
|
+
settings_autoflake: dict[str, Any] = settings.get('autoflake', settings_autoflakeDEFAULT)
|
|
148
|
+
pythonSource = autoflake_fix_code(pythonSource, **settings_autoflake)
|
|
149
|
+
|
|
150
|
+
settings_isort: dict[str, Any] = settings.get('isort', settings_isortDEFAULT)
|
|
151
|
+
pythonSource = isort_code(pythonSource, **settings_isort)
|
|
152
|
+
writeStringToHere(pythonSource + '\n', pathFilename)
|
|
153
|
+
|
|
100
154
|
def writeStringToHere(this: str, pathFilename: PathLike[Any] | PurePath | io.TextIOBase) -> None:
|
|
101
155
|
"""Write a string to a file or text stream.
|
|
102
156
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# pyright: standard
|
|
2
|
-
from hunterMakesPy import
|
|
2
|
+
from hunterMakesPy import (
|
|
3
|
+
importLogicalPath2Identifier, importPathFilename2Identifier, makeDirsSafely, writePython, writeStringToHere)
|
|
3
4
|
from hunterMakesPy.tests.conftest import standardizedEqualTo
|
|
4
5
|
import io
|
|
5
6
|
import math
|
|
@@ -261,3 +262,188 @@ def testImportPathFilename2IdentifierWithValidFileInvalidIdentifier(
|
|
|
261
262
|
identifierTarget
|
|
262
263
|
)
|
|
263
264
|
|
|
265
|
+
|
|
266
|
+
@pytest.mark.parametrize(
|
|
267
|
+
"pythonSourceTarget, expectedFormattedContent",
|
|
268
|
+
[
|
|
269
|
+
(
|
|
270
|
+
"import sys\nimport os\nimport math\n\ndef fibonacciFunction():\n return 13\n",
|
|
271
|
+
"\ndef fibonacciFunction():\n return 13\n\n"
|
|
272
|
+
),
|
|
273
|
+
(
|
|
274
|
+
"from pathlib import Path\nimport sys\nimport os\n\ndef primeFunction():\n return 17\n",
|
|
275
|
+
"\ndef primeFunction():\n return 17\n\n"
|
|
276
|
+
),
|
|
277
|
+
(
|
|
278
|
+
"import unused\nimport sys\n\nvalueCardinal = sys.version\n",
|
|
279
|
+
"import sys\n\nvalueCardinal = sys.version\n\n"
|
|
280
|
+
),
|
|
281
|
+
(
|
|
282
|
+
"import math\n\nvalueFibonacci = math.sqrt(21)\n",
|
|
283
|
+
"import math\n\nvalueFibonacci = math.sqrt(21)\n\n"
|
|
284
|
+
),
|
|
285
|
+
]
|
|
286
|
+
)
|
|
287
|
+
def testWritePythonFormatsAndWritesToFile(
|
|
288
|
+
pathTmpTesting: pathlib.Path,
|
|
289
|
+
pythonSourceTarget: str,
|
|
290
|
+
expectedFormattedContent: str
|
|
291
|
+
) -> None:
|
|
292
|
+
"""Test that writePython formats Python source code and writes it to files."""
|
|
293
|
+
pathFilenameTarget = pathTmpTesting / "formattedModule.py"
|
|
294
|
+
writePython(pythonSourceTarget, pathFilenameTarget)
|
|
295
|
+
|
|
296
|
+
assert pathFilenameTarget.exists(), (
|
|
297
|
+
f"\nTesting: `writePython(..., {pathFilenameTarget})`\n"
|
|
298
|
+
f"Expected: File {pathFilenameTarget} to exist\n"
|
|
299
|
+
f"Got: exists={pathFilenameTarget.exists()}"
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
contentActual = pathFilenameTarget.read_text(encoding="utf-8")
|
|
303
|
+
assert contentActual == expectedFormattedContent, (
|
|
304
|
+
f"\nTesting: `writePython(...)`\n"
|
|
305
|
+
f"Expected content:\n{repr(expectedFormattedContent)}\n"
|
|
306
|
+
f"Got content:\n{repr(contentActual)}"
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
@pytest.mark.parametrize(
|
|
311
|
+
"pythonSourceTarget, expectedFormattedContent",
|
|
312
|
+
[
|
|
313
|
+
(
|
|
314
|
+
"import sys\nimport unused\n\ndef cardinalFunction():\n return sys.version\n",
|
|
315
|
+
"import sys\n\ndef cardinalFunction():\n return sys.version\n\n"
|
|
316
|
+
),
|
|
317
|
+
(
|
|
318
|
+
"from pathlib import Path\nfrom os import getcwd\nimport math\n\nvalueSequence = getcwd()\n",
|
|
319
|
+
"from os import getcwd\n\nvalueSequence = getcwd()\n\n"
|
|
320
|
+
),
|
|
321
|
+
]
|
|
322
|
+
)
|
|
323
|
+
def testWritePythonFormatsAndWritesToStream(
|
|
324
|
+
pythonSourceTarget: str,
|
|
325
|
+
expectedFormattedContent: str
|
|
326
|
+
) -> None:
|
|
327
|
+
"""Test that writePython formats Python source code and writes it to IO streams."""
|
|
328
|
+
streamMemory = io.StringIO()
|
|
329
|
+
writePython(pythonSourceTarget, streamMemory)
|
|
330
|
+
|
|
331
|
+
contentActual = streamMemory.getvalue()
|
|
332
|
+
assert contentActual == expectedFormattedContent, (
|
|
333
|
+
f"\nTesting: `writePython(..., StringIO)`\n"
|
|
334
|
+
f"Expected content:\n{repr(expectedFormattedContent)}\n"
|
|
335
|
+
f"Got content:\n{repr(contentActual)}"
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
@pytest.mark.parametrize(
|
|
340
|
+
"pythonSourceTarget, settingsCustom, expectedFormattedContent",
|
|
341
|
+
[
|
|
342
|
+
(
|
|
343
|
+
"import math\nimport unused\n\nvalueFibonacci = 34\n\ndef fibonacciFunction():\n return math.sqrt(13)\n",
|
|
344
|
+
{'autoflake': {'remove_all_unused_imports': True, 'remove_unused_variables': False}},
|
|
345
|
+
"import math\n\nvalueFibonacci = 34\n\ndef fibonacciFunction():\n return math.sqrt(13)\n\n"
|
|
346
|
+
),
|
|
347
|
+
(
|
|
348
|
+
"from pathlib import Path\nimport sys\n\nvaluePrime = Path.cwd()\n",
|
|
349
|
+
{'isort': {'force_alphabetical_sort_within_sections': False, 'from_first': False}},
|
|
350
|
+
"from pathlib import Path\n\nvaluePrime = Path.cwd()\n\n"
|
|
351
|
+
),
|
|
352
|
+
]
|
|
353
|
+
)
|
|
354
|
+
def testWritePythonWithCustomSettings(
|
|
355
|
+
pathTmpTesting: pathlib.Path,
|
|
356
|
+
pythonSourceTarget: str,
|
|
357
|
+
settingsCustom: dict[str, dict[str, object]],
|
|
358
|
+
expectedFormattedContent: str
|
|
359
|
+
) -> None:
|
|
360
|
+
"""Test that writePython respects custom formatter settings."""
|
|
361
|
+
pathFilenameTarget = pathTmpTesting / "customFormattedModule.py"
|
|
362
|
+
writePython(pythonSourceTarget, pathFilenameTarget, settingsCustom)
|
|
363
|
+
|
|
364
|
+
contentActual = pathFilenameTarget.read_text(encoding="utf-8")
|
|
365
|
+
assert contentActual == expectedFormattedContent, (
|
|
366
|
+
f"\nTesting: `writePython(..., custom settings)`\n"
|
|
367
|
+
f"Expected content:\n{repr(expectedFormattedContent)}\n"
|
|
368
|
+
f"Got content:\n{repr(contentActual)}"
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
@pytest.mark.parametrize(
|
|
373
|
+
"pythonSourceTarget",
|
|
374
|
+
[
|
|
375
|
+
"import math\nimport sys\n\nvalueFibonacci = 34\n",
|
|
376
|
+
"from pathlib import Path\n\nvalueCardinal = 'SW'\n",
|
|
377
|
+
"def primeFunction():\n return 37\n",
|
|
378
|
+
]
|
|
379
|
+
)
|
|
380
|
+
def testWritePythonCreatesNestedDirectories(
|
|
381
|
+
pathTmpTesting: pathlib.Path,
|
|
382
|
+
pythonSourceTarget: str
|
|
383
|
+
) -> None:
|
|
384
|
+
"""Test that writePython creates nested directories when writing to files."""
|
|
385
|
+
pathFilenameTarget = pathTmpTesting / "nested" / "directories" / "module.py"
|
|
386
|
+
writePython(pythonSourceTarget, pathFilenameTarget)
|
|
387
|
+
|
|
388
|
+
assert pathFilenameTarget.exists(), (
|
|
389
|
+
f"\nTesting: `writePython(..., {pathFilenameTarget})`\n"
|
|
390
|
+
f"Expected: File {pathFilenameTarget} to exist\n"
|
|
391
|
+
f"Got: exists={pathFilenameTarget.exists()}"
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
assert pathFilenameTarget.parent.exists(), (
|
|
395
|
+
f"\nTesting: `writePython(..., {pathFilenameTarget})`\n"
|
|
396
|
+
f"Expected: Parent directory {pathFilenameTarget.parent} to exist\n"
|
|
397
|
+
f"Got: exists={pathFilenameTarget.parent.exists()}"
|
|
398
|
+
)
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
@pytest.mark.parametrize(
|
|
402
|
+
"pythonSourceTarget, expectedContainsImport",
|
|
403
|
+
[
|
|
404
|
+
("import math\n\nvaluePrime = math.sqrt(41)\n", "import math"),
|
|
405
|
+
("from os import getcwd\n\nvalueSequence = getcwd()\n", "from os import getcwd"),
|
|
406
|
+
("import sys\n\nvalueFibonacci = sys.version\n", "import sys"),
|
|
407
|
+
]
|
|
408
|
+
)
|
|
409
|
+
def testWritePythonPreservesUsedImports(
|
|
410
|
+
pathTmpTesting: pathlib.Path,
|
|
411
|
+
pythonSourceTarget: str,
|
|
412
|
+
expectedContainsImport: str
|
|
413
|
+
) -> None:
|
|
414
|
+
"""Test that writePython preserves imports that are actually used in the code."""
|
|
415
|
+
pathFilenameTarget = pathTmpTesting / "preservedImports.py"
|
|
416
|
+
writePython(pythonSourceTarget, pathFilenameTarget)
|
|
417
|
+
|
|
418
|
+
contentActual = pathFilenameTarget.read_text(encoding="utf-8")
|
|
419
|
+
assert expectedContainsImport in contentActual, (
|
|
420
|
+
f"\nTesting: `writePython(...)` preserves used imports\n"
|
|
421
|
+
f"Expected content to contain: {expectedContainsImport}\n"
|
|
422
|
+
f"Got content:\n{contentActual}"
|
|
423
|
+
)
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
@pytest.mark.parametrize(
|
|
427
|
+
"pythonSourceTarget, expectedNotContainsImport",
|
|
428
|
+
[
|
|
429
|
+
("import math\nimport unused\n\nvaluePrime = 43\n", "import unused"),
|
|
430
|
+
("from os import getcwd, unused\n\nvalueSequence = getcwd()\n", "unused"),
|
|
431
|
+
("import sys\nimport collections\n\nvalueFibonacci = sys.version\n", "import collections"),
|
|
432
|
+
]
|
|
433
|
+
)
|
|
434
|
+
def testWritePythonRemovesUnusedImports(
|
|
435
|
+
pathTmpTesting: pathlib.Path,
|
|
436
|
+
pythonSourceTarget: str,
|
|
437
|
+
expectedNotContainsImport: str
|
|
438
|
+
) -> None:
|
|
439
|
+
"""Test that writePython removes imports that are not used in the code."""
|
|
440
|
+
pathFilenameTarget = pathTmpTesting / "removedImports.py"
|
|
441
|
+
writePython(pythonSourceTarget, pathFilenameTarget)
|
|
442
|
+
|
|
443
|
+
contentActual = pathFilenameTarget.read_text(encoding="utf-8")
|
|
444
|
+
assert expectedNotContainsImport not in contentActual, (
|
|
445
|
+
f"\nTesting: `writePython(...)` removes unused imports\n"
|
|
446
|
+
f"Expected content to NOT contain: {expectedNotContainsImport}\n"
|
|
447
|
+
f"Got content:\n{contentActual}"
|
|
448
|
+
)
|
|
449
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hunterMakesPy
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Easy Python functions making making functional Python functions easier.
|
|
5
5
|
Author-email: Hunter Hogan <HunterHogan@pm.me>
|
|
6
6
|
License: CC-BY-NC-4.0
|
|
@@ -9,7 +9,7 @@ Project-URL: Homepage, https://github.com/hunterhogan/hunterMakesPy
|
|
|
9
9
|
Project-URL: Issues, https://github.com/hunterhogan/hunterMakesPy/issues
|
|
10
10
|
Project-URL: Repository, https://github.com/hunterhogan/hunterMakesPy
|
|
11
11
|
Keywords: attribute loading,concurrency limit,configuration,defensive programming,dictionary merging,directory creation,dynamic import,error propagation,file system utilities,input validation,integer parsing,module loading,nested data structures,package settings,parameter validation,pytest,string extraction,test utilities
|
|
12
|
-
Classifier: Development Status ::
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Framework :: Pytest
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
@@ -30,12 +30,12 @@ Classifier: Typing :: Typed
|
|
|
30
30
|
Requires-Python: >=3.11
|
|
31
31
|
Description-Content-Type: text/markdown
|
|
32
32
|
License-File: LICENSE
|
|
33
|
+
Requires-Dist: autoflake
|
|
33
34
|
Requires-Dist: charset_normalizer
|
|
35
|
+
Requires-Dist: isort
|
|
34
36
|
Requires-Dist: more_itertools
|
|
35
37
|
Requires-Dist: numpy
|
|
36
38
|
Provides-Extra: development
|
|
37
|
-
Requires-Dist: mypy; extra == "development"
|
|
38
|
-
Requires-Dist: pyupgrade; extra == "development"
|
|
39
39
|
Requires-Dist: setuptools-scm; extra == "development"
|
|
40
40
|
Provides-Extra: testing
|
|
41
41
|
Requires-Dist: pytest; extra == "testing"
|
|
@@ -164,13 +164,4 @@ def test_myFunction(nameOfTest, callablePytest):
|
|
|
164
164
|
[](https://HunterThinks.com/support)
|
|
165
165
|
[](https://www.youtube.com/@HunterHogan)
|
|
166
166
|
|
|
167
|
-
## How to code
|
|
168
|
-
|
|
169
|
-
Coding One Step at a Time:
|
|
170
|
-
|
|
171
|
-
0. WRITE CODE.
|
|
172
|
-
1. Don't write stupid code that's hard to revise.
|
|
173
|
-
2. Write good code.
|
|
174
|
-
3. When revising, write better code.
|
|
175
|
-
|
|
176
167
|
[](https://creativecommons.org/licenses/by-nc/4.0/)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
hunterMakesPy/__init__.py,sha256=
|
|
1
|
+
hunterMakesPy/__init__.py,sha256=5UWFiB9YCTei76LfMCYipSFSIMVspw2jhcca_NmynGI,1431
|
|
2
2
|
hunterMakesPy/_theSSOT.py,sha256=lkLOG3oTIWNKD_ULX55chlUGNqCHgqVIrBvolvK1vbQ,153
|
|
3
3
|
hunterMakesPy/coping.py,sha256=7NBwaGutEr6Q-2mIz65M69NkrbpG24u1I5HXx6VaAWI,6057
|
|
4
|
-
hunterMakesPy/dataStructures.py,sha256=
|
|
5
|
-
hunterMakesPy/filesystemToolkit.py,sha256=
|
|
4
|
+
hunterMakesPy/dataStructures.py,sha256=WC6MO0LjrhCEv0prd5hlC9efG4DuL9lEm-fWlhHUVUw,11509
|
|
5
|
+
hunterMakesPy/filesystemToolkit.py,sha256=loBn6GcScIucrMpjopGdZu6ja3nTkyBfcSiH9_P4cxY,6773
|
|
6
6
|
hunterMakesPy/parseParameters.py,sha256=1mwGNVIZ1x23k_di3lhOhQb8QMXMUCHgt7xw3NRzDXs,11814
|
|
7
7
|
hunterMakesPy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
8
|
hunterMakesPy/pytestForYourUse.py,sha256=GiN1C1gTTM0ZunRPEMnrKlLQLMdH0wF_ZGr_RPgRjjA,500
|
|
@@ -11,10 +11,10 @@ hunterMakesPy/tests/__init__.py,sha256=C_FzfKDi_VrGVxlenWHyOYtKShAKlt3KW14jeRx1m
|
|
|
11
11
|
hunterMakesPy/tests/conftest.py,sha256=NZQPRiwvGhP16hJ6WGGm9eKLxfQArYV8E9X12YzSpP0,2827
|
|
12
12
|
hunterMakesPy/tests/test_coping.py,sha256=mH89TUAL6fJanBLlhdVlCNNQqm5OpdcQMP_p5W2JJwo,9860
|
|
13
13
|
hunterMakesPy/tests/test_dataStructures.py,sha256=OouddHjN-Km26U92jYwnjYeP6_Y2DrJLgq3qD_8GvGw,16393
|
|
14
|
-
hunterMakesPy/tests/test_filesystemToolkit.py,sha256=
|
|
14
|
+
hunterMakesPy/tests/test_filesystemToolkit.py,sha256=_CoSMzstJwWZ_tkNyIqclOIIqTaY2tYfUIgxGFfC0Jk,15335
|
|
15
15
|
hunterMakesPy/tests/test_parseParameters.py,sha256=80npsoWcCackjxvoW2dMXMpHeale7fuRXyXp78MibLs,14037
|
|
16
|
-
huntermakespy-0.
|
|
17
|
-
huntermakespy-0.
|
|
18
|
-
huntermakespy-0.
|
|
19
|
-
huntermakespy-0.
|
|
20
|
-
huntermakespy-0.
|
|
16
|
+
huntermakespy-0.3.0.dist-info/licenses/LICENSE,sha256=NxH5Y8BdC-gNU-WSMwim3uMbID2iNDXJz7fHtuTdXhk,19346
|
|
17
|
+
huntermakespy-0.3.0.dist-info/METADATA,sha256=SNJ2cKtyLw97-NGIsvCQsqllBJ82DW9Ipxntx2Qvmzk,6290
|
|
18
|
+
huntermakespy-0.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
19
|
+
huntermakespy-0.3.0.dist-info/top_level.txt,sha256=Uh4bj8EDTdsRpqY1VlK_his_B4HDfZ6Tqrwhoj75P_w,14
|
|
20
|
+
huntermakespy-0.3.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|