winipedia-utils 0.1.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.
Files changed (64) hide show
  1. winipedia_utils/__init__.py +1 -0
  2. winipedia_utils/concurrent/__init__.py +1 -0
  3. winipedia_utils/concurrent/concurrent.py +242 -0
  4. winipedia_utils/concurrent/multiprocessing.py +115 -0
  5. winipedia_utils/concurrent/multithreading.py +93 -0
  6. winipedia_utils/consts.py +22 -0
  7. winipedia_utils/data/__init__.py +1 -0
  8. winipedia_utils/data/dataframe.py +7 -0
  9. winipedia_utils/django/__init__.py +27 -0
  10. winipedia_utils/django/bulk.py +536 -0
  11. winipedia_utils/django/command.py +334 -0
  12. winipedia_utils/django/database.py +304 -0
  13. winipedia_utils/git/__init__.py +1 -0
  14. winipedia_utils/git/gitignore.py +80 -0
  15. winipedia_utils/git/pre_commit/__init__.py +1 -0
  16. winipedia_utils/git/pre_commit/config.py +60 -0
  17. winipedia_utils/git/pre_commit/hooks.py +109 -0
  18. winipedia_utils/git/pre_commit/run_hooks.py +49 -0
  19. winipedia_utils/iterating/__init__.py +1 -0
  20. winipedia_utils/iterating/iterate.py +29 -0
  21. winipedia_utils/logging/__init__.py +1 -0
  22. winipedia_utils/logging/ansi.py +6 -0
  23. winipedia_utils/logging/config.py +64 -0
  24. winipedia_utils/logging/logger.py +26 -0
  25. winipedia_utils/modules/__init__.py +1 -0
  26. winipedia_utils/modules/class_.py +76 -0
  27. winipedia_utils/modules/function.py +86 -0
  28. winipedia_utils/modules/module.py +361 -0
  29. winipedia_utils/modules/package.py +350 -0
  30. winipedia_utils/oop/__init__.py +1 -0
  31. winipedia_utils/oop/mixins/__init__.py +1 -0
  32. winipedia_utils/oop/mixins/meta.py +315 -0
  33. winipedia_utils/oop/mixins/mixin.py +28 -0
  34. winipedia_utils/os/__init__.py +1 -0
  35. winipedia_utils/os/os.py +61 -0
  36. winipedia_utils/projects/__init__.py +1 -0
  37. winipedia_utils/projects/poetry/__init__.py +1 -0
  38. winipedia_utils/projects/poetry/config.py +91 -0
  39. winipedia_utils/projects/poetry/poetry.py +30 -0
  40. winipedia_utils/setup.py +36 -0
  41. winipedia_utils/testing/__init__.py +1 -0
  42. winipedia_utils/testing/assertions.py +23 -0
  43. winipedia_utils/testing/convention.py +177 -0
  44. winipedia_utils/testing/create_tests.py +286 -0
  45. winipedia_utils/testing/fixtures.py +28 -0
  46. winipedia_utils/testing/tests/__init__.py +1 -0
  47. winipedia_utils/testing/tests/base/__init__.py +1 -0
  48. winipedia_utils/testing/tests/base/fixtures/__init__.py +1 -0
  49. winipedia_utils/testing/tests/base/fixtures/fixture.py +6 -0
  50. winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +1 -0
  51. winipedia_utils/testing/tests/base/fixtures/scopes/class_.py +33 -0
  52. winipedia_utils/testing/tests/base/fixtures/scopes/function.py +7 -0
  53. winipedia_utils/testing/tests/base/fixtures/scopes/module.py +31 -0
  54. winipedia_utils/testing/tests/base/fixtures/scopes/package.py +7 -0
  55. winipedia_utils/testing/tests/base/fixtures/scopes/session.py +224 -0
  56. winipedia_utils/testing/tests/base/utils/__init__.py +1 -0
  57. winipedia_utils/testing/tests/base/utils/utils.py +82 -0
  58. winipedia_utils/testing/tests/conftest.py +26 -0
  59. winipedia_utils/text/__init__.py +1 -0
  60. winipedia_utils/text/string.py +126 -0
  61. winipedia_utils-0.1.0.dist-info/LICENSE +21 -0
  62. winipedia_utils-0.1.0.dist-info/METADATA +350 -0
  63. winipedia_utils-0.1.0.dist-info/RECORD +64 -0
  64. winipedia_utils-0.1.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,350 @@
1
+ Metadata-Version: 2.3
2
+ Name: winipedia-utils
3
+ Version: 0.1.0
4
+ Summary: A package with many utility functions
5
+ License: MIT
6
+ Author: Winipedia
7
+ Requires-Python: >=3.12
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ Requires-Dist: defusedxml (>=0.7.1,<0.8.0)
13
+ Requires-Dist: django (>=5.2.1,<6.0.0)
14
+ Requires-Dist: pathspec (>=0.12.1,<0.13.0)
15
+ Requires-Dist: setuptools (>=80.3.1,<81.0.0)
16
+ Requires-Dist: tomlkit (>=0.13.2,<0.14.0)
17
+ Requires-Dist: tqdm (>=4.67.1,<5.0.0)
18
+ Description-Content-Type: text/markdown
19
+
20
+ # Winipedia Utils
21
+
22
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
23
+ [![Poetry](https://img.shields.io/badge/dependency%20management-poetry-blue.svg)](https://python-poetry.org/)
24
+ [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)
25
+ [![Type checked: mypy](https://img.shields.io/badge/type%20checked-mypy-blue.svg)](https://mypy-lang.org/)
26
+ [![Security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://bandit.readthedocs.io/)
27
+
28
+ A comprehensive Python utility ecosystem designed to scale into an all-in-one toolkit for Python development. Winipedia Utils provides battle-tested utilities for Django, dataframes, strings, concurrent processing, iterating, and any other tools needed for full Python projects, while enforcing clean code practices through automated tooling.
29
+
30
+ ## ๐ŸŽฏ Core Purpose
31
+
32
+ Winipedia Utils serves as the **foundation for reducing repeated code** across Python projects while **enforcing clean code practices** through automated tooling. The project setup script automatically configures your development environment with industry best practices, ensuring consistent code quality across all your projects.
33
+
34
+ ### Key Benefits
35
+
36
+ - **๐Ÿš€ Zero-configuration setup** - Complete development environment in one command
37
+ - **๐Ÿงช Automated test generation** - 100% test coverage scaffolding for your entire codebase
38
+ - **๐Ÿ” Quality assurance** - Automated linting, type checking, and security scanning
39
+ - **๐Ÿ“ฆ Comprehensive utilities** - Growing collection of production-ready utility functions
40
+ - **๐Ÿ”„ Consistent standards** - Enforced code style and testing patterns across projects
41
+
42
+ ## ๐Ÿ—๏ธ Some Implementation
43
+
44
+ ### Project Setup & Automation
45
+ - **Automated dependency installation** (ruff, mypy, pytest, bandit, pre-commit)
46
+ - **Pre-commit hook configuration** for code quality enforcement
47
+ - **pyproject.toml configuration** with optimal tool settings
48
+ - **Complete development environment setup** in a single command
49
+
50
+ ### Core Utility Modules
51
+
52
+ #### ๐Ÿงช Testing Infrastructure (`testing/`)
53
+ - **Automated test file generation** for entire codebases
54
+ - **Test stub creation** for every function, class, and method
55
+ - **Mirror test structure** maintaining 1:1 correspondence with source code
56
+ - **Testing convention enforcement** with pytest integration
57
+
58
+ #### ๐Ÿ” Module Introspection (`modules/`)
59
+ - **Package discovery and manipulation** utilities
60
+ - **Dynamic module creation and import** capabilities
61
+ - **Code analysis and extraction** tools
62
+ - **Python object introspection** and manipulation
63
+
64
+ #### โšก Concurrent Processing (`concurrent/`)
65
+ - **Multiprocessing utilities** with automatic worker optimization
66
+ - **Multithreading support** for I/O-bound tasks
67
+ - **Timeout handling** and process management
68
+ - **Progress tracking** with tqdm integration
69
+
70
+ #### ๐ŸŒ Django Utilities (`django/`)
71
+ - **Bulk operations** with multithreaded processing for create, update, delete
72
+ - **Advanced BaseCommand** with logging, validation, and common arguments
73
+ - **Database utilities** including model hashing and topological sorting
74
+ - **Model introspection** and dependency analysis tools
75
+
76
+ #### ๐Ÿ“Š Data Processing (`data/`)
77
+ - **DataFrame utilities** for data manipulation and analysis
78
+ - **Data cleaning and transformation** operations
79
+ - **Aggregation and preprocessing** tools
80
+
81
+ #### ๐Ÿ”„ Iterating Utilities (`iterating/`)
82
+ - **Iterable manipulation** with safe length operations
83
+ - **Generator utilities** and iteration helpers
84
+ - **Collection processing** tools
85
+
86
+ #### ๐Ÿ“ Text Processing (`text/`)
87
+ - **String manipulation** utilities
88
+ - **XML parsing** with security features
89
+ - **Input handling** with timeout support
90
+ - **Hash generation** and text truncation
91
+
92
+ #### ๐Ÿ”ง Development Tools
93
+ - **Git integration** (`git/`) - gitignore handling, pre-commit management
94
+ - **Logging configuration** (`logging/`) - standardized logging setup
95
+ - **OS utilities** (`os/`) - command finding, subprocess management
96
+ - **OOP enhancements** (`oop/mixins/`) - advanced metaclasses and mixins
97
+ - **Project configuration** (`projects/poetry/`) - Poetry integration and management
98
+
99
+ ## ๐Ÿš€ Installation & Quick Start
100
+
101
+ ### Prerequisites
102
+ - Python 3.12+
103
+ - Poetry (for dependency management)
104
+
105
+ ### Installation
106
+
107
+ ```bash
108
+ # Add to your project
109
+ poetry add winipedia-utils
110
+
111
+ # Run the setup script
112
+ poetry run python -m winipedia_utils.setup
113
+ ```
114
+
115
+ ### What Happens During Setup
116
+
117
+ The setup script automatically:
118
+
119
+ 1. **Installs development dependencies**: ruff, mypy, pytest, bandit, pre-commit, and type stubs
120
+ 2. **Configures pre-commit hooks**: Automated code quality checks on every commit
121
+ 3. **Sets up pyproject.toml**: Optimal configurations for all development tools
122
+ 4. **Generates comprehensive tests**: Creates test files for your entire codebase
123
+ 5. **Runs initial quality checks**: Ensures everything is properly configured
124
+
125
+ ```python
126
+ # winipedia_utils/setup.py
127
+ def _setup() -> None:
128
+ """Set up the project."""
129
+ _install_dev_dependencies() # Install quality tools
130
+ _add_package_hook_to_pre_commit_config() # Configure pre-commit
131
+ _add_tool_configurations_to_pyproject_toml() # Setup tool configs
132
+ _run_all_hooks() # Generate tests & run checks
133
+ logger.info("Setup complete!")
134
+ ```
135
+
136
+ ## ๐Ÿ’ก Usage Examples
137
+
138
+ ### Automated Test Generation
139
+
140
+ ```python
141
+ from winipedia_utils.testing.create_tests import create_tests
142
+
143
+ # Automatically generate test files for your entire project
144
+ create_tests()
145
+ # Creates comprehensive test structure with stubs for every function/class
146
+ ```
147
+
148
+ ### Module Introspection
149
+
150
+ ```python
151
+ from winipedia_utils.modules.package import get_scr_package, walk_package
152
+ from winipedia_utils.modules.function import get_all_functions_from_module
153
+
154
+ # Discover your main source package
155
+ src_package = get_scr_package()
156
+
157
+ # Walk through all modules in a package
158
+ for package, modules in walk_package(src_package):
159
+ for module in modules:
160
+ functions = get_all_functions_from_module(module)
161
+ print(f"Found {len(functions)} functions in {module.__name__}")
162
+ ```
163
+
164
+ ### Concurrent Processing
165
+
166
+ ```python
167
+ from winipedia_utils.concurrent.multiprocessing import multiprocess_loop
168
+ from winipedia_utils.concurrent.multithreading import multithread_loop
169
+
170
+ # CPU-bound tasks with multiprocessing
171
+ def cpu_intensive_task(data):
172
+ return complex_calculation(data)
173
+
174
+ results = multiprocess_loop(
175
+ process_function=cpu_intensive_task,
176
+ process_args=[[item] for item in large_dataset]
177
+ )
178
+
179
+ # I/O-bound tasks with multithreading
180
+ def io_task(url):
181
+ return fetch_data(url)
182
+
183
+ results = multithread_loop(
184
+ process_function=io_task,
185
+ process_args=[[url] for url in urls]
186
+ )
187
+ ```
188
+
189
+ ### Django Bulk Operations
190
+
191
+ ```python
192
+ from winipedia_utils.django.bulk import (
193
+ bulk_create_in_steps,
194
+ bulk_update_in_steps,
195
+ bulk_delete_in_steps
196
+ )
197
+
198
+ # Efficient bulk creation with multithreading
199
+ created_objects = bulk_create_in_steps(
200
+ model=MyModel,
201
+ bulk=[MyModel(name=f"item_{i}") for i in range(10000)],
202
+ step=1000
203
+ )
204
+
205
+ # Bulk update with field specification
206
+ updated_count = bulk_update_in_steps(
207
+ model=MyModel,
208
+ bulk=objects_to_update,
209
+ update_fields=['name', 'status'],
210
+ step=1000
211
+ )
212
+
213
+ # Safe bulk deletion with cascade handling
214
+ deleted_count, deletion_summary = bulk_delete_in_steps(
215
+ model=MyModel,
216
+ bulk=objects_to_delete,
217
+ step=1000
218
+ )
219
+ ```
220
+
221
+ ### Django Management Commands
222
+
223
+ ```python
224
+ from winipedia_utils.django.command import ABCBaseCommand
225
+
226
+ class MyCommand(ABCBaseCommand):
227
+ """Custom Django command with built-in logging and validation."""
228
+
229
+ help = "Process data with automatic logging and error handling"
230
+
231
+ def add_command_arguments(self, parser):
232
+ parser.add_argument('--batch-size', type=int, default=1000)
233
+
234
+ def handle_command(self, *args, **options):
235
+ # Command logic with automatic logging and performance tracking
236
+ batch_size = options['batch_size']
237
+ self.stdout.write(f"Processing with batch size: {batch_size}")
238
+ ```
239
+
240
+ ### String Utilities
241
+
242
+ ```python
243
+ from winipedia_utils.text.string import (
244
+ value_to_truncated_string,
245
+ ask_for_input_with_timeout,
246
+ get_reusable_hash
247
+ )
248
+
249
+ # Safely truncate any value to string
250
+ truncated = value_to_truncated_string(large_object, max_length=100)
251
+
252
+ # Get user input with timeout
253
+ try:
254
+ user_input = ask_for_input_with_timeout("Enter value: ", timeout=30)
255
+ except TimeoutError:
256
+ print("Input timeout exceeded")
257
+
258
+ # Generate consistent hashes
259
+ hash_value = get_reusable_hash("some data")
260
+ ```
261
+
262
+ ### Iterating Utilities
263
+
264
+ ```python
265
+ from winipedia_utils.iterating.iterate import get_len_with_default
266
+
267
+ # Safe length operations with fallback
268
+ length = get_len_with_default(some_iterable, default=0)
269
+
270
+ # Works with generators and other iterables that don't support len()
271
+ gen = (x for x in range(100))
272
+ safe_length = get_len_with_default(gen, default=100)
273
+ ```
274
+
275
+ ### Advanced OOP Features
276
+
277
+ ```python
278
+ from winipedia_utils.oop.mixins.meta import ABCImplementationLoggingMeta
279
+
280
+ class MyClass(metaclass=ABCImplementationLoggingMeta):
281
+ """Class with automatic logging and implementation enforcement."""
282
+
283
+ def my_method(self):
284
+ # Automatically logged with performance tracking
285
+ return "result"
286
+ ```
287
+
288
+ ## ๐Ÿ”ฎ Future Vision
289
+
290
+ Winipedia Utils is designed to scale into a comprehensive ecosystem covering many utilities
291
+
292
+ ## ๐Ÿ›ก๏ธ Development Standards
293
+
294
+ ### Automated Quality Assurance
295
+
296
+ Every utility in the ecosystem benefits from:
297
+
298
+ - **๐Ÿงช 100% Test Coverage Scaffolding**: Automated test generation ensures no function goes untested
299
+ - **๐Ÿ” Static Type Checking**: MyPy ensures type safety across all utilities
300
+ - **๐ŸŽจ Code Formatting**: Ruff enforces consistent code style
301
+ - **๐Ÿ”’ Security Scanning**: Bandit identifies potential security issues
302
+ - **๐Ÿ“ Documentation Standards**: Consistent docstring patterns and examples
303
+
304
+ ### Pre-commit Hooks
305
+
306
+ Automatically configured hooks ensure:
307
+ - Code formatting with ruff
308
+ - Type checking with mypy
309
+ - Security scanning with bandit
310
+ - Test generation and execution
311
+ - Dependency validation
312
+ See details in `winipedia_utils/git/pre_commit/hooks.py` and `winipedia_utils/git/pre_commit/run_hooks.py`
313
+
314
+ ## ๐Ÿ—๏ธ Project Structure
315
+
316
+ ```
317
+ winipedia_utils/
318
+ โ”œโ”€โ”€ concurrent/ # Parallel processing utilities
319
+ โ”œโ”€โ”€ conventions/ # Testing and naming conventions
320
+ โ”œโ”€โ”€ data/ # Data science utilities (expanding)
321
+ โ”œโ”€โ”€ git/ # Git integration and workflows
322
+ โ”œโ”€โ”€ logging/ # Standardized logging configuration
323
+ โ”œโ”€โ”€ modules/ # Package/module introspection
324
+ โ”œโ”€โ”€ oop/ # Object-oriented programming enhancements
325
+ โ”œโ”€โ”€ os/ # Operating system utilities
326
+ โ”œโ”€โ”€ projects/ # Project configuration (Poetry, etc.)
327
+ โ”œโ”€โ”€ testing/ # Automated test generation
328
+ โ”œโ”€โ”€ text/ # String and text processing
329
+ โ””โ”€โ”€ setup.py # Main setup script
330
+ ```
331
+
332
+ ## ๐Ÿค Contributing
333
+
334
+ Winipedia Utils welcomes contributions! The automated setup ensures that all contributions maintain high quality standards:
335
+
336
+ 1. Fork the repository
337
+ 2. Run `poetry run python -m winipedia_utils.setup` in your fork
338
+ 3. Add your utilities following the established patterns
339
+ 4. Tests are automatically generated - implement the test logic
340
+ 5. Pre-commit hooks ensure code quality
341
+ 6. Submit a pull request
342
+
343
+ ## ๐Ÿ“„ License
344
+
345
+ MIT License - see LICENSE file for details.
346
+
347
+ ---
348
+
349
+ **Note**: All `_private_methods` are intended for internal use within the winipedia_utils package and cannot be used directly in external projects.
350
+
@@ -0,0 +1,64 @@
1
+ winipedia_utils/__init__.py,sha256=vOWZ8n-YemVIzDLd8eWw1HVPGH3jxuT6VtDKHbmxk_A,43
2
+ winipedia_utils/concurrent/__init__.py,sha256=Tu0ig4gVCk_f1n74G35hDwH-WS3P3STVQGWjxTIbbo8,54
3
+ winipedia_utils/concurrent/concurrent.py,sha256=hzcODH-EIruKXKDqGSqtWV0UZb5n8HOVdkrT3FctOro,8645
4
+ winipedia_utils/concurrent/multiprocessing.py,sha256=18MapAuhN3rtHQQZ3vvQ3wb_erYkO74T9UWUCjXPOzc,4386
5
+ winipedia_utils/concurrent/multithreading.py,sha256=myrHoSSc6UW86SdCz1OksQcAcq29-2Rk7fa1wTT89BM,3177
6
+ winipedia_utils/consts.py,sha256=P-VbaPvjNockqppQ9cjSIEzf8iXzeEUHcVRaMOyGCCI,518
7
+ winipedia_utils/data/__init__.py,sha256=9RZFoceil00La5TyNM1baF-fjfAKKV22auLSxvJ_QD0,49
8
+ winipedia_utils/data/dataframe.py,sha256=7rRy4LDv-4bJeISUPsxrQqTiFI7ENSzk4gKaVgTWD04,281
9
+ winipedia_utils/django/__init__.py,sha256=ZnI3rINKvT4m9K3eeGg9RVBjBPH73zaBhb0Qy4hLt5g,683
10
+ winipedia_utils/django/bulk.py,sha256=7MLfq83xanxbVFo4ANdtcYv5S-oQwdrNkH5ljPzjKLM,20375
11
+ winipedia_utils/django/command.py,sha256=ENEg_crSbnm3nQIks-j2DjjAfeZ7ppJkZOyw__IpSYw,13824
12
+ winipedia_utils/django/database.py,sha256=tH8AA5LTMYY-co8R_pI6xs0SrmJqjrOEJUJdnWc4TBE,11487
13
+ winipedia_utils/git/__init__.py,sha256=pPo5DDqaQkFim8L6x22DXjqthLnKAxLyXlXl7JXGUdw,48
14
+ winipedia_utils/git/gitignore.py,sha256=iliNf_FBfcnyGW2zjoh1yg5fOVvSAISt9vOJb10rAUs,2551
15
+ winipedia_utils/git/pre_commit/__init__.py,sha256=2sBe5nOqmm3qb8YjhZzE4tCHhqxWOZ6R2ECljSVG7i4,59
16
+ winipedia_utils/git/pre_commit/config.py,sha256=MUgk-43kd5l0cRk9VKzMQl88bDodsN8rSZcMzSzPpQw,1959
17
+ winipedia_utils/git/pre_commit/hooks.py,sha256=Q6rXvbpUf9UasQ8vSBruoLA-wjm37jamvIUkXJ1B3FE,3210
18
+ winipedia_utils/git/pre_commit/run_hooks.py,sha256=WoF1WDr07mS2GpKt0M-TpnuWfS0-Hwa4tP6z_9-JqlU,1572
19
+ winipedia_utils/iterating/__init__.py,sha256=TZ0SSFA3zCJLk0z3IsLMxJqsfGzfxOSUKbQmwW-Dsqg,54
20
+ winipedia_utils/iterating/iterate.py,sha256=IpV710BS5fBPSzwZTTJLUqEhSHT-gmnQxMg3uEt85CA,973
21
+ winipedia_utils/logging/__init__.py,sha256=AMt1LwA_E7hexYjMpGzUempoyDdAF-dowWvq59wC5aM,51
22
+ winipedia_utils/logging/ansi.py,sha256=54MIYKppssv-TBFavOAi28aCo4Cg--cChTzdjGsBXJY,107
23
+ winipedia_utils/logging/config.py,sha256=NAXCxVRkEfkf119HCg1zrdP1l37DW4cFDHvKrBEjQ0o,2959
24
+ winipedia_utils/logging/logger.py,sha256=tCcUwAVLVr3Bec7_i-SoKvBPNCJSEmyuvBW2gbqjPMk,727
25
+ winipedia_utils/modules/__init__.py,sha256=e3CFaC3FhK4ibknFOv1bqOZxA7XeVwmLqWX7oajUm78,51
26
+ winipedia_utils/modules/class_.py,sha256=RDjal6QYYs9z81DT1mIFrnEhQ9vgN2tCAYN1WWnN24Y,2462
27
+ winipedia_utils/modules/function.py,sha256=Qn1OPV5dwO-7f3a0f0RpWcrH-E9teGPwldRtwbFYzRM,2551
28
+ winipedia_utils/modules/module.py,sha256=iJwUJPhVkxyRjJqHVVWh3GNJFiYf45ZdSfR21puQAmw,12673
29
+ winipedia_utils/modules/package.py,sha256=CKyeT4Pb2KBzpCM-tHxnC1kq6XvU7W7pWLz1W-wJiv0,12245
30
+ winipedia_utils/oop/__init__.py,sha256=wGjsVwLbTVEQWOfDJvN9nlvC-3NmAi8Doc2xIrm6e78,47
31
+ winipedia_utils/oop/mixins/__init__.py,sha256=PDK-cJcdRUfDUCz36qQ5pmMW07G133WtN49OpmILGNI,54
32
+ winipedia_utils/oop/mixins/meta.py,sha256=UpHags1j80OABxW4Q3QYt7A7lLIArvgUrGcWeYJaRyU,10576
33
+ winipedia_utils/oop/mixins/mixin.py,sha256=GuYdeueiOIHoRi9ds2ztxUcLnrcsBhHAsbrO43N9AGg,1170
34
+ winipedia_utils/os/__init__.py,sha256=WSLt7tb6HqWRlCGGIEwRfVksF0sLJNeEW3iZeJhGWk0,47
35
+ winipedia_utils/os/os.py,sha256=ITuiLLfjGBV2jH8tHQfwVzsICT-jY1zUxtwu3ASJBG4,1690
36
+ winipedia_utils/projects/__init__.py,sha256=6oTiSlUMAwO5xnH4SGVnvspzKcxrxo9kn1L4xkjq1p8,53
37
+ winipedia_utils/projects/poetry/__init__.py,sha256=0yNMuu9KmM19od4VBxBV3HLK-RdCsa0e2Zhg33J7RmQ,60
38
+ winipedia_utils/projects/poetry/config.py,sha256=r8sbhsF26yro5qLg2srjl3s9MftwEbfmE2F9bAFA58E,2976
39
+ winipedia_utils/projects/poetry/poetry.py,sha256=5jyUSMxhCZ7pz9bOaz5E9r7Da9qIrGOp6wcBzI1y7Cg,932
40
+ winipedia_utils/setup.py,sha256=ozdPXwHBRWLSiL2xLfbWnRZ_OHl560eKgP8e94cuDAM,1280
41
+ winipedia_utils/testing/__init__.py,sha256=kXhB5xw02ec5xpcW_KV--9CBKdyCjnuR-NZzAJ5tq0g,51
42
+ winipedia_utils/testing/assertions.py,sha256=0JF4mqVTnLQ1qkAL_FuTwyN_idr00rvVlta7aDdnUXA,851
43
+ winipedia_utils/testing/convention.py,sha256=NxC_hYaUXshsa6LL6nQoEEKpTzC1KwTloKL8aS2gUPI,5010
44
+ winipedia_utils/testing/create_tests.py,sha256=9SrmzyMD7yPKCoLKkM0i_wRASHw2hJ_61sNuvZtYmt4,9820
45
+ winipedia_utils/testing/fixtures.py,sha256=e0ax1n1zqzmLawA26k0EtNa3rYSMu10lMNVRjBuIGMs,1061
46
+ winipedia_utils/testing/tests/__init__.py,sha256=kL-1O6lAO5j4JPOqPdi3dHdbOQ_UXcgPFppj82HhrRU,57
47
+ winipedia_utils/testing/tests/base/__init__.py,sha256=dBH1yfONmqUC49zshS6BJ4ZgEcw7iFGoFCqRmU7Vhrw,62
48
+ winipedia_utils/testing/tests/base/fixtures/__init__.py,sha256=CeRM8RSAA1UnH81OI09ZgGWxryUDvDz6gSahGa-U2hI,72
49
+ winipedia_utils/testing/tests/base/fixtures/fixture.py,sha256=-MHvMCwLJwJrkie7fgVIhFA_nt-fp0-KfiisERcHb_E,187
50
+ winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py,sha256=-n_BLhTVC1oH7qVL0JYXm82zqFPgobQCojO-PirrKo0,78
51
+ winipedia_utils/testing/tests/base/fixtures/scopes/class_.py,sha256=XCx4HZeHbJJ-C7wGsi5bQx7nPGTuAI3xhHp1FpGeom8,1133
52
+ winipedia_utils/testing/tests/base/fixtures/scopes/function.py,sha256=5dW7-IPqJ_3Q2j1vftZL5FYKvNSKufqiHzLTTWYhja4,309
53
+ winipedia_utils/testing/tests/base/fixtures/scopes/module.py,sha256=V0H9WFrdSV7uj__bXM_GKcCJnjResqI7fFjcxyvNaZk,1169
54
+ winipedia_utils/testing/tests/base/fixtures/scopes/package.py,sha256=IKOfj6vfyjEQdRV5cJoPRQvALmePpGxWkGy23di00-w,309
55
+ winipedia_utils/testing/tests/base/fixtures/scopes/session.py,sha256=dd8QRSV_zJpz6_r0Xinryar-ciblFxszn0Bh5p2I6Pw,7652
56
+ winipedia_utils/testing/tests/base/utils/__init__.py,sha256=mC-8dCkp8xarqkQu2QQLrPjHi6Ww9hcixWdHeQHWeRs,68
57
+ winipedia_utils/testing/tests/base/utils/utils.py,sha256=dUPDrgAxlfREQb33zz23MfzacLLuwjy2AO-PQQp_aSI,2820
58
+ winipedia_utils/testing/tests/conftest.py,sha256=CvLtsr-KhSPzbQYin6SYZQC1Ez3AzIsqCWhuLuXinAs,826
59
+ winipedia_utils/text/__init__.py,sha256=j2bwtK6kyeHI6SnoBjpRju0C1W2n2paXBDlNjNtaUxA,48
60
+ winipedia_utils/text/string.py,sha256=1jbBftlgxffGgSlPnQh3aRPIr8XekEwpSenjFCW6JyM,3478
61
+ winipedia_utils-0.1.0.dist-info/LICENSE,sha256=3PrKJ2CWNrnyyHaC_r0wPDSukVWgmjOxHr__eQVH7cw,1087
62
+ winipedia_utils-0.1.0.dist-info/METADATA,sha256=_mORtARL4qiNjHVQRf-1FtpYsFmKFhruGwGSa5kzPzg,12311
63
+ winipedia_utils-0.1.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
64
+ winipedia_utils-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: poetry-core 2.1.3
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any