acoupi 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. acoupi-0.1.0/.bumpversion.cfg +8 -0
  2. acoupi-0.1.0/.github/workflows/docs.yml +46 -0
  3. acoupi-0.1.0/.github/workflows/lint.yml +35 -0
  4. acoupi-0.1.0/.github/workflows/publish.yml +99 -0
  5. acoupi-0.1.0/.github/workflows/tests.yml +37 -0
  6. acoupi-0.1.0/.gitignore +162 -0
  7. acoupi-0.1.0/.python-version +1 -0
  8. acoupi-0.1.0/CODE_OF_CONDUCT.md +61 -0
  9. acoupi-0.1.0/LICENSE +674 -0
  10. acoupi-0.1.0/Makefile +60 -0
  11. acoupi-0.1.0/PKG-INFO +203 -0
  12. acoupi-0.1.0/README.md +178 -0
  13. acoupi-0.1.0/docs/authors.md +1 -0
  14. acoupi-0.1.0/docs/code_of_conduct.md +1 -0
  15. acoupi-0.1.0/docs/contributing.md +6 -0
  16. acoupi-0.1.0/docs/css/style.css +33 -0
  17. acoupi-0.1.0/docs/explanation/architecture.md +93 -0
  18. acoupi-0.1.0/docs/explanation/components.md +103 -0
  19. acoupi-0.1.0/docs/explanation/data_schema.md +80 -0
  20. acoupi-0.1.0/docs/explanation/index.md +51 -0
  21. acoupi-0.1.0/docs/explanation/programs.md +124 -0
  22. acoupi-0.1.0/docs/explanation/system.md +178 -0
  23. acoupi-0.1.0/docs/explanation/tasks.md +132 -0
  24. acoupi-0.1.0/docs/faq.md +91 -0
  25. acoupi-0.1.0/docs/howtoguide/components.md +100 -0
  26. acoupi-0.1.0/docs/howtoguide/data_schema.md +56 -0
  27. acoupi-0.1.0/docs/howtoguide/index.md +57 -0
  28. acoupi-0.1.0/docs/howtoguide/programs.md +512 -0
  29. acoupi-0.1.0/docs/img/acoupi_celery_app.png +0 -0
  30. acoupi-0.1.0/docs/img/acoupi_configuration.mp4 +0 -0
  31. acoupi-0.1.0/docs/img/acoupi_deployment.mp4 +0 -0
  32. acoupi-0.1.0/docs/img/acoupi_flowchart_img.png +0 -0
  33. acoupi-0.1.0/docs/img/acoupi_four_layers_architecture.png +0 -0
  34. acoupi-0.1.0/docs/img/acoupi_installation_steps.png +0 -0
  35. acoupi-0.1.0/docs/img/acoupi_installation_steps_old.png +0 -0
  36. acoupi-0.1.0/docs/img/acoupi_program_5tasks.png +0 -0
  37. acoupi-0.1.0/docs/img/acoupi_program_application.png +0 -0
  38. acoupi-0.1.0/docs/img/acoupi_program_simplified.png +0 -0
  39. acoupi-0.1.0/docs/img/acoupi_software_overview.jpeg +0 -0
  40. acoupi-0.1.0/docs/img/task_01_audiorecording.png +0 -0
  41. acoupi-0.1.0/docs/img/task_02_model.png +0 -0
  42. acoupi-0.1.0/docs/img/task_0304_message_management.png +0 -0
  43. acoupi-0.1.0/docs/index.md +163 -0
  44. acoupi-0.1.0/docs/license.md +1 -0
  45. acoupi-0.1.0/docs/reference/cli.md +9 -0
  46. acoupi-0.1.0/docs/reference/components.md +38 -0
  47. acoupi-0.1.0/docs/reference/data.md +3 -0
  48. acoupi-0.1.0/docs/reference/index.md +60 -0
  49. acoupi-0.1.0/docs/reference/programs.md +9 -0
  50. acoupi-0.1.0/docs/reference/system.md +27 -0
  51. acoupi-0.1.0/docs/reference/tasks.md +3 -0
  52. acoupi-0.1.0/docs/terms.md +17 -0
  53. acoupi-0.1.0/docs/tutorials/configuration.md +190 -0
  54. acoupi-0.1.0/docs/tutorials/deployment.md +89 -0
  55. acoupi-0.1.0/docs/tutorials/index.md +52 -0
  56. acoupi-0.1.0/docs/tutorials/installation.md +56 -0
  57. acoupi-0.1.0/mkdocs.yml +130 -0
  58. acoupi-0.1.0/pyproject.toml +88 -0
  59. acoupi-0.1.0/scripts/setup.sh +18 -0
  60. acoupi-0.1.0/src/acoupi/__init__.py +0 -0
  61. acoupi-0.1.0/src/acoupi/__main__.py +6 -0
  62. acoupi-0.1.0/src/acoupi/cli/__init__.py +15 -0
  63. acoupi-0.1.0/src/acoupi/cli/base.py +108 -0
  64. acoupi-0.1.0/src/acoupi/cli/config.py +191 -0
  65. acoupi-0.1.0/src/acoupi/cli/deployment.py +228 -0
  66. acoupi-0.1.0/src/acoupi/components/__init__.py +65 -0
  67. acoupi-0.1.0/src/acoupi/components/audio_recorder.py +368 -0
  68. acoupi-0.1.0/src/acoupi/components/message_factories.py +143 -0
  69. acoupi-0.1.0/src/acoupi/components/message_stores/__init__.py +0 -0
  70. acoupi-0.1.0/src/acoupi/components/message_stores/sqlite/__init__.py +7 -0
  71. acoupi-0.1.0/src/acoupi/components/message_stores/sqlite/database.py +53 -0
  72. acoupi-0.1.0/src/acoupi/components/message_stores/sqlite/message_store.py +102 -0
  73. acoupi-0.1.0/src/acoupi/components/message_stores/sqlite/types.py +49 -0
  74. acoupi-0.1.0/src/acoupi/components/messengers.py +437 -0
  75. acoupi-0.1.0/src/acoupi/components/model_template.py +43 -0
  76. acoupi-0.1.0/src/acoupi/components/models/__init__.py +0 -0
  77. acoupi-0.1.0/src/acoupi/components/output_cleaners.py +128 -0
  78. acoupi-0.1.0/src/acoupi/components/processing_filters.py +31 -0
  79. acoupi-0.1.0/src/acoupi/components/recording_conditions.py +192 -0
  80. acoupi-0.1.0/src/acoupi/components/recording_schedulers.py +61 -0
  81. acoupi-0.1.0/src/acoupi/components/saving_filters.py +428 -0
  82. acoupi-0.1.0/src/acoupi/components/saving_managers.py +317 -0
  83. acoupi-0.1.0/src/acoupi/components/stores/__init__.py +18 -0
  84. acoupi-0.1.0/src/acoupi/components/stores/sqlite/__init__.py +63 -0
  85. acoupi-0.1.0/src/acoupi/components/stores/sqlite/database.py +136 -0
  86. acoupi-0.1.0/src/acoupi/components/stores/sqlite/store.py +623 -0
  87. acoupi-0.1.0/src/acoupi/components/stores/sqlite/types.py +138 -0
  88. acoupi-0.1.0/src/acoupi/components/summariser.py +289 -0
  89. acoupi-0.1.0/src/acoupi/components/types.py +528 -0
  90. acoupi-0.1.0/src/acoupi/data.py +340 -0
  91. acoupi-0.1.0/src/acoupi/devices/__init__.py +44 -0
  92. acoupi-0.1.0/src/acoupi/devices/audio.py +156 -0
  93. acoupi-0.1.0/src/acoupi/devices/rpi.py +49 -0
  94. acoupi-0.1.0/src/acoupi/programs/__init__.py +19 -0
  95. acoupi-0.1.0/src/acoupi/programs/connected.py +163 -0
  96. acoupi-0.1.0/src/acoupi/programs/core/__init__.py +17 -0
  97. acoupi-0.1.0/src/acoupi/programs/core/base.py +254 -0
  98. acoupi-0.1.0/src/acoupi/programs/core/workers.py +85 -0
  99. acoupi-0.1.0/src/acoupi/programs/default.py +105 -0
  100. acoupi-0.1.0/src/acoupi/programs/templates/__init__.py +57 -0
  101. acoupi-0.1.0/src/acoupi/programs/templates/basic.py +496 -0
  102. acoupi-0.1.0/src/acoupi/programs/templates/detection.py +355 -0
  103. acoupi-0.1.0/src/acoupi/programs/templates/messaging.py +268 -0
  104. acoupi-0.1.0/src/acoupi/programs/test.py +36 -0
  105. acoupi-0.1.0/src/acoupi/py.typed +0 -0
  106. acoupi-0.1.0/src/acoupi/system/__init__.py +80 -0
  107. acoupi-0.1.0/src/acoupi/system/apps.py +18 -0
  108. acoupi-0.1.0/src/acoupi/system/celery.py +109 -0
  109. acoupi-0.1.0/src/acoupi/system/config/__init__.py +17 -0
  110. acoupi-0.1.0/src/acoupi/system/config/operations.py +463 -0
  111. acoupi-0.1.0/src/acoupi/system/config/parsers.py +545 -0
  112. acoupi-0.1.0/src/acoupi/system/constants.py +48 -0
  113. acoupi-0.1.0/src/acoupi/system/deployments.py +163 -0
  114. acoupi-0.1.0/src/acoupi/system/exceptions.py +103 -0
  115. acoupi-0.1.0/src/acoupi/system/files.py +135 -0
  116. acoupi-0.1.0/src/acoupi/system/lifecycle.py +87 -0
  117. acoupi-0.1.0/src/acoupi/system/programs.py +177 -0
  118. acoupi-0.1.0/src/acoupi/system/scripts.py +171 -0
  119. acoupi-0.1.0/src/acoupi/system/services.py +214 -0
  120. acoupi-0.1.0/src/acoupi/system/state.py +91 -0
  121. acoupi-0.1.0/src/acoupi/system/templates.py +19 -0
  122. acoupi-0.1.0/src/acoupi/tasks/__init__.py +34 -0
  123. acoupi-0.1.0/src/acoupi/tasks/detection.py +121 -0
  124. acoupi-0.1.0/src/acoupi/tasks/heartbeat.py +62 -0
  125. acoupi-0.1.0/src/acoupi/tasks/management.py +156 -0
  126. acoupi-0.1.0/src/acoupi/tasks/messaging.py +81 -0
  127. acoupi-0.1.0/src/acoupi/tasks/recording.py +102 -0
  128. acoupi-0.1.0/src/acoupi/tasks/summary.py +76 -0
  129. acoupi-0.1.0/src/acoupi/templates/acoupi.service.jinja2 +16 -0
  130. acoupi-0.1.0/src/acoupi/templates/acoupi_beat.service.jinja2 +14 -0
  131. acoupi-0.1.0/src/acoupi/templates/acoupi_beat.sh.jinja2 +11 -0
  132. acoupi-0.1.0/src/acoupi/templates/acoupi_restart.sh.jinja2 +21 -0
  133. acoupi-0.1.0/src/acoupi/templates/acoupi_start.sh.jinja2 +22 -0
  134. acoupi-0.1.0/src/acoupi/templates/acoupi_stop.sh.jinja2 +13 -0
  135. acoupi-0.1.0/src/acoupi/templates/app.py.jinja2 +29 -0
  136. acoupi-0.1.0/tests/__init__.py +0 -0
  137. acoupi-0.1.0/tests/conftest.py +150 -0
  138. acoupi-0.1.0/tests/data/test_ultrasonic.wav +0 -0
  139. acoupi-0.1.0/tests/test_cli/__init__.py +0 -0
  140. acoupi-0.1.0/tests/test_cli/conftest.py +9 -0
  141. acoupi-0.1.0/tests/test_cli/test_check.py +59 -0
  142. acoupi-0.1.0/tests/test_cli/test_config.py +96 -0
  143. acoupi-0.1.0/tests/test_cli/test_setup.py +56 -0
  144. acoupi-0.1.0/tests/test_components/__init__.py +0 -0
  145. acoupi-0.1.0/tests/test_components/test_audio_recording.py +180 -0
  146. acoupi-0.1.0/tests/test_components/test_file_managers.py +300 -0
  147. acoupi-0.1.0/tests/test_components/test_message_builders.py +132 -0
  148. acoupi-0.1.0/tests/test_components/test_message_factories.py +136 -0
  149. acoupi-0.1.0/tests/test_components/test_messengers.py +496 -0
  150. acoupi-0.1.0/tests/test_components/test_model.py +21 -0
  151. acoupi-0.1.0/tests/test_components/test_output_cleaners.py +190 -0
  152. acoupi-0.1.0/tests/test_components/test_recording_conditions.py +78 -0
  153. acoupi-0.1.0/tests/test_components/test_recording_filters.py +160 -0
  154. acoupi-0.1.0/tests/test_components/test_saving_filters.py +501 -0
  155. acoupi-0.1.0/tests/test_components/test_saving_managers.py +308 -0
  156. acoupi-0.1.0/tests/test_components/test_sqlite_message_store.py +138 -0
  157. acoupi-0.1.0/tests/test_components/test_sqlite_store.py +414 -0
  158. acoupi-0.1.0/tests/test_components/test_summariser.py +154 -0
  159. acoupi-0.1.0/tests/test_devices/__init__.py +0 -0
  160. acoupi-0.1.0/tests/test_devices/test_audio.py +116 -0
  161. acoupi-0.1.0/tests/test_devices/test_rpi.py +45 -0
  162. acoupi-0.1.0/tests/test_programs/__init__.py +0 -0
  163. acoupi-0.1.0/tests/test_programs/conftest.py +64 -0
  164. acoupi-0.1.0/tests/test_programs/test_basic_template.py +93 -0
  165. acoupi-0.1.0/tests/test_programs/test_callbacks.py +130 -0
  166. acoupi-0.1.0/tests/test_programs/test_detection_template.py +100 -0
  167. acoupi-0.1.0/tests/test_programs/test_messaging_template:.py +118 -0
  168. acoupi-0.1.0/tests/test_system/__init__.py +0 -0
  169. acoupi-0.1.0/tests/test_system/test_config.py +336 -0
  170. acoupi-0.1.0/tests/test_system/test_deployments.py +104 -0
  171. acoupi-0.1.0/tests/test_system/test_lifecycle.py +49 -0
  172. acoupi-0.1.0/tests/test_system/test_parsing.py +498 -0
  173. acoupi-0.1.0/tests/test_system/test_programs.py +96 -0
  174. acoupi-0.1.0/tests/test_system/test_workers.py +162 -0
  175. acoupi-0.1.0/tests/test_tasks/__init__.py +0 -0
  176. acoupi-0.1.0/tests/test_tasks/test_heartbeat_task.py +46 -0
  177. acoupi-0.1.0/tests/test_tasks/test_management_task.py +208 -0
  178. acoupi-0.1.0/uv.lock +1923 -0
@@ -0,0 +1,8 @@
1
+ [bumpversion]
2
+ current_version = 0.1.0
3
+ commit = True
4
+ tag = True
5
+
6
+ [bumpversion:file:pyproject.toml]
7
+ search = version = "{current_version}"
8
+ replace = version = "{new_version}"
@@ -0,0 +1,46 @@
1
+ name: Make docs
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ jobs:
12
+ deploy-docs:
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ fail-fast: false
16
+ matrix:
17
+ python-version: ["3.8"]
18
+ steps:
19
+ - uses: actions/checkout@v3
20
+ - name: Setup Libraries
21
+ run: bash scripts/setup.sh
22
+ - name: Set up uv
23
+ run: curl -LsSf https://astral.sh/uv/install.sh | sh
24
+ - name: Set up Python ${{ matrix.python-version }}
25
+ run: uv python install ${{ matrix.python-version }}
26
+ - name: Restore uv cache
27
+ uses: actions/cache@v4
28
+ with:
29
+ path: /tmp/.uv-cache
30
+ key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
31
+ restore-keys: |
32
+ uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
33
+ uv-${{ runner.os }}
34
+ - name: Install the project
35
+ run: uv sync --all-extras --dev
36
+ - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
37
+ - uses: actions/cache@v3
38
+ with:
39
+ key: mkdocs-material-${{ env.cache_id }}
40
+ path: .cache
41
+ restore-keys: |
42
+ mkdocs-material-
43
+ - name: Deploy docs to ghpages
44
+ run: uv run mkdocs gh-deploy --force
45
+ - name: Minimize uv cache
46
+ run: uv cache prune --ci
@@ -0,0 +1,35 @@
1
+ name: Linting
2
+ on:
3
+ push:
4
+ branches: ["main"]
5
+ pull_request:
6
+ branches: ["main"]
7
+ jobs:
8
+ lint:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ python-version: ["3.11"]
14
+ steps:
15
+ - uses: actions/checkout@v3
16
+ - name: Setup Libraries
17
+ run: bash scripts/setup.sh
18
+ - name: Set up uv
19
+ run: curl -LsSf https://astral.sh/uv/install.sh | sh
20
+ - name: Set up Python ${{ matrix.python-version }}
21
+ run: uv python install ${{ matrix.python-version }}
22
+ - name: Restore uv cache
23
+ uses: actions/cache@v4
24
+ with:
25
+ path: /tmp/.uv-cache
26
+ key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
27
+ restore-keys: |
28
+ uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
29
+ uv-${{ runner.os }}
30
+ - name: Install the project
31
+ run: uv sync --all-extras --dev
32
+ - name: Run all linters
33
+ run: uv run make lint
34
+ - name: Minimize uv cache
35
+ run: uv cache prune --ci
@@ -0,0 +1,99 @@
1
+ name: Publish PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ release:
6
+ types: [published]
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout source code
13
+ uses: actions/checkout@v4
14
+
15
+ - name: Install Hatch
16
+ uses: pypa/hatch@install
17
+
18
+ - name: Build a binary wheel and source tarball
19
+ run: hatch build
20
+
21
+ - name: Store the distribution packages
22
+ uses: actions/upload-artifact@v4
23
+ with:
24
+ name: python-package-distributions
25
+ path: dist/
26
+
27
+ publish-to-pypi:
28
+ name: Publish to PyPI
29
+ needs: [build]
30
+ runs-on: ubuntu-latest
31
+
32
+ if: github.event_name == 'release'
33
+
34
+ environment:
35
+ name: pypi
36
+ url: https://pypi.org/p/acoupi
37
+
38
+ permissions:
39
+ id-token: write
40
+
41
+ steps:
42
+ - name: Download all the dists
43
+ uses: actions/download-artifact@v4
44
+ with:
45
+ name: python-package-distributions
46
+ path: dist/
47
+
48
+ - name: Publish distribution 📦 to PyPI
49
+ uses: pypa/gh-action-pypi-publish@release/v1
50
+
51
+ github-release:
52
+ name: Upload to GitHub release
53
+ needs: [publish-to-pypi]
54
+ runs-on: ubuntu-latest
55
+
56
+ if: github.event_name == 'release'
57
+
58
+ permissions:
59
+ contents: write
60
+ id-token: write
61
+
62
+ steps:
63
+ - name: Download the dists
64
+ uses: actions/download-artifact@v4
65
+ with:
66
+ name: python-package-distributions
67
+ path: dist/
68
+
69
+ - name: Upload artifact to GitHub Release
70
+ env:
71
+ GITHUB_TOKEN: ${{ github.token }}
72
+ run: |
73
+ gh release upload '${{ github.ref_name }}' dist/** --repo '${{github.repository }}'
74
+
75
+ publish-to-testpypi:
76
+ name: Publish to TestPyPI
77
+ needs: [build]
78
+ runs-on: ubuntu-latest
79
+
80
+ if: github.event_name == 'workflow_dispatch'
81
+
82
+ environment:
83
+ name: testpypi
84
+ url: https://test.pypi.org/p/acoupi
85
+
86
+ permissions:
87
+ id-token: write
88
+
89
+ steps:
90
+ - name: Download all the dists
91
+ uses: actions/download-artifact@v4
92
+ with:
93
+ name: python-package-distributions
94
+ path: dist/
95
+
96
+ - name: Publish distribution 📦 to PyPI
97
+ uses: pypa/gh-action-pypi-publish@release/v1
98
+ with:
99
+ repository-url: https://test.pypi.org/legacy/
@@ -0,0 +1,37 @@
1
+ name: Test
2
+ on:
3
+ push:
4
+ branches: ["main"]
5
+ pull_request:
6
+ branches: ["main"]
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+ env:
11
+ UV_CACHE_DIR: /tmp/.uv-cache
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ python-version: ["3.8", "3.9", "3.10", "3.11"]
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - name: Setup Libraries
19
+ run: bash scripts/setup.sh
20
+ - name: Set up uv
21
+ run: curl -LsSf https://astral.sh/uv/install.sh | sh
22
+ - name: Set up Python ${{ matrix.python-version }}
23
+ run: uv python install ${{ matrix.python-version }}
24
+ - name: Restore uv cache
25
+ uses: actions/cache@v4
26
+ with:
27
+ path: /tmp/.uv-cache
28
+ key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
29
+ restore-keys: |
30
+ uv-${{ runner.os }}-${{ hashFiles('uv.lock') }}
31
+ uv-${{ runner.os }}
32
+ - name: Install the project
33
+ run: uv sync --all-extras --dev
34
+ - name: Run tests
35
+ run: uv run make test
36
+ - name: Minimize uv cache
37
+ run: uv cache prune --ci
@@ -0,0 +1,162 @@
1
+ # Byte-compiled / optimised / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/#use-with-ide
110
+ .pdm.toml
111
+ .pdm-python
112
+
113
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
114
+ __pypackages__/
115
+
116
+ # Celery stuff
117
+ celerybeat-schedule
118
+ celerybeat.pid
119
+
120
+ # SageMath parsed files
121
+ *.sage.py
122
+
123
+ # Environments
124
+ .env
125
+ .venv
126
+ env/
127
+ venv/
128
+ ENV/
129
+ env.bak/
130
+ venv.bak/
131
+
132
+ # Spyder project settings
133
+ .spyderproject
134
+ .spyproject
135
+
136
+ # Rope project settings
137
+ .ropeproject
138
+
139
+ # mkdocs documentation
140
+ /site
141
+
142
+ # mypy
143
+ .mypy_cache/
144
+ .dmypy.json
145
+ dmypy.json
146
+
147
+ # Pyre type checker
148
+ .pyre/
149
+
150
+ # pytype static type analyzer
151
+ .pytype/
152
+
153
+ # Cython debug symbols
154
+ cython_debug/
155
+
156
+ # PyCharm
157
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
158
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
159
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
160
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
161
+ #.idea/
162
+
@@ -0,0 +1 @@
1
+ 3.9.18
@@ -0,0 +1,61 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ education, socio-economic status, nationality, personal appearance, race,
10
+ religion, or sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Attribution
56
+
57
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
58
+ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
59
+
60
+ [homepage]: https://www.contributor-covenant.org
61
+