cachepot 0.4.0__tar.gz → 0.5.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 (87) hide show
  1. cachepot-0.5.0/.coveragerc +2 -0
  2. cachepot-0.5.0/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  3. cachepot-0.5.0/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  4. cachepot-0.5.0/.github/PULL_REQUEST_TEMPLATE.md +16 -0
  5. cachepot-0.5.0/.github/workflows/codeql.yml +43 -0
  6. cachepot-0.5.0/.github/workflows/gitignore-in.yml +18 -0
  7. cachepot-0.5.0/.github/workflows/happy.yml +15 -0
  8. cachepot-0.5.0/.github/workflows/octocov.yml +55 -0
  9. cachepot-0.5.0/.github/workflows/pypi-publish.yml +51 -0
  10. cachepot-0.5.0/.github/workflows/python-test.yml +68 -0
  11. cachepot-0.5.0/.github/workflows/spellcheck.yml +13 -0
  12. {cachepot-0.4.0 → cachepot-0.5.0}/.gitignore +119 -27
  13. cachepot-0.5.0/.octocov.yml +21 -0
  14. cachepot-0.5.0/CONTRIBUTING.md +48 -0
  15. cachepot-0.5.0/PKG-INFO +179 -0
  16. cachepot-0.4.0/PKG-INFO → cachepot-0.5.0/README.md +57 -37
  17. cachepot-0.5.0/SECURITY.md +35 -0
  18. cachepot-0.5.0/cachepot/__init__.py +28 -0
  19. cachepot-0.5.0/cachepot/_version.py +24 -0
  20. cachepot-0.5.0/cachepot/_warnings.py +14 -0
  21. cachepot-0.5.0/cachepot/backend/__init__.py +62 -0
  22. cachepot-0.5.0/cachepot/backend/filesystem.py +194 -0
  23. cachepot-0.5.0/cachepot/backend/redis.py +89 -0
  24. cachepot-0.5.0/cachepot/backend/sqlite.py +250 -0
  25. cachepot-0.5.0/cachepot/expire.py +22 -0
  26. {cachepot-0.4.0 → cachepot-0.5.0}/cachepot/serializer/__init__.py +1 -3
  27. {cachepot-0.4.0 → cachepot-0.5.0}/cachepot/serializer/json.py +2 -2
  28. cachepot-0.5.0/cachepot/serializer/pickle.py +153 -0
  29. cachepot-0.5.0/cachepot/store/__init__.py +346 -0
  30. cachepot-0.5.0/cachepot.egg-info/PKG-INFO +179 -0
  31. {cachepot-0.4.0 → cachepot-0.5.0}/cachepot.egg-info/SOURCES.txt +16 -2
  32. cachepot-0.5.0/cachepot.egg-info/requires.txt +3 -0
  33. cachepot-0.5.0/cachepot.egg-info/scm_file_list.json +54 -0
  34. cachepot-0.5.0/cachepot.egg-info/scm_version.json +8 -0
  35. cachepot-0.5.0/cachepot.egg-info/top_level.txt +1 -0
  36. cachepot-0.5.0/example/README.md +8 -0
  37. {cachepot-0.4.0 → cachepot-0.5.0}/example/__init__.py +12 -13
  38. cachepot-0.5.0/lefthook.yml +13 -0
  39. cachepot-0.5.0/pyproject.toml +112 -0
  40. cachepot-0.5.0/setup.cfg +4 -0
  41. cachepot-0.5.0/tests/backend/test_filesystem.py +470 -0
  42. cachepot-0.5.0/tests/backend/test_redis.py +123 -0
  43. cachepot-0.5.0/tests/backend/test_sqlite.py +381 -0
  44. cachepot-0.5.0/tests/serializer/test_pickle.py +116 -0
  45. cachepot-0.5.0/tests/test_example.py +35 -0
  46. cachepot-0.5.0/tests/test_expire.py +36 -0
  47. cachepot-0.5.0/tests/test_store.py +551 -0
  48. cachepot-0.5.0/uv.lock +925 -0
  49. cachepot-0.4.0/.github/workflows/gitignore-in.yml +0 -16
  50. cachepot-0.4.0/.github/workflows/happy.yml +0 -18
  51. cachepot-0.4.0/.github/workflows/pypi-publish.yml +0 -57
  52. cachepot-0.4.0/.github/workflows/python-test.yml +0 -83
  53. cachepot-0.4.0/.github/workflows/spellcheck.yml +0 -16
  54. cachepot-0.4.0/README.md +0 -101
  55. cachepot-0.4.0/cachepot/_version.py +0 -16
  56. cachepot-0.4.0/cachepot/backend/__init__.py +0 -15
  57. cachepot-0.4.0/cachepot/backend/filesystem.py +0 -50
  58. cachepot-0.4.0/cachepot/backend/redis.py +0 -27
  59. cachepot-0.4.0/cachepot/backend/sqlite.py +0 -74
  60. cachepot-0.4.0/cachepot/expire.py +0 -10
  61. cachepot-0.4.0/cachepot/serializer/pickle.py +0 -12
  62. cachepot-0.4.0/cachepot/store/__init__.py +0 -97
  63. cachepot-0.4.0/cachepot.egg-info/PKG-INFO +0 -125
  64. cachepot-0.4.0/cachepot.egg-info/requires.txt +0 -4
  65. cachepot-0.4.0/cachepot.egg-info/top_level.txt +0 -3
  66. cachepot-0.4.0/poetry.lock +0 -732
  67. cachepot-0.4.0/pyproject.toml +0 -45
  68. cachepot-0.4.0/setup.cfg +0 -49
  69. cachepot-0.4.0/tests/backend/test_filesystem.py +0 -32
  70. cachepot-0.4.0/tests/backend/test_redis.py +0 -24
  71. cachepot-0.4.0/tests/backend/test_sqlite.py +0 -32
  72. cachepot-0.4.0/tests/serializer/__init__.py +0 -0
  73. cachepot-0.4.0/tests/serializer/test_pickle.py +0 -26
  74. cachepot-0.4.0/tests/test_expire.py +0 -15
  75. cachepot-0.4.0/tests/test_store.py +0 -31
  76. {cachepot-0.4.0 → cachepot-0.5.0}/.github/renovate.json5 +0 -0
  77. {cachepot-0.4.0 → cachepot-0.5.0}/.gitignore.in +0 -0
  78. {cachepot-0.4.0 → cachepot-0.5.0}/LICENSE +0 -0
  79. {cachepot-0.4.0 → cachepot-0.5.0}/cachepot/py.typed +0 -0
  80. {cachepot-0.4.0 → cachepot-0.5.0}/cachepot/serializer/str.py +0 -0
  81. {cachepot-0.4.0 → cachepot-0.5.0}/cachepot.egg-info/dependency_links.txt +0 -0
  82. {cachepot-0.4.0 → cachepot-0.5.0}/docker-compose.test.yml +0 -0
  83. {cachepot-0.4.0/cachepot → cachepot-0.5.0/tests}/__init__.py +0 -0
  84. {cachepot-0.4.0/tests → cachepot-0.5.0/tests/backend}/__init__.py +0 -0
  85. {cachepot-0.4.0/tests/backend → cachepot-0.5.0/tests/serializer}/__init__.py +0 -0
  86. {cachepot-0.4.0 → cachepot-0.5.0}/tests/serializer/test_json.py +0 -0
  87. {cachepot-0.4.0 → cachepot-0.5.0}/tests/serializer/test_str.py +0 -0
@@ -0,0 +1,2 @@
1
+ [run]
2
+ branch = True
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a bug in cachepot
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+ ---
8
+
9
+ **Describe the bug**
10
+ A clear and concise description of what the bug is.
11
+
12
+ **To reproduce**
13
+ Minimal code to reproduce the problem:
14
+
15
+ ```python
16
+ from cachepot...
17
+ ```
18
+
19
+ **Expected behavior**
20
+ What you expected to happen.
21
+
22
+ **Actual behavior**
23
+ What actually happened (include any error messages or tracebacks).
24
+
25
+ **Environment**
26
+ - Python version:
27
+ - cachepot version:
28
+ - OS:
29
+ - Backend used (filesystem, sqlite, redis, etc.):
30
+
31
+ **Additional context**
32
+ Any other relevant information.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest a new feature or improvement for cachepot
4
+ title: ''
5
+ labels: enhancement
6
+ assignees: ''
7
+ ---
8
+
9
+ **Problem or motivation**
10
+ Describe the problem you are trying to solve or the improvement you would like to see.
11
+
12
+ **Proposed solution**
13
+ Describe the solution you have in mind (new serializer, backend, API change, etc.).
14
+
15
+ **Alternatives considered**
16
+ Any alternative approaches you have thought about.
17
+
18
+ **Additional context**
19
+ Any other context or references.
@@ -0,0 +1,16 @@
1
+ ## Summary
2
+
3
+ <!-- Describe what this PR changes and why. -->
4
+
5
+ ## Changes
6
+
7
+ <!-- List the specific changes made. -->
8
+
9
+ ## Testing
10
+
11
+ - [ ] `uv run poe check` passes (lint, type check, format)
12
+ - [ ] `uv run poe test` passes
13
+
14
+ ## Related issues
15
+
16
+ <!-- Link related issues with "Closes #N" or "Refs #N". -->
@@ -0,0 +1,43 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ schedule:
9
+ # Weekly scan to catch newly discovered vulnerabilities
10
+ - cron: '0 9 * * 1'
11
+
12
+ permissions:
13
+ contents: read
14
+ security-events: write
15
+
16
+ concurrency:
17
+ group: ${{ github.workflow }}-${{ github.ref }}
18
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
19
+
20
+ jobs:
21
+ analyze:
22
+ name: Analyze (${{ matrix.language }})
23
+ runs-on: ubuntu-latest
24
+ strategy:
25
+ fail-fast: false
26
+ matrix:
27
+ language: ['python']
28
+ steps:
29
+ - name: Checkout repository
30
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
31
+
32
+ - name: Initialize CodeQL
33
+ uses: github/codeql-action/init@f3712979fa5f215279b101dd0a2e3bdfb4353324 # v3
34
+ with:
35
+ languages: ${{ matrix.language }}
36
+
37
+ - name: Autobuild
38
+ uses: github/codeql-action/autobuild@f3712979fa5f215279b101dd0a2e3bdfb4353324 # v3
39
+
40
+ - name: Perform CodeQL Analysis
41
+ uses: github/codeql-action/analyze@f3712979fa5f215279b101dd0a2e3bdfb4353324 # v3
42
+ with:
43
+ category: "/language:${{ matrix.language }}"
@@ -0,0 +1,18 @@
1
+ name: Update gitignore file
2
+
3
+ on:
4
+ schedule:
5
+ # daily at 00:00
6
+ - cron: '0 0 * * *'
7
+
8
+ concurrency:
9
+ group: ${{ github.workflow }}-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ permissions:
13
+ contents: write
14
+ pull-requests: write
15
+
16
+ jobs:
17
+ update-gitignore:
18
+ uses: kitsuyui/gh-actions-workflows/.github/workflows/gitignore-in.yml@a7071a4635eaece62696cd7132306616ce283c47
@@ -0,0 +1,15 @@
1
+ name: happy-commit
2
+ on:
3
+ - pull_request
4
+
5
+ concurrency:
6
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
7
+ cancel-in-progress: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }}
8
+
9
+ permissions:
10
+ contents: read
11
+ pull-requests: write
12
+ issues: write
13
+ jobs:
14
+ happy:
15
+ uses: kitsuyui/gh-actions-workflows/.github/workflows/happy-commit.yml@a7071a4635eaece62696cd7132306616ce283c47
@@ -0,0 +1,55 @@
1
+ name: octocov
2
+ on:
3
+ pull_request:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ concurrency:
9
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
10
+ cancel-in-progress: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }}
11
+
12
+ permissions:
13
+ contents: read
14
+ pull-requests: write
15
+ checks: write
16
+
17
+ jobs:
18
+ octocov:
19
+ runs-on: ubuntu-latest
20
+
21
+ services:
22
+ redis:
23
+ image: redis:8.6.3@sha256:25dbb04fc4d6d190eda327dab551631500b0f9ac8f9808e8e63b7fda1ddff196
24
+ options: >-
25
+ --health-cmd "redis-cli ping"
26
+ --health-interval 10s
27
+ --health-timeout 5s
28
+ --health-retries 5
29
+ ports:
30
+ - 6379:6379
31
+
32
+ steps:
33
+ - name: Checkout
34
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
35
+
36
+ - name: Enable caching
37
+ uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
38
+ with:
39
+ enable-cache: true
40
+
41
+ - name: Install dependencies
42
+ run: uv sync
43
+
44
+ - name: Test
45
+ run: uv run poe test
46
+
47
+ - name: Coverage
48
+ run: uv run poe coverage-xml
49
+
50
+ # See also: https://github.com/k1LoW/octocov-action
51
+ - name: Report coverage with octocov
52
+ uses: k1LoW/octocov-action@b3b6ee60482a667950f87553abf1df63217235d9 # v1
53
+ with:
54
+ github-token: ${{ secrets.GITHUB_TOKEN }}
55
+ config: .octocov.yml
@@ -0,0 +1,51 @@
1
+ name: Packaging
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ pull_request:
8
+ types: [opened, synchronize, reopened]
9
+ release:
10
+ # "released" events are emitted either when directly be released or be edited from pre-released.
11
+ types: [prereleased, released]
12
+
13
+ concurrency:
14
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
15
+ cancel-in-progress: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }}
16
+
17
+ env:
18
+ python_version: 3.13
19
+
20
+ jobs:
21
+ deploy:
22
+ permissions:
23
+ contents: read
24
+ id-token: write
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
28
+
29
+ - name: Enable caching
30
+ uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
31
+ with:
32
+ enable-cache: true
33
+
34
+ - run: |
35
+ uv python pin ${{ env.python_version }}
36
+ uv sync
37
+
38
+ - name: Build
39
+ run: uv build
40
+
41
+ - name: Publish distribution to Test PyPI
42
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
43
+ if: github.event_name == 'release' && github.event.release.prerelease
44
+ with:
45
+ repository-url: https://test.pypi.org/legacy/
46
+
47
+ - name: Publish distribution to PyPI
48
+ if: github.event_name == 'release' && !github.event.release.prerelease
49
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
50
+ with:
51
+ generate-attestations: true
@@ -0,0 +1,68 @@
1
+ name: Test
2
+ on:
3
+ # pull-request events are not triggered when a PR is merged
4
+ # push events are not triggered when a PR created from a fork repository
5
+ # So we need both to run tests on every PR and after merging
6
+ pull_request:
7
+ push:
8
+ branches:
9
+ - main
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
13
+ cancel-in-progress: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }}
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ test:
20
+ runs-on: ubuntu-latest
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ python: ["3.10", "3.11", "3.12", "3.13", "3.14"]
25
+
26
+ services:
27
+ redis:
28
+ image: redis:8.6.3@sha256:25dbb04fc4d6d190eda327dab551631500b0f9ac8f9808e8e63b7fda1ddff196
29
+ options: >-
30
+ --health-cmd "redis-cli ping"
31
+ --health-interval 10s
32
+ --health-timeout 5s
33
+ --health-retries 5
34
+ ports:
35
+ - 6379:6379
36
+
37
+ steps:
38
+ - name: Checkout
39
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
40
+
41
+ - name: Enable caching
42
+ uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
43
+ with:
44
+ enable-cache: true
45
+
46
+ - name: Install dependencies
47
+ run: |
48
+ uv python pin ${{ matrix.python }}
49
+ uv sync
50
+
51
+ - parallel:
52
+ - name: Lint
53
+ run: uv run poe check
54
+
55
+ - name: Check Python version
56
+ run: |
57
+ actual_version=$(uv run python --version)
58
+ expected_version="Python ${{ matrix.python }}"
59
+ if [[ "$actual_version" != *"$expected_version"* ]]; then
60
+ echo "Expected $expected_version, but got $actual_version"
61
+ exit 1
62
+ fi
63
+
64
+ - name: Test
65
+ run: uv run poe test
66
+
67
+ - name: Coverage
68
+ run: uv run poe coverage-xml
@@ -0,0 +1,13 @@
1
+ name: Spellcheck
2
+ on:
3
+ - pull_request
4
+
5
+ concurrency:
6
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
7
+ cancel-in-progress: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }}
8
+
9
+ permissions:
10
+ contents: read
11
+ jobs:
12
+ check:
13
+ uses: kitsuyui/gh-actions-workflows/.github/workflows/spellcheck.yml@8019e658f4665c962d0a88eb38b3b6be418e7be8
@@ -5,14 +5,14 @@
5
5
  # -----------------------------------------------------------------------------
6
6
  # gibo dump Linux
7
7
  ### Generated by gibo (https://github.com/simonwhitaker/gibo)
8
- ### https://raw.github.com/github/gitignore/33243d9491911332228307c915ff95707791a91f/Global/Linux.gitignore
8
+ ### https://raw.github.com/github/gitignore/576334520435382d6522f349b9d270eda1e79a25/Global/Linux.gitignore
9
9
 
10
10
  *~
11
11
 
12
12
  # temporary files which can be created if a process still has a handle open of a deleted file
13
13
  .fuse_hidden*
14
14
 
15
- # KDE directory preferences
15
+ # Metadata left by Dolphin file manager, which comes with KDE Plasma
16
16
  .directory
17
17
 
18
18
  # Linux trash folder which might appear on any partition or disk
@@ -20,10 +20,13 @@
20
20
 
21
21
  # .nfs files are created when an open file is removed but is still being accessed
22
22
  .nfs*
23
+
24
+ # Log files created by default by the nohup command
25
+ nohup.out
23
26
  # -----------------------------------------------------------------------------
24
27
  # gibo dump Windows
25
28
  ### Generated by gibo (https://github.com/simonwhitaker/gibo)
26
- ### https://raw.github.com/github/gitignore/33243d9491911332228307c915ff95707791a91f/Global/Windows.gitignore
29
+ ### https://raw.github.com/github/gitignore/576334520435382d6522f349b9d270eda1e79a25/Global/Windows.gitignore
27
30
 
28
31
  # Windows thumbnail cache files
29
32
  Thumbs.db
@@ -52,20 +55,20 @@ $RECYCLE.BIN/
52
55
  # -----------------------------------------------------------------------------
53
56
  # gibo dump macOS
54
57
  ### Generated by gibo (https://github.com/simonwhitaker/gibo)
55
- ### https://raw.github.com/github/gitignore/33243d9491911332228307c915ff95707791a91f/Global/macOS.gitignore
58
+ ### https://raw.github.com/github/gitignore/576334520435382d6522f349b9d270eda1e79a25/Global/macOS.gitignore
56
59
 
57
60
  # General
58
61
  .DS_Store
62
+ .localized
63
+ __MACOSX/
59
64
  .AppleDouble
60
65
  .LSOverride
66
+ Icon[
61
67
 
62
- # Icon must end with two \r
63
- Icon
64
-
65
- # Thumbnails
68
+ # Resource forks
66
69
  ._*
67
70
 
68
- # Files that might appear in the root of a volume
71
+ # Files and directories that might appear in the root of a volume
69
72
  .DocumentRevisions-V100
70
73
  .fseventsd
71
74
  .Spotlight-V100
@@ -73,6 +76,15 @@ Icon
73
76
  .Trashes
74
77
  .VolumeIcon.icns
75
78
  .com.apple.timemachine.donotpresent
79
+ .com.apple.timemachine.supported
80
+ .PKInstallSandboxManager
81
+ .PKInstallSandboxManager-SystemSoftware
82
+ .hotfiles.btree
83
+ .vol
84
+ .file
85
+ .disk_label*
86
+ lost+found
87
+ .HFS+ Private Directory Data[
76
88
 
77
89
  # Directories potentially created on remote AFP share
78
90
  .AppleDB
@@ -80,14 +92,36 @@ Icon
80
92
  Network Trash Folder
81
93
  Temporary Items
82
94
  .apdisk
95
+
96
+ # Mac OS 6 to 9
97
+ Desktop DB
98
+ Desktop DF
99
+ TheFindByContentFolder
100
+ TheVolumeSettingsFolder
101
+ .FBCIndex
102
+ .FBCSemaphoreFile
103
+ .FBCLockFolder
104
+
105
+ # Quota system
106
+ .quota.group
107
+ .quota.user
108
+ .quota.ops.group
109
+ .quota.ops.user
110
+
111
+ # TimeMachine
112
+ Backups.backupdb
113
+ .MobileBackups
114
+ .MobileBackups.trash
115
+ MobileBackups.trash
116
+ tmbootpicker.efi
83
117
  # -----------------------------------------------------------------------------
84
118
  # gibo dump Python
85
119
  ### Generated by gibo (https://github.com/simonwhitaker/gibo)
86
- ### https://raw.github.com/github/gitignore/33243d9491911332228307c915ff95707791a91f/Python.gitignore
120
+ ### https://raw.github.com/github/gitignore/576334520435382d6522f349b9d270eda1e79a25/Python.gitignore
87
121
 
88
122
  # Byte-compiled / optimized / DLL files
89
123
  __pycache__/
90
- *.py[cod]
124
+ *.py[codz]
91
125
  *$py.class
92
126
 
93
127
  # C extensions
@@ -114,8 +148,8 @@ share/python-wheels/
114
148
  MANIFEST
115
149
 
116
150
  # PyInstaller
117
- # Usually these files are written by a python script from a template
118
- # before PyInstaller builds the exe, so as to inject date/other infos into it.
151
+ # Usually these files are written by a python script from a template
152
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
119
153
  *.manifest
120
154
  *.spec
121
155
 
@@ -133,7 +167,8 @@ htmlcov/
133
167
  nosetests.xml
134
168
  coverage.xml
135
169
  *.cover
136
- *.py,cover
170
+ *.py.cover
171
+ *.lcov
137
172
  .hypothesis/
138
173
  .pytest_cache/
139
174
  cover/
@@ -179,37 +214,65 @@ ipython_config.py
179
214
  # However, in case of collaboration, if having platform-specific dependencies or dependencies
180
215
  # having no cross-platform support, pipenv may install dependencies that don't work, or not
181
216
  # install all needed dependencies.
182
- #Pipfile.lock
217
+ # Pipfile.lock
218
+
219
+ # UV
220
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
221
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
222
+ # commonly ignored for libraries.
223
+ # uv.lock
183
224
 
184
225
  # poetry
185
226
  # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
186
227
  # This is especially recommended for binary packages to ensure reproducibility, and is more
187
228
  # commonly ignored for libraries.
188
229
  # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
189
- #poetry.lock
230
+ # poetry.lock
231
+ # poetry.toml
190
232
 
191
233
  # pdm
192
234
  # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
193
- #pdm.lock
194
- # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
195
- # in version control.
196
- # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
197
- .pdm.toml
235
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
236
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
237
+ # pdm.lock
238
+ # pdm.toml
198
239
  .pdm-python
199
240
  .pdm-build/
200
241
 
242
+ # pixi
243
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
244
+ # pixi.lock
245
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
246
+ # in the .venv directory. It is recommended not to include this directory in version control.
247
+ .pixi/*
248
+ !.pixi/config.toml
249
+
201
250
  # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
202
251
  __pypackages__/
203
252
 
204
253
  # Celery stuff
205
- celerybeat-schedule
254
+ celerybeat-schedule*
206
255
  celerybeat.pid
207
256
 
257
+ # Redis
258
+ *.rdb
259
+ *.aof
260
+ *.pid
261
+
262
+ # RabbitMQ
263
+ mnesia/
264
+ rabbitmq/
265
+ rabbitmq-data/
266
+
267
+ # ActiveMQ
268
+ activemq-data/
269
+
208
270
  # SageMath parsed files
209
271
  *.sage.py
210
272
 
211
273
  # Environments
212
274
  .env
275
+ .envrc
213
276
  .venv
214
277
  env/
215
278
  venv/
@@ -242,10 +305,39 @@ dmypy.json
242
305
  cython_debug/
243
306
 
244
307
  # PyCharm
245
- # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
246
- # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
247
- # and can be added to the global gitignore or merged into this file. For a more nuclear
248
- # option (not recommended) you can uncomment the following to ignore the entire idea folder.
249
- #.idea/
308
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
309
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
310
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
311
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
312
+ # .idea/
313
+
314
+ # Abstra
315
+ # Abstra is an AI-powered process automation framework.
316
+ # Ignore directories containing user credentials, local state, and settings.
317
+ # Learn more at https://abstra.io/docs
318
+ .abstra/
319
+
320
+ # Visual Studio Code
321
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
322
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
323
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
324
+ # you could uncomment the following to ignore the entire vscode folder
325
+ # .vscode/
326
+ # Temporary file for partial code execution
327
+ tempCodeRunnerFile.py
328
+
329
+ # Ruff stuff:
330
+ .ruff_cache/
331
+
332
+ # PyPI configuration file
333
+ .pypirc
334
+
335
+ # Marimo
336
+ marimo/_static/
337
+ marimo/_lsp/
338
+ __marimo__/
339
+
340
+ # Streamlit
341
+ .streamlit/secrets.toml
250
342
  # -----------------------------------------------------------------------------
251
343
  _version.py
@@ -0,0 +1,21 @@
1
+ # https://github.com/k1LoW/octocov?tab=readme-ov-file#configuration
2
+ coverage:
3
+ paths:
4
+ - coverage.xml
5
+ codeToTestRatio:
6
+ code:
7
+ - "**/*.py"
8
+ test:
9
+ - "tests/**/*.py"
10
+ testExecutionTime:
11
+ if: true
12
+ diff:
13
+ datastores:
14
+ - artifact://${GITHUB_REPOSITORY}
15
+ comment:
16
+ if: is_pull_request
17
+ updatePrevious: true
18
+ report:
19
+ if: is_default_branch
20
+ datastores:
21
+ - artifact://${GITHUB_REPOSITORY}
@@ -0,0 +1,48 @@
1
+ # Contributing to cachepot
2
+
3
+ Thank you for your interest in contributing to cachepot, a Python cache library with type hints.
4
+
5
+ ## Development Setup
6
+
7
+ ```bash
8
+ git clone https://github.com/kitsuyui/cachepot.git
9
+ cd cachepot
10
+ uv sync
11
+ lefthook install # install pre-commit and pre-push hooks
12
+ ```
13
+
14
+ The project uses [lefthook](https://lefthook.dev/) to run the same checks as CI locally.
15
+
16
+ ## Running Tests and Checks
17
+
18
+ ```bash
19
+ uv run poe check # lint, type check, format check
20
+ uv run poe test # run tests
21
+ ```
22
+
23
+ Or let the hooks run automatically when you commit/push.
24
+
25
+ ## Submitting a Pull Request
26
+
27
+ 1. Fork the repository and create a topic branch from `main`.
28
+ 2. Make your changes. Keep each PR focused on one change.
29
+ 3. Ensure `uv run poe check` and `uv run poe test` pass.
30
+ 4. Open a pull request against `main` using the provided template.
31
+
32
+ Commits should follow the `fix:`, `feat:`, `docs:`, `chore:` prefix convention.
33
+
34
+ ## Reporting Bugs
35
+
36
+ Use the bug report issue template. Include your Python version, OS, and steps to reproduce.
37
+
38
+ ## Security Vulnerabilities
39
+
40
+ See [SECURITY.md](SECURITY.md) for the disclosure process. Do not open a public issue with exploit details.
41
+
42
+ ## Code Style
43
+
44
+ This project uses `ruff` for linting and formatting. Run `uv run poe check` to verify before submitting.
45
+
46
+ ## License
47
+
48
+ By contributing, you agree that your contributions will be licensed under the BSD-3-Clause license.