DataOpsHub 6.2.0__tar.gz → 6.6.12__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.
Files changed (38) hide show
  1. {dataopshub-6.2.0 → dataopshub-6.6.12}/DataOpsHub/__init__.py +1 -1
  2. dataopshub-6.6.12/DataOpsHub.egg-info/PKG-INFO +446 -0
  3. dataopshub-6.6.12/DataOpsHub.egg-info/SOURCES.txt +11 -0
  4. {dataopshub-6.2.0 → dataopshub-6.6.12}/DataOpsHub.egg-info/requires.txt +5 -4
  5. dataopshub-6.6.12/LICENSE +21 -0
  6. dataopshub-6.6.12/MANIFEST.in +7 -0
  7. dataopshub-6.6.12/PKG-INFO +446 -0
  8. dataopshub-6.6.12/README.md +389 -0
  9. dataopshub-6.6.12/pyproject.toml +75 -0
  10. dataopshub-6.6.12/setup.py +25 -0
  11. dataopshub-6.2.0/DataOpsHub/constants/__init__.py +0 -29
  12. dataopshub-6.2.0/DataOpsHub/constants/error_messages.py +0 -30
  13. dataopshub-6.2.0/DataOpsHub/constants/table_mappings.py +0 -15
  14. dataopshub-6.2.0/DataOpsHub/data_entry_forms/__init__.py +0 -34
  15. dataopshub-6.2.0/DataOpsHub/data_entry_forms/forms/__init__.py +0 -13
  16. dataopshub-6.2.0/DataOpsHub/data_entry_forms/forms/forms.py +0 -27
  17. dataopshub-6.2.0/DataOpsHub/data_entry_forms/validators/__init__.py +0 -53
  18. dataopshub-6.2.0/DataOpsHub/data_entry_forms/validators/form_field_validations.py +0 -513
  19. dataopshub-6.2.0/DataOpsHub/databases/__init__.py +0 -10
  20. dataopshub-6.2.0/DataOpsHub/databases/database_handler.py +0 -878
  21. dataopshub-6.2.0/DataOpsHub/databases/upload_data.py +0 -118
  22. dataopshub-6.2.0/DataOpsHub/models/__init__.py +0 -17
  23. dataopshub-6.2.0/DataOpsHub/models/base.py +0 -82
  24. dataopshub-6.2.0/DataOpsHub/models/user.py +0 -110
  25. dataopshub-6.2.0/DataOpsHub/security/__init__.py +0 -15
  26. dataopshub-6.2.0/DataOpsHub/security/automated_passwords.py +0 -54
  27. dataopshub-6.2.0/DataOpsHub/security/config.py +0 -86
  28. dataopshub-6.2.0/DataOpsHub/security/exceptions.py +0 -56
  29. dataopshub-6.2.0/DataOpsHub/services/__init__.py +0 -14
  30. dataopshub-6.2.0/DataOpsHub/services/user_service.py +0 -213
  31. dataopshub-6.2.0/DataOpsHub.egg-info/PKG-INFO +0 -160
  32. dataopshub-6.2.0/DataOpsHub.egg-info/SOURCES.txt +0 -28
  33. dataopshub-6.2.0/PKG-INFO +0 -160
  34. dataopshub-6.2.0/README.md +0 -110
  35. dataopshub-6.2.0/setup.py +0 -81
  36. {dataopshub-6.2.0 → dataopshub-6.6.12}/DataOpsHub.egg-info/dependency_links.txt +0 -0
  37. {dataopshub-6.2.0 → dataopshub-6.6.12}/DataOpsHub.egg-info/top_level.txt +0 -0
  38. {dataopshub-6.2.0 → dataopshub-6.6.12}/setup.cfg +0 -0
@@ -6,7 +6,7 @@ DataOpsHub is a comprehensive Python package for data operations in healthcare a
6
6
  It provides a set of tools for database operations, form validation, security, and web automation.
7
7
  """
8
8
 
9
- __version__ = '6.2.0'
9
+ __version__ = '6.6.12'
10
10
 
11
11
  # Define what should be available when using 'from DataOpsHub import *'
12
12
  __all__ = [
@@ -0,0 +1,446 @@
1
+ Metadata-Version: 2.4
2
+ Name: DataOpsHub
3
+ Version: 6.6.12
4
+ Summary: A Python toolkit for streamlined data operations and database management
5
+ Author-email: Jon Ander Gabantxo <jagabantxo@gmail.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2024 DataOpsHub
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+ Project-URL: Homepage, https://github.com/EusDancerDev/DataOpsHub
28
+ Project-URL: Documentation, https://github.com/EusDancerDev/DataOpsHub#readme
29
+ Project-URL: Repository, https://github.com/EusDancerDev/DataOpsHub.git
30
+ Project-URL: Bug Reports, https://github.com/EusDancerDev/DataOpsHub/issues
31
+ Classifier: Development Status :: 4 - Beta
32
+ Classifier: Intended Audience :: Developers
33
+ Classifier: Topic :: Database
34
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
35
+ Classifier: Programming Language :: Python :: 3
36
+ Classifier: Programming Language :: Python :: 3.10
37
+ Classifier: Programming Language :: Python :: 3.11
38
+ Classifier: Programming Language :: Python :: 3.12
39
+ Classifier: Operating System :: OS Independent
40
+ Requires-Python: >=3.10
41
+ Description-Content-Type: text/markdown
42
+ License-File: LICENSE
43
+ Requires-Dist: sqlalchemy>=2.0.0
44
+ Requires-Dist: numpy>=2.2.3
45
+ Requires-Dist: pandas>=2.2.3
46
+ Requires-Dist: filewise>=3.14.0
47
+ Requires-Dist: pygenutils>=17.1.0
48
+ Requires-Dist: paramlib>=3.5.0
49
+ Requires-Dist: email_validator>=2.0.0
50
+ Requires-Dist: selenium>=4.0.0
51
+ Provides-Extra: dev
52
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
53
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
54
+ Requires-Dist: black>=22.0.0; extra == "dev"
55
+ Requires-Dist: flake8>=5.0.0; extra == "dev"
56
+ Dynamic: license-file
57
+
58
+ # DataOpsHub
59
+
60
+ [![Python Version](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
61
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
62
+ [![PyPI Version](https://img.shields.io/pypi/v/dataopshub.svg)](https://pypi.org/project/dataopshub/)
63
+
64
+ **DataOpsHub** is a comprehensive Python toolkit designed specifically for healthcare data operations and management. It provides a robust set of tools for managing medical records, user data, form validation, database operations, and web automation in healthcare environments. The package emphasises data integrity, security, and compliance with healthcare standards including HL7 v2 compatibility.
65
+
66
+ ## Features
67
+
68
+ - **Healthcare Data Models**:
69
+ - Comprehensive user management with medical data relationships
70
+ - Vital signs tracking and monitoring
71
+ - Laboratory results management
72
+ - Medication history and prescription tracking
73
+ - HL7 v2 compatibility for healthcare data interchange
74
+
75
+ - **Database Operations**:
76
+ - Advanced SQLAlchemy-based database handling
77
+ - Multi-database support (MySQL, PostgreSQL, SQLite)
78
+ - Automated file-to-database loading (CSV, Excel, ODS)
79
+ - Comprehensive CRUD operations with error handling
80
+ - Data filtering and querying with temporal range support
81
+
82
+ - **Form Validation and Data Entry**:
83
+ - WTForms-based form validation for healthcare applications
84
+ - Comprehensive field validation (email, medical IDs, dates, demographics)
85
+ - Spanish DNI validation support
86
+ - JSON and form data validation with error reporting
87
+ - Medical data entry forms with specialised validations
88
+
89
+ - **Security and Configuration**:
90
+ - Automated secure password generation
91
+ - Comprehensive security configuration management
92
+ - Custom exception hierarchy for precise error handling
93
+ - Environment-based configuration with security best practices
94
+
95
+ - **Web Automation**:
96
+ - Selenium WebDriver setup and testing utilities
97
+ - Headless browser configuration for automated testing
98
+ - Support for Firefox and Chrome browsers in CI/CD environments
99
+
100
+ ## Installation
101
+
102
+ ### Prerequisites
103
+
104
+ Before installing, please ensure the following dependencies are available on your system:
105
+
106
+ - **External Tools** (required for full functionality):
107
+ - Database server (MySQL, PostgreSQL, or SQLite)
108
+ - Web browser (Firefox/Chrome for web automation features)
109
+
110
+ - **Required Third-Party Libraries**:
111
+
112
+ ```bash
113
+ pip install sqlalchemy pandas numpy scipy wtforms email-validator selenium
114
+ ```
115
+
116
+ Or via Anaconda (recommended channel: `conda-forge`):
117
+
118
+ ```bash
119
+ conda install -c conda-forge sqlalchemy pandas numpy scipy
120
+ pip install wtforms email-validator selenium
121
+ ```
122
+
123
+ - **Database Drivers** (choose based on your database):
124
+
125
+ ```bash
126
+ # For MySQL
127
+ pip install pymysql
128
+
129
+ # For PostgreSQL
130
+ pip install psycopg2-binary
131
+
132
+ # SQLite is included with Python
133
+ ```
134
+
135
+ - **Internal Package Dependencies**:
136
+
137
+ ```bash
138
+ pip install filewise paramlib
139
+ pip install pygenutils # Core functionality
140
+ pip install pygenutils[arrow] # With arrow support (optional)
141
+ ```
142
+
143
+ ### For regular users (from PyPI)
144
+
145
+ ```bash
146
+ pip install dataopshub
147
+ ```
148
+
149
+ ### For contributors/developers (with latest Git versions)
150
+
151
+ ```bash
152
+ # Install with development dependencies (includes latest Git versions)
153
+ pip install -e .[dev]
154
+
155
+ # Alternative: Use requirements-dev.txt for explicit Git dependencies
156
+ pip install -r requirements-dev.txt
157
+ pip install -e .
158
+ ```
159
+
160
+ **Benefits of the new approach:**
161
+
162
+ - **Regular users**: Simple `pip install dataopshub` with all dependencies included
163
+ - **Developers**: Access to latest Git versions for development and testing
164
+ - **PyPI compatibility**: All packages can be published without Git dependency issues
165
+
166
+ ### Troubleshooting
167
+
168
+ **If you encounter import errors:**
169
+
170
+ 1. **For PyPI users**: The package should install all dependencies automatically. If you get import errors, try:
171
+
172
+ ```bash
173
+ pip install --upgrade dataopshub
174
+ ```
175
+
176
+ 2. **For developers**: Make sure you've installed the development dependencies:
177
+
178
+ ```bash
179
+ pip install -e .[dev]
180
+ ```
181
+
182
+ 3. **Common issues**:
183
+ - **Missing dependencies**: For regular users, all dependencies are included. For developers, use `pip install -e .[dev]`
184
+ - **Python version**: Ensure you're using Python 3.10 or higher
185
+ - **Database drivers**: Install the appropriate database driver for your database system
186
+
187
+ ### Verify Installation
188
+
189
+ To verify that your installation is working correctly:
190
+
191
+ ```python
192
+ try:
193
+ import DataOpsHub
194
+ from filewise.general.introspection_utils import get_type_str
195
+ from pygenutils.arrays_and_lists.data_manipulation import flatten_list
196
+ from paramlib.config_params import DB_ERROR_CODE_DICT
197
+
198
+ print("✅ All imports successful!")
199
+ print(f"✅ DataOpsHub version: {DataOpsHub.__version__}")
200
+ print("✅ Installation is working correctly.")
201
+
202
+ except ImportError as e:
203
+ print(f"❌ Import error: {e}")
204
+ print("💡 For regular users: pip install dataopshub")
205
+ print("💡 For developers: pip install -e .[dev]")
206
+ ```
207
+
208
+ ## Usage
209
+
210
+ ### Basic Example - User Management
211
+
212
+ ```python
213
+ from DataOpsHub.models.user import User
214
+ from DataOpsHub.services.user_service import UserService
215
+ from DataOpsHub.databases.database_handler import init_db
216
+ from DataOpsHub.security.config import DATABASE_CREDENTIALS
217
+
218
+ # Initialize database
219
+ engine, Session = init_db(DATABASE_CREDENTIALS)
220
+ session = Session()
221
+
222
+ # Create user service
223
+ user_service = UserService(session)
224
+
225
+ # Create a new user
226
+ user_data = {
227
+ 'user_id': 'U001',
228
+ 'first_name': 'John',
229
+ 'last_name': 'Doe',
230
+ 'email': 'john.doe@example.com',
231
+ 'date_of_birth': '1990-01-01',
232
+ 'gender': 'Male'
233
+ }
234
+
235
+ result = user_service.create_user(user_data)
236
+ print(result['message']) # "User created successfully"
237
+ ```
238
+
239
+ ### Advanced Example - Medical Data Management
240
+
241
+ ```python
242
+ from DataOpsHub.models.user import VitalSigns, LabResults
243
+ from datetime import datetime
244
+
245
+ # Add vital signs for a user
246
+ vital_signs = VitalSigns(
247
+ user_id='U001',
248
+ heart_rate=72,
249
+ blood_pressure='120/80',
250
+ temperature=98.6,
251
+ oxygen_saturation=98
252
+ )
253
+
254
+ # Add lab results
255
+ lab_result = LabResults(
256
+ user_id='U001',
257
+ test_name='Complete Blood Count',
258
+ result='Normal',
259
+ unit='cells/mcL',
260
+ reference_range='4,500-11,000'
261
+ )
262
+
263
+ session.add(vital_signs)
264
+ session.add(lab_result)
265
+ session.commit()
266
+
267
+ # Get user with all medical data
268
+ user_data = user_service.get_user_with_related_data('U001')
269
+ print(f"User: {user_data['user'].first_name}")
270
+ print(f"Vital signs: {len(user_data['vital_signs'])}")
271
+ print(f"Lab results: {len(user_data['lab_results'])}")
272
+ ```
273
+
274
+ ### Form Validation Example
275
+
276
+ ```python
277
+ from DataOpsHub.data_entry_forms.forms.forms import RegistrationForm
278
+ from DataOpsHub.data_entry_forms.validators.form_field_validations import validate_field
279
+
280
+ # Validate a registration form
281
+ form_data = {
282
+ 'email': 'user@example.com',
283
+ 'first_name': 'John',
284
+ 'last_name': 'Doe'
285
+ }
286
+
287
+ form = RegistrationForm(data=form_data)
288
+ if form.validate():
289
+ print("Form validation successful!")
290
+ else:
291
+ print("Validation errors:", form.errors)
292
+
293
+ # Validate individual fields
294
+ email_result = validate_field('email', 'test@example.com', {}, [])
295
+ print(f"Email valid: {not email_result['has_error']}")
296
+ ```
297
+
298
+ ### Database File Upload Example
299
+
300
+ ```python
301
+ from DataOpsHub.databases.database_handler import upload_file_data
302
+
303
+ # Upload CSV data to database
304
+ upload_file_data(
305
+ input_file_list='medical_data.csv',
306
+ config=DATABASE_CREDENTIALS,
307
+ database_type='mysql',
308
+ if_exists='append',
309
+ dtype_dict={'patient_id': 'str', 'age': 'int64', 'temperature': 'float64'}
310
+ )
311
+ ```
312
+
313
+ ### Security Example
314
+
315
+ ```python
316
+ from DataOpsHub.security.automated_passwords import generate_automated_password
317
+ from DataOpsHub.security.exceptions import ValidationError
318
+
319
+ # Generate secure password
320
+ password = generate_automated_password(33, 127, 16)
321
+ print(password)
322
+
323
+ # Handle custom exceptions
324
+ try:
325
+ # Some operation that might fail
326
+ pass
327
+ except ValidationError as e:
328
+ print(f"Validation failed: {e.message}")
329
+ ```
330
+
331
+ ## Project Structure
332
+
333
+ The package is organised into specialised sub-packages for healthcare operations:
334
+
335
+ ```text
336
+ DataOpsHub/
337
+ ├── constants/
338
+ │ ├── error_messages.py # Standardised error messages
339
+ │ └── table_mappings.py # Database table field mappings
340
+ ├── data_entry_forms/
341
+ │ ├── forms/
342
+ │ │ └── forms.py # WTForms-based form classes
343
+ │ └── validators/
344
+ │ └── form_field_validations.py # Comprehensive validation functions
345
+ ├── databases/
346
+ │ ├── database_handler.py # Core database operations and utilities
347
+ │ └── upload_data.py # File-to-database upload utilities
348
+ ├── models/
349
+ │ ├── base.py # Base model with HL7 compatibility
350
+ │ └── user.py # User and medical data models
351
+ ├── security/
352
+ │ ├── automated_passwords.py # Secure password generation
353
+ │ ├── config.py # Security configuration management
354
+ │ └── exceptions.py # Custom exception hierarchy
355
+ ├── services/
356
+ │ └── user_service.py # User management service layer
357
+ └── web_automation/
358
+ └── webdriver_Firefox-Chrome_setup_test.py # WebDriver testing utilities
359
+ ```
360
+
361
+ ## Key Functions
362
+
363
+ ### Database Operations
364
+
365
+ - `init_db()` - Initialize database with healthcare models
366
+ - `upload_file_data()` - Load CSV/Excel/ODS files into database tables
367
+ - `filter_data()` - Advanced data filtering with temporal ranges
368
+ - `create_user()`, `update_user()`, `delete_user()` - User CRUD operations
369
+
370
+ ### Medical Data Models
371
+
372
+ - `User` - Comprehensive user model with medical relationships
373
+ - `VitalSigns` - Vital signs tracking and monitoring
374
+ - `LabResults` - Laboratory test results management
375
+ - `MedicationsHistory` - Medication and prescription tracking
376
+
377
+ ### Form Validation
378
+
379
+ - `RegistrationForm` - User registration with validation
380
+ - `validate_field()` - Individual field validation
381
+ - `validate_date_range()` - Medical date range validation
382
+ - `verify_spanish_dni()` - Spanish ID validation
383
+
384
+ ### Security Functions
385
+
386
+ - `generate_automated_password()` - Secure password generation
387
+ - Custom exception classes for precise error handling
388
+ - Environment-based security configuration
389
+
390
+ ### Web Automation
391
+
392
+ - `test_firefox_webdriver()` - WebDriver setup testing
393
+ - `configure_firefox_options()` - Headless browser configuration
394
+
395
+ ## Healthcare Standards Compliance
396
+
397
+ DataOpsHub is designed with healthcare standards in mind:
398
+
399
+ - **HL7 v2 Compatibility**: All models include HL7 v2 fields for healthcare data interchange
400
+ - **Medical Data Integrity**: Comprehensive validation for medical identifiers and data
401
+ - **Audit Trails**: Automatic timestamp tracking for all medical records
402
+ - **Security**: Healthcare-grade security configuration and password policies
403
+ - **Data Relationships**: Proper medical data relationships between users and their health records
404
+
405
+ ## Contributing
406
+
407
+ Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
408
+
409
+ ### Development Guidelines
410
+
411
+ - Follow healthcare data security best practices
412
+ - Ensure all medical data models maintain HL7 compatibility
413
+ - Add comprehensive validation for any new form fields
414
+ - Include proper error handling and custom exceptions
415
+ - Write tests for database operations and data validation
416
+
417
+ ## License
418
+
419
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
420
+
421
+ ## Acknowledgments
422
+
423
+ - SQLAlchemy team for robust database operations
424
+ - WTForms community for form validation framework
425
+ - Healthcare standards organisations for HL7 specifications
426
+ - Open-source contributors to the healthcare data ecosystem
427
+
428
+ ## Contact
429
+
430
+ For any questions or suggestions, please open an issue on GitHub or contact the maintainers.
431
+
432
+ ## Version
433
+
434
+ Current version: 6.6.12
435
+
436
+ For detailed changelog, see [CHANGELOG.md](CHANGELOG.md).
437
+
438
+ ## Security Notice
439
+
440
+ This package handles sensitive healthcare data. Please ensure:
441
+
442
+ - Use secure database connections in production
443
+ - Implement proper access controls and authentication
444
+ - Follow HIPAA compliance guidelines where applicable
445
+ - Regularly update security configurations and dependencies
446
+ - Use environment variables for sensitive configuration data
@@ -0,0 +1,11 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ setup.py
6
+ DataOpsHub/__init__.py
7
+ DataOpsHub.egg-info/PKG-INFO
8
+ DataOpsHub.egg-info/SOURCES.txt
9
+ DataOpsHub.egg-info/dependency_links.txt
10
+ DataOpsHub.egg-info/requires.txt
11
+ DataOpsHub.egg-info/top_level.txt
@@ -1,8 +1,9 @@
1
1
  sqlalchemy>=2.0.0
2
- pandas>=1.3.0
3
- filewise>=3.7.0
4
- pygenutils>=15.10.0
5
- paramlib>=3.4.0
2
+ numpy>=2.2.3
3
+ pandas>=2.2.3
4
+ filewise>=3.14.0
5
+ pygenutils>=17.1.0
6
+ paramlib>=3.5.0
6
7
  email_validator>=2.0.0
7
8
  selenium>=4.0.0
8
9
 
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 DataOpsHub
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,7 @@
1
+ exclude recipe/
2
+ exclude recipe/*
3
+ global-exclude *.pyc
4
+ global-exclude *.pyo
5
+ global-exclude __pycache__
6
+ global-exclude .git*
7
+ global-exclude .DS_Store