danielutils 0.9.80__tar.gz → 0.9.81__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.
- {danielutils-0.9.80/danielutils.egg-info → danielutils-0.9.81}/PKG-INFO +2 -2
- {danielutils-0.9.80 → danielutils-0.9.81}/README.md +1 -1
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/__init__.py +2 -1
- danielutils-0.9.81/danielutils/context_managers/__init__.py +1 -0
- danielutils-0.9.81/danielutils/context_managers/temporary_file.py +34 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/system/__init__.py +1 -0
- danielutils-0.9.81/danielutils/system/layered_command.py +86 -0
- {danielutils-0.9.80 → danielutils-0.9.81/danielutils.egg-info}/PKG-INFO +2 -2
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils.egg-info/SOURCES.txt +3 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/pyproject.toml +1 -1
- {danielutils-0.9.80 → danielutils-0.9.81}/LICENSE +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/MANIFEST.in +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/database/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/database/cached_database.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/database/database.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/database/redis_database.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/multiprogramming/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/multiprogramming/multi_id.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/multiprogramming/worker.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/multiprogramming/worker_pool.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/repl.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/aliases.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/counter.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/frange.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/factory.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/tdict.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/tlist.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/tset.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/ttuple.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/colors.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/convenience.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/conversions/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/conversions/main_conversions.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/conversions/specialized_conversions/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/conversions/specialized_conversions/to_hex.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/conversions/specialized_conversions/to_int.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/comparer.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/default_dict.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/functions.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/graph/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/graph/binary_node.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/graph/graph.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/graph/multinode.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/graph/node.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/heap/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/heap/heap.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/heap/max_heap.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/heap/min_heap.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/queue/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/queue/atomic_queue.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/queue/priority_queue.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/queue/queue.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/stack.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/trees/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/trees/binary_syntax_tree.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/trees/binary_tree.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/date.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/date_time.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/atomic.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/attach.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/chain_decorators.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/decorate_conditionally.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/delay_call.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/deprecate.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/final.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/limit_recursion.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/memo.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/overload.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/partially_implemented.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/processify.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/property.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/singleton.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/threadify.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/timeout.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/total_ordering.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/decorators/validate.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/exceptions.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/areoneof.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/check_foreach.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/flatten.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/isoftype.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/isoneof.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/multiloop.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/powerset.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/subseteq.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/functions/types_subseteq.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/generators/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/generators/conditional_generator.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/generators/generator_from_stream.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/generators/join_generators.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/internet.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/io_.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/math_/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/math_/constants.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/math_/functions.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/math_/math_print.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/math_/math_symbols.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/math_/polynomial/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/math_/polynomial/polinomial.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/metaclasses/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/metaclasses/atomic_class_meta.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/metaclasses/implicit_data_deleter_meta.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/metaclasses/instance_cache_meta.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/metaclasses/interface.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/metaclasses/overload_meta.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/mock_/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/mock_/mock_database.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/mock_/mock_module.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/path.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/print_.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/protocols/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/protocols/dictable.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/protocols/evaluable.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/py.typed +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/class_/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/class_/class_reflection.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/file/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/file/file_reflection.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/function/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/function/function_reflections.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/callstack.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/get_traceback.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/os_.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/packages.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/python_version.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/signals.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/tracer.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/module/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/module/module_reflections.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/module/package_reflection.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/snippets/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/snippets/try_get.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/system/independent.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/system/windows/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/system/windows/utils/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/system/windows/utils/filetime.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/system/windows/win32_ctime.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/system/windows/windows.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/text.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/time.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/tqdm_.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/databases/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/databases/all.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/oop/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/oop/observer.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/oop/strategy.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/conditional_variable.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/continuous/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/discrete/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/discrete/bernoulli.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/discrete/binomial.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/discrete/conditional_from_discrete_probability_func.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/discrete/discrete.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/discrete/geometric.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/discrete/poisson.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/conditional_variable/discrete/uniform.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/distributions.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/expressions/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/expressions/accumulation_expression.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/expressions/probability_expression.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/funcs/__init__.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/funcs/covariance.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/funcs/expected_value.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/funcs/probability_function.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/funcs/variance.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/operator.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/protocols.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/supp.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/transformation.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils/versioned_imports.py +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils.egg-info/dependency_links.txt +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/danielutils.egg-info/top_level.txt +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/setup.cfg +0 -0
- {danielutils-0.9.80 → danielutils-0.9.81}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: danielutils
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.81
|
|
4
4
|
Summary: A python utils library for things I find useful
|
|
5
5
|
Author-email: danielnachumdev <danielnachumdev@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -41,7 +41,7 @@ License-File: LICENSE
|
|
|
41
41
|
[](https://www.python.org/downloads/release/python-31011/)
|
|
42
42
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/gitleaks.yml)
|
|
43
43
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/github-code-scanning/codeql)
|
|
44
|
-
# danielutils v=0.9.
|
|
44
|
+
# danielutils v=0.9.81
|
|
45
45
|
A utils library for things that I find useful for my coding workflow.\
|
|
46
46
|
Feel free to use and / or contribute / improve my code :)
|
|
47
47
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://www.python.org/downloads/release/python-31011/)
|
|
5
5
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/gitleaks.yml)
|
|
6
6
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/github-code-scanning/codeql)
|
|
7
|
-
# danielutils v=0.9.
|
|
7
|
+
# danielutils v=0.9.81
|
|
8
8
|
A utils library for things that I find useful for my coding workflow.\
|
|
9
9
|
Feel free to use and / or contribute / improve my code :)
|
|
10
10
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .temporary_file import *
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from ..io_ import file_exists, delete_file
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TemporaryFile:
|
|
5
|
+
def __init__(self, path: str):
|
|
6
|
+
if file_exists(path):
|
|
7
|
+
raise RuntimeError(f"Can't create a temporary file if file '{path}' already exists.")
|
|
8
|
+
self.path = path
|
|
9
|
+
|
|
10
|
+
def __enter__(self):
|
|
11
|
+
return self
|
|
12
|
+
|
|
13
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
14
|
+
self.close()
|
|
15
|
+
|
|
16
|
+
def close(self) -> None:
|
|
17
|
+
delete_file(self.path)
|
|
18
|
+
|
|
19
|
+
def read(self) -> list[str]:
|
|
20
|
+
with open(self.path, 'r') as f:
|
|
21
|
+
return f.readlines()
|
|
22
|
+
|
|
23
|
+
def write(self, lines: list[str]) -> None:
|
|
24
|
+
with open(self.path, 'a') as f:
|
|
25
|
+
f.writelines(lines)
|
|
26
|
+
|
|
27
|
+
def clear(self):
|
|
28
|
+
with open(self.path, 'w') as _:
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
__all__ = [
|
|
33
|
+
'TemporaryFile'
|
|
34
|
+
]
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import sys, os
|
|
2
|
+
from typing import Optional
|
|
3
|
+
from ..context_managers import TemporaryFile
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class LayeredCommand:
|
|
7
|
+
class_flush_stdout: bool = True
|
|
8
|
+
class_raise_on_fail: bool = True
|
|
9
|
+
class_verbose: bool = False
|
|
10
|
+
_cls_prev_instance: Optional['LayeredCommand'] = None
|
|
11
|
+
_id: int = 0
|
|
12
|
+
|
|
13
|
+
def __init__(
|
|
14
|
+
self,
|
|
15
|
+
command: Optional[str] = None,
|
|
16
|
+
instance_flush_stdout: Optional[bool] = None,
|
|
17
|
+
instance_raise_on_fail: Optional[bool] = None,
|
|
18
|
+
instance_verbose: Optional[bool] = None
|
|
19
|
+
):
|
|
20
|
+
self._command = command if command is not None else ""
|
|
21
|
+
self._instance_flush_stdout = instance_flush_stdout
|
|
22
|
+
self._instance_raise_on_fail = instance_raise_on_fail
|
|
23
|
+
self._instance_verbose = instance_verbose
|
|
24
|
+
self._prev_instance = LayeredCommand._cls_prev_instance
|
|
25
|
+
LayeredCommand._cls_prev_instance = self
|
|
26
|
+
self._executor = os.system
|
|
27
|
+
self._has_entered: bool = False
|
|
28
|
+
|
|
29
|
+
def __enter__(self):
|
|
30
|
+
self._has_entered = True
|
|
31
|
+
return self
|
|
32
|
+
|
|
33
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
34
|
+
LayeredCommand._cls_prev_instance = self._prev_instance
|
|
35
|
+
|
|
36
|
+
def _build_command(self, *commands: str) -> str:
|
|
37
|
+
res = ""
|
|
38
|
+
if self._prev_instance is not None:
|
|
39
|
+
prev = self._prev_instance._build_command()
|
|
40
|
+
res += f"{prev} & " if prev != "" else ""
|
|
41
|
+
if self._command != "":
|
|
42
|
+
return res + " & ".join([self._command, *commands])
|
|
43
|
+
return res + " & ".join(commands)
|
|
44
|
+
|
|
45
|
+
def _error(self, predicate: bool, command: str, code: int, command_verbose: Optional[bool]) -> None:
|
|
46
|
+
verbose = command_verbose if command_verbose is not None else (
|
|
47
|
+
self._instance_verbose if self._instance_verbose is not None
|
|
48
|
+
else LayeredCommand.class_verbose)
|
|
49
|
+
if predicate:
|
|
50
|
+
if verbose:
|
|
51
|
+
raise RuntimeError(f"command '{command}' failed with exit code {code}")
|
|
52
|
+
sys.exit(1)
|
|
53
|
+
|
|
54
|
+
def execute(self, *commands: str, command_flush_stdout: Optional[bool] = None,
|
|
55
|
+
command_raise_on_fail: bool = None, command_verbose: Optional[bool] = None) -> tuple[int, list[str]]:
|
|
56
|
+
if not self._has_entered:
|
|
57
|
+
raise RuntimeError(
|
|
58
|
+
"LayeredCommand must be used with a context manager. Use as: `with LayeredCommand(...) as l1:`")
|
|
59
|
+
command_flush_stdout = command_flush_stdout if command_flush_stdout is not None else (
|
|
60
|
+
self._instance_flush_stdout if self._instance_flush_stdout is not None
|
|
61
|
+
else LayeredCommand.class_flush_stdout)
|
|
62
|
+
raise_on_fail = command_raise_on_fail if command_raise_on_fail is not None else (
|
|
63
|
+
self._instance_raise_on_fail if self._instance_raise_on_fail is not None
|
|
64
|
+
else LayeredCommand.class_raise_on_fail)
|
|
65
|
+
|
|
66
|
+
command = self._build_command(*commands)
|
|
67
|
+
if command_flush_stdout:
|
|
68
|
+
code = self._executor(command)
|
|
69
|
+
self._error(raise_on_fail and code != 0, command, code, command_verbose)
|
|
70
|
+
return code, []
|
|
71
|
+
|
|
72
|
+
temp_name = f"./alkjgaprgijfpeasjkegnrtlskdjfnbvlkajdertnbolrijk_{LayeredCommand._id}"
|
|
73
|
+
LayeredCommand._id += 1
|
|
74
|
+
with TemporaryFile(temp_name) as temp:
|
|
75
|
+
command += f" >> {temp_name}"
|
|
76
|
+
code = self._executor(command)
|
|
77
|
+
self._error(raise_on_fail and code != 0, command, code, command_verbose)
|
|
78
|
+
return code, temp.read()
|
|
79
|
+
|
|
80
|
+
def __call__(self, *args, **kwargs) -> tuple[int, list[str]]:
|
|
81
|
+
return self.execute(*args, **kwargs)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
__all__ = [
|
|
85
|
+
'LayeredCommand'
|
|
86
|
+
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: danielutils
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.81
|
|
4
4
|
Summary: A python utils library for things I find useful
|
|
5
5
|
Author-email: danielnachumdev <danielnachumdev@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -41,7 +41,7 @@ License-File: LICENSE
|
|
|
41
41
|
[](https://www.python.org/downloads/release/python-31011/)
|
|
42
42
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/gitleaks.yml)
|
|
43
43
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/github-code-scanning/codeql)
|
|
44
|
-
# danielutils v=0.9.
|
|
44
|
+
# danielutils v=0.9.81
|
|
45
45
|
A utils library for things that I find useful for my coding workflow.\
|
|
46
46
|
Feel free to use and / or contribute / improve my code :)
|
|
47
47
|
|
|
@@ -42,6 +42,8 @@ danielutils/better_builtins/typed_builtins/tdict.py
|
|
|
42
42
|
danielutils/better_builtins/typed_builtins/tlist.py
|
|
43
43
|
danielutils/better_builtins/typed_builtins/tset.py
|
|
44
44
|
danielutils/better_builtins/typed_builtins/ttuple.py
|
|
45
|
+
danielutils/context_managers/__init__.py
|
|
46
|
+
danielutils/context_managers/temporary_file.py
|
|
45
47
|
danielutils/conversions/__init__.py
|
|
46
48
|
danielutils/conversions/main_conversions.py
|
|
47
49
|
danielutils/conversions/specialized_conversions/__init__.py
|
|
@@ -142,6 +144,7 @@ danielutils/snippets/__init__.py
|
|
|
142
144
|
danielutils/snippets/try_get.py
|
|
143
145
|
danielutils/system/__init__.py
|
|
144
146
|
danielutils/system/independent.py
|
|
147
|
+
danielutils/system/layered_command.py
|
|
145
148
|
danielutils/system/windows/__init__.py
|
|
146
149
|
danielutils/system/windows/win32_ctime.py
|
|
147
150
|
danielutils/system/windows/windows.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/database/cached_database.py
RENAMED
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/database/redis_database.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/multiprogramming/__init__.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/multiprogramming/multi_id.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/multiprogramming/worker.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/abstractions/multiprogramming/worker_pool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/__init__.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/factory.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/tdict.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/tlist.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/tset.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/better_builtins/typed_builtins/ttuple.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/conversions/specialized_conversions/to_hex.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/conversions/specialized_conversions/to_int.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/queue/priority_queue.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/data_structures/trees/binary_syntax_tree.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/metaclasses/implicit_data_deleter_meta.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/function/function_reflections.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/get_traceback.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/interpreter/python_version.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/module/module_reflections.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/reflection/module/package_reflection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/distributions.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/expressions/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/funcs/__init__.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/funcs/covariance.py
RENAMED
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/funcs/expected_value.py
RENAMED
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/funcs/variance.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.80 → danielutils-0.9.81}/danielutils/university/probability/transformation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|