clockify-unofficial-sdk 1.0.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 (108) hide show
  1. clockify_unofficial_sdk-1.0.0/.editorconfig +18 -0
  2. clockify_unofficial_sdk-1.0.0/.github/dependabot.yml +14 -0
  3. clockify_unofficial_sdk-1.0.0/.github/workflows/ci.yml +20 -0
  4. clockify_unofficial_sdk-1.0.0/.github/workflows/publish.yml +35 -0
  5. clockify_unofficial_sdk-1.0.0/.github/workflows/python.yml +19 -0
  6. clockify_unofficial_sdk-1.0.0/.gitignore +476 -0
  7. clockify_unofficial_sdk-1.0.0/.markdownlint-cli2.jsonc +9 -0
  8. clockify_unofficial_sdk-1.0.0/.markdownlint.yaml +28 -0
  9. clockify_unofficial_sdk-1.0.0/.pre-commit-config.yaml +79 -0
  10. clockify_unofficial_sdk-1.0.0/AGENTS.md +82 -0
  11. clockify_unofficial_sdk-1.0.0/CONTRIBUTING.md +82 -0
  12. clockify_unofficial_sdk-1.0.0/LICENSE +21 -0
  13. clockify_unofficial_sdk-1.0.0/Makefile +108 -0
  14. clockify_unofficial_sdk-1.0.0/PKG-INFO +313 -0
  15. clockify_unofficial_sdk-1.0.0/README.md +292 -0
  16. clockify_unofficial_sdk-1.0.0/checkmake.ini +14 -0
  17. clockify_unofficial_sdk-1.0.0/cspell.config.yaml +26 -0
  18. clockify_unofficial_sdk-1.0.0/dictionary.txt +56 -0
  19. clockify_unofficial_sdk-1.0.0/docs/conventions/commits-check.md +38 -0
  20. clockify_unofficial_sdk-1.0.0/docs/conventions/index.md +8 -0
  21. clockify_unofficial_sdk-1.0.0/docs/index.md +33 -0
  22. clockify_unofficial_sdk-1.0.0/docs/log.md +79 -0
  23. clockify_unofficial_sdk-1.0.0/docs/python/index.md +8 -0
  24. clockify_unofficial_sdk-1.0.0/docs/python/interpreter-source.md +21 -0
  25. clockify_unofficial_sdk-1.0.0/docs/python/pyproject-defaults.md +28 -0
  26. clockify_unofficial_sdk-1.0.0/docs/release/index.md +6 -0
  27. clockify_unofficial_sdk-1.0.0/docs/release/pypi-trusted-publishing.md +41 -0
  28. clockify_unofficial_sdk-1.0.0/docs/sdk/adding-an-endpoint.md +28 -0
  29. clockify_unofficial_sdk-1.0.0/docs/sdk/coverage.md +102 -0
  30. clockify_unofficial_sdk-1.0.0/docs/sdk/endpoint-comments.md +19 -0
  31. clockify_unofficial_sdk-1.0.0/docs/sdk/index.md +24 -0
  32. clockify_unofficial_sdk-1.0.0/docs/sdk/layering.md +35 -0
  33. clockify_unofficial_sdk-1.0.0/docs/sdk/pagination.md +32 -0
  34. clockify_unofficial_sdk-1.0.0/docs/sdk/release-checklist.md +24 -0
  35. clockify_unofficial_sdk-1.0.0/docs/sdk/request-lifecycle.md +42 -0
  36. clockify_unofficial_sdk-1.0.0/docs/toolchain/index.md +9 -0
  37. clockify_unofficial_sdk-1.0.0/docs/toolchain/layering-rule.md +27 -0
  38. clockify_unofficial_sdk-1.0.0/docs/toolchain/rejected-install-backends.md +20 -0
  39. clockify_unofficial_sdk-1.0.0/mise.toml +14 -0
  40. clockify_unofficial_sdk-1.0.0/mk/.gitkeep +0 -0
  41. clockify_unofficial_sdk-1.0.0/mk/python.mk +56 -0
  42. clockify_unofficial_sdk-1.0.0/package.json +8 -0
  43. clockify_unofficial_sdk-1.0.0/pnpm-lock.yaml +1480 -0
  44. clockify_unofficial_sdk-1.0.0/pnpm-workspace.yaml +8 -0
  45. clockify_unofficial_sdk-1.0.0/pyproject.toml +105 -0
  46. clockify_unofficial_sdk-1.0.0/src/clockify/__init__.py +145 -0
  47. clockify_unofficial_sdk-1.0.0/src/clockify/_auth.py +27 -0
  48. clockify_unofficial_sdk-1.0.0/src/clockify/_pagination.py +25 -0
  49. clockify_unofficial_sdk-1.0.0/src/clockify/_retry_transport.py +61 -0
  50. clockify_unofficial_sdk-1.0.0/src/clockify/_time.py +119 -0
  51. clockify_unofficial_sdk-1.0.0/src/clockify/_transport.py +93 -0
  52. clockify_unofficial_sdk-1.0.0/src/clockify/_version.py +1 -0
  53. clockify_unofficial_sdk-1.0.0/src/clockify/client.py +59 -0
  54. clockify_unofficial_sdk-1.0.0/src/clockify/config.py +90 -0
  55. clockify_unofficial_sdk-1.0.0/src/clockify/errors.py +178 -0
  56. clockify_unofficial_sdk-1.0.0/src/clockify/ids.py +13 -0
  57. clockify_unofficial_sdk-1.0.0/src/clockify/models/__init__.py +89 -0
  58. clockify_unofficial_sdk-1.0.0/src/clockify/models/base.py +14 -0
  59. clockify_unofficial_sdk-1.0.0/src/clockify/models/client.py +34 -0
  60. clockify_unofficial_sdk-1.0.0/src/clockify/models/custom_field.py +84 -0
  61. clockify_unofficial_sdk-1.0.0/src/clockify/models/project.py +60 -0
  62. clockify_unofficial_sdk-1.0.0/src/clockify/models/tag.py +21 -0
  63. clockify_unofficial_sdk-1.0.0/src/clockify/models/task.py +46 -0
  64. clockify_unofficial_sdk-1.0.0/src/clockify/models/time_entry.py +126 -0
  65. clockify_unofficial_sdk-1.0.0/src/clockify/models/user.py +30 -0
  66. clockify_unofficial_sdk-1.0.0/src/clockify/models/user_group.py +27 -0
  67. clockify_unofficial_sdk-1.0.0/src/clockify/models/workspace.py +76 -0
  68. clockify_unofficial_sdk-1.0.0/src/clockify/py.typed +0 -0
  69. clockify_unofficial_sdk-1.0.0/src/clockify/resources/__init__.py +1 -0
  70. clockify_unofficial_sdk-1.0.0/src/clockify/resources/base.py +71 -0
  71. clockify_unofficial_sdk-1.0.0/src/clockify/resources/clients.py +11 -0
  72. clockify_unofficial_sdk-1.0.0/src/clockify/resources/custom_fields.py +20 -0
  73. clockify_unofficial_sdk-1.0.0/src/clockify/resources/projects.py +11 -0
  74. clockify_unofficial_sdk-1.0.0/src/clockify/resources/tags.py +11 -0
  75. clockify_unofficial_sdk-1.0.0/src/clockify/resources/tasks.py +75 -0
  76. clockify_unofficial_sdk-1.0.0/src/clockify/resources/time_entries.py +108 -0
  77. clockify_unofficial_sdk-1.0.0/src/clockify/resources/user.py +19 -0
  78. clockify_unofficial_sdk-1.0.0/src/clockify/resources/user_groups.py +20 -0
  79. clockify_unofficial_sdk-1.0.0/src/clockify/resources/users.py +40 -0
  80. clockify_unofficial_sdk-1.0.0/src/clockify/resources/workspaces.py +28 -0
  81. clockify_unofficial_sdk-1.0.0/src/clockify/retry.py +57 -0
  82. clockify_unofficial_sdk-1.0.0/src/clockify/workspace.py +29 -0
  83. clockify_unofficial_sdk-1.0.0/tests/__init__.py +0 -0
  84. clockify_unofficial_sdk-1.0.0/tests/conftest.py +1 -0
  85. clockify_unofficial_sdk-1.0.0/tests/live/__init__.py +0 -0
  86. clockify_unofficial_sdk-1.0.0/tests/live/test_smoke.py +45 -0
  87. clockify_unofficial_sdk-1.0.0/tests/unit/__init__.py +0 -0
  88. clockify_unofficial_sdk-1.0.0/tests/unit/test_clients_resource.py +112 -0
  89. clockify_unofficial_sdk-1.0.0/tests/unit/test_config.py +118 -0
  90. clockify_unofficial_sdk-1.0.0/tests/unit/test_custom_fields_resource.py +113 -0
  91. clockify_unofficial_sdk-1.0.0/tests/unit/test_errors.py +126 -0
  92. clockify_unofficial_sdk-1.0.0/tests/unit/test_models.py +140 -0
  93. clockify_unofficial_sdk-1.0.0/tests/unit/test_package.py +37 -0
  94. clockify_unofficial_sdk-1.0.0/tests/unit/test_pagination.py +84 -0
  95. clockify_unofficial_sdk-1.0.0/tests/unit/test_projects_resource.py +116 -0
  96. clockify_unofficial_sdk-1.0.0/tests/unit/test_retry.py +144 -0
  97. clockify_unofficial_sdk-1.0.0/tests/unit/test_retry_transport.py +127 -0
  98. clockify_unofficial_sdk-1.0.0/tests/unit/test_tags_resource.py +109 -0
  99. clockify_unofficial_sdk-1.0.0/tests/unit/test_tasks_resource.py +115 -0
  100. clockify_unofficial_sdk-1.0.0/tests/unit/test_time.py +145 -0
  101. clockify_unofficial_sdk-1.0.0/tests/unit/test_time_entries_resource.py +207 -0
  102. clockify_unofficial_sdk-1.0.0/tests/unit/test_transport.py +155 -0
  103. clockify_unofficial_sdk-1.0.0/tests/unit/test_user_groups_resource.py +108 -0
  104. clockify_unofficial_sdk-1.0.0/tests/unit/test_user_resource.py +60 -0
  105. clockify_unofficial_sdk-1.0.0/tests/unit/test_users_resource.py +65 -0
  106. clockify_unofficial_sdk-1.0.0/tests/unit/test_workspace_client.py +63 -0
  107. clockify_unofficial_sdk-1.0.0/tests/unit/test_workspaces_resource.py +64 -0
  108. clockify_unofficial_sdk-1.0.0/uv.lock +754 -0
@@ -0,0 +1,18 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ trim_trailing_whitespace = true
8
+ indent_style = space
9
+ indent_size = 2
10
+
11
+ [{Makefile,*.mk}]
12
+ indent_style = tab
13
+
14
+ [*.py]
15
+ indent_size = 4
16
+
17
+ [*.md]
18
+ trim_trailing_whitespace = false
@@ -0,0 +1,14 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ commit-message:
8
+ prefix: ci
9
+ - package-ecosystem: uv
10
+ directory: /
11
+ schedule:
12
+ interval: weekly
13
+ commit-message:
14
+ prefix: chore
@@ -0,0 +1,20 @@
1
+ name: ci
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ jobs:
7
+ quality:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v5
11
+ with:
12
+ fetch-depth: 0
13
+ ref: ${{ github.event.pull_request.head.sha || github.ref }}
14
+ - uses: jdx/mise-action@v4
15
+ - run: pnpm install --frozen-lockfile
16
+ - run: make makefile-lint
17
+ - run: make md-lint
18
+ - run: make spell
19
+ - run: make commits-check
20
+ - run: pre-commit run --all-files
@@ -0,0 +1,35 @@
1
+ name: publish
2
+ on:
3
+ release:
4
+ types: [published]
5
+ workflow_dispatch:
6
+ permissions:
7
+ contents: read
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v5
13
+ - uses: jdx/mise-action@v4
14
+ - name: Tag matches project.version
15
+ if: github.event_name == 'release'
16
+ run: |
17
+ version=$(python3 -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')
18
+ test "${GITHUB_REF_NAME#v}" = "$version" || { echo "tag $GITHUB_REF_NAME != project.version $version"; exit 1; }
19
+ - run: make build
20
+ - uses: actions/upload-artifact@v4
21
+ with:
22
+ name: dist
23
+ path: dist/
24
+ publish:
25
+ needs: build
26
+ runs-on: ubuntu-latest
27
+ environment: pypi
28
+ permissions:
29
+ id-token: write
30
+ steps:
31
+ - uses: actions/download-artifact@v4
32
+ with:
33
+ name: dist
34
+ path: dist/
35
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,19 @@
1
+ name: python
2
+ on:
3
+ push:
4
+ branches: [main]
5
+ pull_request:
6
+ branches: [main]
7
+ jobs:
8
+ quality:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v5
12
+ with:
13
+ fetch-depth: 0
14
+ ref: ${{ github.event.pull_request.head.sha || github.ref }}
15
+ - uses: jdx/mise-action@v4
16
+ - run: pnpm install --frozen-lockfile
17
+ - run: uv sync --locked
18
+ - run: make check
19
+ - run: make test
@@ -0,0 +1,476 @@
1
+ ### Project-specific stuff
2
+
3
+ # mise local overrides
4
+ mise.local.toml
5
+ .mise.local.toml
6
+
7
+ # Obsidian vault metadata (docs/ is opened directly as a vault)
8
+ .obsidian/
9
+
10
+ # Created by https://www.toptal.com/developers/gitignore/api/linux,macos,jetbrains+all,visualstudiocode,node,python
11
+ # Edit at https://www.toptal.com/developers/gitignore?templates=linux,macos,jetbrains+all,visualstudiocode,node,python
12
+
13
+ ### JetBrains+all ###
14
+ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
15
+ # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
16
+
17
+ # User-specific stuff
18
+ .idea/**/workspace.xml
19
+ .idea/**/tasks.xml
20
+ .idea/**/usage.statistics.xml
21
+ .idea/**/dictionaries
22
+ .idea/**/shelf
23
+
24
+ # AWS User-specific
25
+ .idea/**/aws.xml
26
+
27
+ # Generated files
28
+ .idea/**/contentModel.xml
29
+
30
+ # Sensitive or high-churn files
31
+ .idea/**/dataSources/
32
+ .idea/**/dataSources.ids
33
+ .idea/**/dataSources.local.xml
34
+ .idea/**/sqlDataSources.xml
35
+ .idea/**/dynamic.xml
36
+ .idea/**/uiDesigner.xml
37
+ .idea/**/dbnavigator.xml
38
+
39
+ # Gradle
40
+ .idea/**/gradle.xml
41
+ .idea/**/libraries
42
+
43
+ # Gradle and Maven with auto-import
44
+ # When using Gradle or Maven with auto-import, you should exclude module files,
45
+ # since they will be recreated, and may cause churn. Uncomment if using
46
+ # auto-import.
47
+ # .idea/artifacts
48
+ # .idea/compiler.xml
49
+ # .idea/jarRepositories.xml
50
+ # .idea/modules.xml
51
+ # .idea/*.iml
52
+ # .idea/modules
53
+ # *.iml
54
+ # *.ipr
55
+
56
+ # CMake
57
+ cmake-build-*/
58
+
59
+ # Mongo Explorer plugin
60
+ .idea/**/mongoSettings.xml
61
+
62
+ # File-based project format
63
+ *.iws
64
+
65
+ # IntelliJ
66
+ out/
67
+
68
+ # mpeltonen/sbt-idea plugin
69
+ .idea_modules/
70
+
71
+ # JIRA plugin
72
+ atlassian-ide-plugin.xml
73
+
74
+ # Cursive Clojure plugin
75
+ .idea/replstate.xml
76
+
77
+ # SonarLint plugin
78
+ .idea/sonarlint/
79
+
80
+ # Crashlytics plugin (for Android Studio and IntelliJ)
81
+ com_crashlytics_export_strings.xml
82
+ crashlytics.properties
83
+ crashlytics-build.properties
84
+ fabric.properties
85
+
86
+ # Editor-based Rest Client
87
+ .idea/httpRequests
88
+
89
+ # Android studio 3.1+ serialized cache file
90
+ .idea/caches/build_file_checksums.ser
91
+
92
+ ### JetBrains+all Patch ###
93
+ # Ignore everything but code style settings and run configurations
94
+ # that are supposed to be shared within teams.
95
+
96
+ .idea/*
97
+
98
+ !.idea/codeStyles
99
+ !.idea/runConfigurations
100
+
101
+ ### Linux ###
102
+ *~
103
+
104
+ # temporary files which can be created if a process still has a handle open of a deleted file
105
+ .fuse_hidden*
106
+
107
+ # KDE directory preferences
108
+ .directory
109
+
110
+ # Linux trash folder which might appear on any partition or disk
111
+ .Trash-*
112
+
113
+ # .nfs files are created when an open file is removed but is still being accessed
114
+ .nfs*
115
+
116
+ ### macOS ###
117
+ # General
118
+ .DS_Store
119
+ .AppleDouble
120
+ .LSOverride
121
+
122
+ # Icon must end with two \r
123
+ Icon
124
+
125
+ # Thumbnails
126
+ ._*
127
+
128
+ # Files that might appear in the root of a volume
129
+ .DocumentRevisions-V100
130
+ .fseventsd
131
+ .Spotlight-V100
132
+ .TemporaryItems
133
+ .Trashes
134
+ .VolumeIcon.icns
135
+ .com.apple.timemachine.donotpresent
136
+
137
+ # Directories potentially created on remote AFP share
138
+ .AppleDB
139
+ .AppleDesktop
140
+ Network Trash Folder
141
+ Temporary Items
142
+ .apdisk
143
+
144
+ ### macOS Patch ###
145
+ # iCloud generated files
146
+ *.icloud
147
+
148
+ ### Node ###
149
+ # Logs
150
+ logs
151
+ *.log
152
+ npm-debug.log*
153
+ yarn-debug.log*
154
+ yarn-error.log*
155
+ lerna-debug.log*
156
+ .pnpm-debug.log*
157
+
158
+ # Diagnostic reports (https://nodejs.org/api/report.html)
159
+ report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
160
+
161
+ # Runtime data
162
+ pids
163
+ *.pid
164
+ *.seed
165
+ *.pid.lock
166
+
167
+ # Directory for instrumented libs generated by jscoverage/JSCover
168
+ lib-cov
169
+
170
+ # Coverage directory used by tools like istanbul
171
+ coverage
172
+ *.lcov
173
+
174
+ # nyc test coverage
175
+ .nyc_output
176
+
177
+ # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
178
+ .grunt
179
+
180
+ # Bower dependency directory (https://bower.io/)
181
+ bower_components
182
+
183
+ # node-waf configuration
184
+ .lock-wscript
185
+
186
+ # Compiled binary addons (https://nodejs.org/api/addons.html)
187
+ build/Release
188
+
189
+ # Dependency directories
190
+ node_modules/
191
+ jspm_packages/
192
+
193
+ # Snowpack dependency directory (https://snowpack.dev/)
194
+ web_modules/
195
+
196
+ # TypeScript cache
197
+ *.tsbuildinfo
198
+
199
+ # Optional npm cache directory
200
+ .npm
201
+
202
+ # Optional eslint cache
203
+ .eslintcache
204
+
205
+ # Optional stylelint cache
206
+ .stylelintcache
207
+
208
+ # Microbundle cache
209
+ .rpt2_cache/
210
+ .rts2_cache_cjs/
211
+ .rts2_cache_es/
212
+ .rts2_cache_umd/
213
+
214
+ # Optional REPL history
215
+ .node_repl_history
216
+
217
+ # Output of 'npm pack'
218
+ *.tgz
219
+
220
+ # Yarn Integrity file
221
+ .yarn-integrity
222
+
223
+ # dotenv environment variable files
224
+ .env
225
+ .env.development.local
226
+ .env.test.local
227
+ .env.production.local
228
+ .env.local
229
+
230
+ # parcel-bundler cache (https://parceljs.org/)
231
+ .cache
232
+ .parcel-cache
233
+
234
+ # Next.js build output
235
+ .next
236
+ out
237
+
238
+ # Nuxt.js build / generate output
239
+ .nuxt
240
+ dist
241
+
242
+ # Gatsby files
243
+ .cache/
244
+ # Comment in the public line in if your project uses Gatsby and not Next.js
245
+ # https://nextjs.org/blog/next-9-1#public-directory-support
246
+ # public
247
+
248
+ # vuepress build output
249
+ .vuepress/dist
250
+
251
+ # vuepress v2.x temp and cache directory
252
+ .temp
253
+
254
+ # Docusaurus cache and generated files
255
+ .docusaurus
256
+
257
+ # Serverless directories
258
+ .serverless/
259
+
260
+ # FuseBox cache
261
+ .fusebox/
262
+
263
+ # DynamoDB Local files
264
+ .dynamodb/
265
+
266
+ # TernJS port file
267
+ .tern-port
268
+
269
+ # Stores VSCode versions used for testing VSCode extensions
270
+ .vscode-test
271
+
272
+ # yarn v2
273
+ .yarn/cache
274
+ .yarn/unplugged
275
+ .yarn/build-state.yml
276
+ .yarn/install-state.gz
277
+ .pnp.*
278
+
279
+ ### Node Patch ###
280
+ # Serverless Webpack directories
281
+ .webpack/
282
+
283
+ # Optional stylelint cache
284
+
285
+ # SvelteKit build / generate output
286
+ .svelte-kit
287
+
288
+ ### Python ###
289
+ # Byte-compiled / optimized / DLL files
290
+ __pycache__/
291
+ *.py[cod]
292
+ *$py.class
293
+
294
+ # C extensions
295
+ *.so
296
+
297
+ # Distribution / packaging
298
+ .Python
299
+ build/
300
+ develop-eggs/
301
+ dist/
302
+ downloads/
303
+ eggs/
304
+ .eggs/
305
+ lib/
306
+ lib64/
307
+ parts/
308
+ sdist/
309
+ var/
310
+ wheels/
311
+ share/python-wheels/
312
+ *.egg-info/
313
+ .installed.cfg
314
+ *.egg
315
+ MANIFEST
316
+
317
+ # PyInstaller
318
+ # Usually these files are written by a python script from a template
319
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
320
+ *.manifest
321
+ *.spec
322
+
323
+ # Installer logs
324
+ pip-log.txt
325
+ pip-delete-this-directory.txt
326
+
327
+ # Unit test / coverage reports
328
+ htmlcov/
329
+ .tox/
330
+ .nox/
331
+ .coverage
332
+ .coverage.*
333
+ nosetests.xml
334
+ coverage.xml
335
+ *.cover
336
+ *.py,cover
337
+ .hypothesis/
338
+ .pytest_cache/
339
+ cover/
340
+
341
+ # Translations
342
+ *.mo
343
+ *.pot
344
+
345
+ # Django stuff:
346
+ local_settings.py
347
+ db.sqlite3
348
+ db.sqlite3-journal
349
+
350
+ # Flask stuff:
351
+ instance/
352
+ .webassets-cache
353
+
354
+ # Scrapy stuff:
355
+ .scrapy
356
+
357
+ # Sphinx documentation
358
+ docs/_build/
359
+
360
+ # PyBuilder
361
+ .pybuilder/
362
+ target/
363
+
364
+ # Jupyter Notebook
365
+ .ipynb_checkpoints
366
+
367
+ # IPython
368
+ profile_default/
369
+ ipython_config.py
370
+
371
+ # pyenv
372
+ # For a library or package, you might want to ignore these files since the code is
373
+ # intended to run in multiple environments; otherwise, check them in:
374
+ # .python-version
375
+
376
+ # pipenv
377
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
378
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
379
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
380
+ # install all needed dependencies.
381
+ #Pipfile.lock
382
+
383
+ # poetry
384
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
385
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
386
+ # commonly ignored for libraries.
387
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
388
+ #poetry.lock
389
+
390
+ # pdm
391
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
392
+ #pdm.lock
393
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
394
+ # in version control.
395
+ # https://pdm.fming.dev/#use-with-ide
396
+ .pdm.toml
397
+
398
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
399
+ __pypackages__/
400
+
401
+ # Celery stuff
402
+ celerybeat-schedule
403
+ celerybeat.pid
404
+
405
+ # SageMath parsed files
406
+ *.sage.py
407
+
408
+ # Environments
409
+ .venv
410
+ env/
411
+ venv/
412
+ ENV/
413
+ env.bak/
414
+ venv.bak/
415
+
416
+ # Spyder project settings
417
+ .spyderproject
418
+ .spyproject
419
+
420
+ # Rope project settings
421
+ .ropeproject
422
+
423
+ # mkdocs documentation
424
+ /site
425
+
426
+ # mypy
427
+ .mypy_cache/
428
+ .dmypy.json
429
+ dmypy.json
430
+
431
+ # Pyre type checker
432
+ .pyre/
433
+
434
+ # pytype static type analyzer
435
+ .pytype/
436
+
437
+ # Cython debug symbols
438
+ cython_debug/
439
+
440
+ # PyCharm
441
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
442
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
443
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
444
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
445
+ #.idea/
446
+
447
+ ### Python Patch ###
448
+ # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
449
+ poetry.toml
450
+
451
+ # ruff
452
+ .ruff_cache/
453
+
454
+ # LSP config files
455
+ pyrightconfig.json
456
+
457
+ ### VisualStudioCode ###
458
+ .vscode/*
459
+ !.vscode/settings.json
460
+ !.vscode/tasks.json
461
+ !.vscode/launch.json
462
+ !.vscode/extensions.json
463
+ !.vscode/*.code-snippets
464
+
465
+ # Local History for Visual Studio Code
466
+ .history/
467
+
468
+ # Built Visual Studio Code Extensions
469
+ *.vsix
470
+
471
+ ### VisualStudioCode Patch ###
472
+ # Ignore all local history of files
473
+ .history
474
+ .ionide
475
+
476
+ # End of https://www.toptal.com/developers/gitignore/api/linux,macos,jetbrains+all,visualstudiocode,node,python
@@ -0,0 +1,9 @@
1
+ {
2
+ // Paths excluded from markdown linting: third-party deps and generated/vendored
3
+ // tooling artifacts that are not authored in this repo.
4
+ "ignores": [
5
+ "node_modules/",
6
+ ".venv/",
7
+ ".git/"
8
+ ]
9
+ }
@@ -0,0 +1,28 @@
1
+ # Allow ordered list inconsistencies (sometimes intentional)
2
+ MD029: false
3
+
4
+ # Allow fenced code blocks without language (sometimes appropriate)
5
+ MD040: false
6
+
7
+ # Allow duplicate headings in sibling sections
8
+ MD024:
9
+ siblings_only: true
10
+
11
+ # Require aligned table columns with aligned delimiter rows
12
+ MD060:
13
+ style: aligned
14
+ aligned_delimiter: true
15
+
16
+ # Allow longer lines for tables and code blocks
17
+ MD013:
18
+ line_length: 80
19
+ heading_line_length: 80
20
+ code_block_line_length: 80
21
+ tables: false
22
+
23
+ # A YAML frontmatter `title` and the body's H1 are allowed to coexist and to
24
+ # repeat the same text — OKF concept notes (docs/) carry both.
25
+ MD025:
26
+ front_matter_title: ""
27
+ MD041:
28
+ front_matter_title: ""
@@ -0,0 +1,79 @@
1
+ default_install_hook_types: [pre-commit, commit-msg, pre-push]
2
+
3
+ repos:
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v6.0.0
6
+ hooks:
7
+ - id: trailing-whitespace
8
+ - id: end-of-file-fixer
9
+ - id: check-yaml
10
+ - id: check-toml
11
+ - id: check-merge-conflict
12
+ - id: check-added-large-files
13
+ - id: mixed-line-ending
14
+
15
+ - repo: local
16
+ hooks:
17
+ - id: md-lint
18
+ name: markdownlint-cli2
19
+ entry: make md-lint
20
+ language: system
21
+ files: \.md$
22
+ pass_filenames: false
23
+
24
+ - id: spell
25
+ name: cspell
26
+ entry: make spell
27
+ language: system
28
+ pass_filenames: false
29
+
30
+ - id: conventional-commit-msg
31
+ name: conventional-git commit message
32
+ entry: uvx conventional-git check commit --file
33
+ language: system
34
+ stages: [commit-msg]
35
+ types: [text]
36
+ pass_filenames: true
37
+
38
+ - id: conventional-branch-name
39
+ name: conventional-git branch name
40
+ entry: uvx conventional-git check branch
41
+ language: system
42
+ stages: [pre-commit, pre-push]
43
+ always_run: true
44
+ pass_filenames: false
45
+
46
+ - repo: https://github.com/checkmake/checkmake
47
+ rev: v0.3.2
48
+ hooks:
49
+ - id: checkmake-system
50
+
51
+ - repo: local
52
+ hooks:
53
+ - id: ruff-fix
54
+ name: ruff lint --fix
55
+ entry: make lint-fix
56
+ language: system
57
+ types: [python]
58
+ pass_filenames: false
59
+
60
+ - id: ruff-format
61
+ name: ruff format
62
+ entry: make format
63
+ language: system
64
+ types: [python]
65
+ pass_filenames: false
66
+
67
+ - id: mypy
68
+ name: mypy
69
+ entry: make mypy
70
+ language: system
71
+ types: [python]
72
+ pass_filenames: false
73
+
74
+ - id: pylint
75
+ name: pylint (pylint-plugin)
76
+ entry: make pylint
77
+ language: system
78
+ types: [python]
79
+ pass_filenames: false