activemodel 0.5.0__tar.gz → 0.8.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 (76) hide show
  1. activemodel-0.8.0/.envrc +14 -0
  2. activemodel-0.8.0/.github/dependabot.yml +12 -0
  3. activemodel-0.8.0/.github/workflows/build_and_publish.yml +58 -0
  4. activemodel-0.8.0/.github/workflows/repo-sync.yml +16 -0
  5. activemodel-0.8.0/.gitignore +131 -0
  6. activemodel-0.8.0/.tool-versions +3 -0
  7. activemodel-0.8.0/.vscode/settings.json +36 -0
  8. activemodel-0.8.0/CHANGELOG.md +137 -0
  9. activemodel-0.8.0/Justfile +14 -0
  10. activemodel-0.8.0/Makefile +10 -0
  11. activemodel-0.8.0/PKG-INFO +282 -0
  12. activemodel-0.8.0/README.md +267 -0
  13. activemodel-0.8.0/TODO +51 -0
  14. {activemodel-0.5.0 → activemodel-0.8.0}/activemodel/__init__.py +2 -0
  15. {activemodel-0.5.0 → activemodel-0.8.0}/activemodel/base_model.py +141 -33
  16. activemodel-0.8.0/activemodel/celery.py +33 -0
  17. activemodel-0.8.0/activemodel/errors.py +6 -0
  18. activemodel-0.8.0/activemodel/get_column_from_field_patch.py +139 -0
  19. activemodel-0.8.0/activemodel/mixins/__init__.py +4 -0
  20. activemodel-0.8.0/activemodel/mixins/pydantic_json.py +82 -0
  21. activemodel-0.8.0/activemodel/mixins/soft_delete.py +17 -0
  22. activemodel-0.8.0/activemodel/mixins/typeid.py +46 -0
  23. activemodel-0.8.0/activemodel/pytest/transaction.py +63 -0
  24. {activemodel-0.5.0 → activemodel-0.8.0}/activemodel/pytest/truncate.py +1 -1
  25. {activemodel-0.5.0 → activemodel-0.8.0}/activemodel/query_wrapper.py +24 -10
  26. activemodel-0.8.0/activemodel/session_manager.py +149 -0
  27. activemodel-0.8.0/activemodel/types/__init__.py +1 -0
  28. activemodel-0.8.0/activemodel/types/typeid.py +192 -0
  29. activemodel-0.8.0/activemodel/utils.py +65 -0
  30. activemodel-0.8.0/docker-compose.yml +24 -0
  31. activemodel-0.8.0/playground/comments.py +74 -0
  32. activemodel-0.8.0/playground/env-with-model.patch +12 -0
  33. activemodel-0.8.0/playground/extract_comments.py +33 -0
  34. activemodel-0.8.0/playground/field.py +13 -0
  35. activemodel-0.8.0/playground/middleware.py +9 -0
  36. activemodel-0.8.0/playground/pydantic_validation.py +13 -0
  37. activemodel-0.8.0/playground.py +21 -0
  38. {activemodel-0.5.0 → activemodel-0.8.0}/pyproject.toml +22 -2
  39. activemodel-0.8.0/test/__init__.py +0 -0
  40. activemodel-0.8.0/test/comments_test.py +111 -0
  41. activemodel-0.8.0/test/conftest.py +17 -0
  42. activemodel-0.8.0/test/delete_test.py +17 -0
  43. activemodel-0.8.0/test/fastapi_test.py +79 -0
  44. activemodel-0.8.0/test/migrations/README +1 -0
  45. activemodel-0.8.0/test/migrations/alembic.ini +120 -0
  46. activemodel-0.8.0/test/migrations/env.py +87 -0
  47. activemodel-0.8.0/test/migrations/script.py.mako +28 -0
  48. activemodel-0.8.0/test/migrations_test.py +45 -0
  49. activemodel-0.8.0/test/models.py +44 -0
  50. activemodel-0.8.0/test/orm_test.py +111 -0
  51. activemodel-0.8.0/test/serialization_test.py +93 -0
  52. activemodel-0.8.0/test/table_name_test.py +14 -0
  53. activemodel-0.8.0/test/test_wrapper.py +44 -0
  54. activemodel-0.8.0/test/typeid_test.py +93 -0
  55. activemodel-0.8.0/test/utils.py +45 -0
  56. activemodel-0.8.0/uv.lock +1300 -0
  57. activemodel-0.5.0/PKG-INFO +0 -66
  58. activemodel-0.5.0/README.md +0 -51
  59. activemodel-0.5.0/activemodel/mixins/__init__.py +0 -2
  60. activemodel-0.5.0/activemodel/mixins/typeid.py +0 -36
  61. activemodel-0.5.0/activemodel/pytest/transaction.py +0 -51
  62. activemodel-0.5.0/activemodel/session_manager.py +0 -62
  63. activemodel-0.5.0/activemodel/types/typeid.py +0 -56
  64. activemodel-0.5.0/activemodel/utils.py +0 -15
  65. activemodel-0.5.0/activemodel.egg-info/PKG-INFO +0 -66
  66. activemodel-0.5.0/activemodel.egg-info/SOURCES.txt +0 -23
  67. activemodel-0.5.0/activemodel.egg-info/dependency_links.txt +0 -1
  68. activemodel-0.5.0/activemodel.egg-info/entry_points.txt +0 -2
  69. activemodel-0.5.0/activemodel.egg-info/requires.txt +0 -4
  70. activemodel-0.5.0/activemodel.egg-info/top_level.txt +0 -1
  71. activemodel-0.5.0/setup.cfg +0 -4
  72. {activemodel-0.5.0 → activemodel-0.8.0}/LICENSE +0 -0
  73. {activemodel-0.5.0 → activemodel-0.8.0}/activemodel/logger.py +0 -0
  74. {activemodel-0.5.0 → activemodel-0.8.0}/activemodel/mixins/timestamps.py +0 -0
  75. {activemodel-0.5.0 → activemodel-0.8.0}/activemodel/pytest/__init__.py +0 -0
  76. /activemodel-0.5.0/activemodel/_session_manager.py → /activemodel-0.8.0/playground/old_session_manager.py +0 -0
@@ -0,0 +1,14 @@
1
+ layout uv
2
+
3
+ # if you are using orb for local development, this will work just fine
4
+ export DATABASE_HOST=${DATABASE_HOST:-postgres.$(basename $PWD).orb.local}
5
+
6
+ export POSTGRES_USER=root
7
+ export POSTGRES_PASSWORD=password
8
+ export POSTGRES_DB=development
9
+
10
+ export DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}:5432/development
11
+
12
+ export PYTHONBREAKPOINT=ipdb.set_trace
13
+
14
+ # export ACTIVEMODEL_LOG_SQL=true
@@ -0,0 +1,12 @@
1
+ version: 2
2
+
3
+ updates:
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+
9
+ - package-ecosystem: "pip"
10
+ directory: "/"
11
+ schedule:
12
+ interval: "weekly"
@@ -0,0 +1,58 @@
1
+ name: Build and Publish to PyPI
2
+ on:
3
+ push:
4
+ branches:
5
+ - main
6
+ - master
7
+
8
+ # write permissions for release-please
9
+ # permissions:
10
+ # contents: write
11
+ # pull-requests: write
12
+
13
+ env:
14
+ # avoid build failures due to flaky pypi
15
+ PIP_DEFAULT_TIMEOUT: 60
16
+ PIP_RETRIES: 5
17
+
18
+ DATABASE_HOST: localhost
19
+
20
+ jobs:
21
+ release-please:
22
+ runs-on: ubuntu-latest
23
+ needs: [build]
24
+ outputs:
25
+ release_created: ${{ steps.release.outputs.release_created }}
26
+ steps:
27
+ - uses: googleapis/release-please-action@v4
28
+ id: release
29
+ with:
30
+ release-type: python
31
+ # bump-minor-pre-major: true
32
+ token: ${{ secrets.GH_PERSONAL_TOKEN }}
33
+
34
+ publish:
35
+ runs-on: ubuntu-latest
36
+ needs: [release-please]
37
+ if: needs.release-please.outputs.release_created
38
+ steps:
39
+ - uses: actions/checkout@v4
40
+ - uses: jdx/mise-action@v2
41
+ - run: direnv allow . && direnv export gha >> "$GITHUB_ENV"
42
+ - run: uv build
43
+ - run: uv publish --token ${{ secrets.PYPI_API_TOKEN }}
44
+
45
+ build:
46
+ runs-on: ubuntu-latest
47
+ steps:
48
+ - uses: actions/checkout@v4
49
+ - uses: jdx/mise-action@v2
50
+ - run: direnv allow . && direnv export gha >> "$GITHUB_ENV"
51
+ - run: docker compose up -d --wait
52
+ - run: uv sync
53
+
54
+ # `uv run` prefix is required since the venv is not activated
55
+
56
+ - name: Make sure we can import the module
57
+ run: uv run python -c 'import ${{ github.event.repository.name }}'
58
+ - run: uv run pytest
@@ -0,0 +1,16 @@
1
+ name: Repository Metadata Sync
2
+
3
+ on:
4
+ push:
5
+ branches: [main, master]
6
+
7
+ jobs:
8
+ repo_sync:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Fetching Local Repository
12
+ uses: actions/checkout@v4
13
+ - name: Repository Metadata Sync
14
+ uses: iloveitaly/github-actions-metadata-sync@main
15
+ with:
16
+ TOKEN: ${{ secrets.GH_PERSONAL_TOKEN }}
@@ -0,0 +1,131 @@
1
+ # Byte-compiled / optimized / 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
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Usually these files are written by a python script from a template
32
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .nox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ *.py,cover
51
+ .hypothesis/
52
+ .pytest_cache/
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
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ .python-version
86
+
87
+ # pipenv
88
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
90
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
91
+ # install all needed dependencies.
92
+ #Pipfile.lock
93
+
94
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95
+ __pypackages__/
96
+
97
+ # Celery stuff
98
+ celerybeat-schedule
99
+ celerybeat.pid
100
+
101
+ # SageMath parsed files
102
+ *.sage.py
103
+
104
+ # Environments
105
+ .env
106
+ .venv
107
+ env/
108
+ venv/
109
+ ENV/
110
+ env.bak/
111
+ venv.bak/
112
+
113
+ # Spyder project settings
114
+ .spyderproject
115
+ .spyproject
116
+
117
+ # Rope project settings
118
+ .ropeproject
119
+
120
+ # mkdocs documentation
121
+ /site
122
+
123
+ # mypy
124
+ .mypy_cache/
125
+ .dmypy.json
126
+ dmypy.json
127
+
128
+ # Pyre type checker
129
+ .pyre/
130
+
131
+ /test/migrations/versions
@@ -0,0 +1,3 @@
1
+ python 3.13.1
2
+ uv 0.5.29
3
+ direnv 2.35.0
@@ -0,0 +1,36 @@
1
+ {
2
+ "[python]": {
3
+ "editor.formatOnSave": true,
4
+ "editor.defaultFormatter": "charliermarsh.ruff",
5
+ "editor.codeActionsOnSave": {
6
+ "source.fixAll": "explicit",
7
+ "source.organizeImports": "explicit"
8
+ },
9
+ "editor.tabSize": 4
10
+ },
11
+ "[toml]": {
12
+ "editor.formatOnSave": true,
13
+ "editor.tabSize": 4
14
+ },
15
+ "python.analysis.autoFormatStrings": true,
16
+
17
+ // for import autosuggest
18
+ "python.analysis.indexing": true,
19
+ "python.analysis.autoImportCompletions": true,
20
+
21
+ "python.analysis.packageIndexDepths": [
22
+ {
23
+ "name": "",
24
+ "depth": 3,
25
+ "includeAllSymbols": true
26
+ }
27
+ ],
28
+
29
+ "cSpell.words": ["openai", "httpx"],
30
+
31
+ "files.exclude": {
32
+ ".ruff_cache": true,
33
+ ".pytest_cache": true,
34
+ ".venv": true
35
+ }
36
+ }
@@ -0,0 +1,137 @@
1
+ # Changelog
2
+
3
+ ## [0.8.0](https://github.com/iloveitaly/activemodel/compare/v0.7.0...v0.8.0) (2025-03-18)
4
+
5
+
6
+ ### Features
7
+
8
+ * add BaseModel.where method and update test cases ([9fe4c5a](https://github.com/iloveitaly/activemodel/commit/9fe4c5af619690ffb6344cf5c74a2d4b2b46ef02))
9
+ * add primary_key_field ([947a410](https://github.com/iloveitaly/activemodel/commit/947a410766dd764e8ac5b3177152d2ff22cdb609))
10
+ * log start of database transaction in tests ([ac90d6f](https://github.com/iloveitaly/activemodel/commit/ac90d6f18bb0a4cca68527dec9c55b4af1f6e851))
11
+ * reload json fields when record is reloaded from db ([c013082](https://github.com/iloveitaly/activemodel/commit/c013082004bb3a93e81f00eb0c990833a9cae7e2))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * yield session object in global_session function ([47b33cc](https://github.com/iloveitaly/activemodel/commit/47b33cc1aa66d6076363635191c297c52fcc3deb))
17
+
18
+
19
+ ### Documentation
20
+
21
+ * add comments to clarify SessionManager use and config ([e73561b](https://github.com/iloveitaly/activemodel/commit/e73561b3d52e617a0f92da5cd93981ff429da16f))
22
+ * update comments and README with additional examples and info ([209ee36](https://github.com/iloveitaly/activemodel/commit/209ee36a9df53f927cd9e5b2bb15b3a5776b34ce))
23
+ * update README with setup instructions and SQLModel tips ([f2520b5](https://github.com/iloveitaly/activemodel/commit/f2520b5fa5d7c462e8f7a591b83d874239a34b8d))
24
+
25
+ ## [0.7.0](https://github.com/iloveitaly/activemodel/compare/v0.6.0...v0.7.0) (2025-02-08)
26
+
27
+
28
+ ### Features
29
+
30
+ * **migrations:** add test to validate autogenerated migrations ([03e0511](https://github.com/iloveitaly/activemodel/commit/03e0511b90307091448f165cca1976ca37e41d4a))
31
+
32
+
33
+ ### Bug Fixes
34
+
35
+ * filter migration files to include only Python files in test ([76f6723](https://github.com/iloveitaly/activemodel/commit/76f672349f24c34284c190368e71a5d4116c3293))
36
+ * make another_with_index optional in ExampleRecord ([2ace729](https://github.com/iloveitaly/activemodel/commit/2ace7292bcc84907818f8719571a2bfcafecfd6b))
37
+
38
+
39
+ ### Documentation
40
+
41
+ * enhance README with alembic integration instructions ([a7ac734](https://github.com/iloveitaly/activemodel/commit/a7ac734c5f456afb605ce4e7d0e5111835bfb5f6))
42
+ * improve Alembic integration guidance and resources ([1206278](https://github.com/iloveitaly/activemodel/commit/1206278ae292669bff5a1eb4747d81225dd420e9))
43
+
44
+ ## [0.6.0](https://github.com/iloveitaly/activemodel/compare/v0.5.0...v0.6.0) (2025-02-08)
45
+
46
+
47
+ ### Features
48
+
49
+ * add active model meta functionality with comments ([4180df7](https://github.com/iloveitaly/activemodel/commit/4180df73c8e49fb2da970f934856ac89cd9f4ebc))
50
+ * add Celery encoder for TypeID serialization ([416b04a](https://github.com/iloveitaly/activemodel/commit/416b04ad4bff5f156886fe5519c24505e380f9c7))
51
+ * add data initialization on model load ([00a90ce](https://github.com/iloveitaly/activemodel/commit/00a90cef17d4d5ef1530df21357812d974488012))
52
+ * add field comments to SQLModel metadata ([c32bb9a](https://github.com/iloveitaly/activemodel/commit/c32bb9a45be0e0dd90bc967d28141bf460b524d3))
53
+ * add initial TypeIDType import to __init__.py ([8594dff](https://github.com/iloveitaly/activemodel/commit/8594dffd5ac7fb03ae07bdd8c81e556e1542176e))
54
+ * add JSON serialization for Pydantic models ([1213f2f](https://github.com/iloveitaly/activemodel/commit/1213f2f2bcee0a006eb58658565484ebb60727d5))
55
+ * add playground script for interactive database testing ([fbe419a](https://github.com/iloveitaly/activemodel/commit/fbe419aa6d0edde5abbcdf405f7b037317730df1))
56
+ * add soft deletion mixin for model handling ([2e24e26](https://github.com/iloveitaly/activemodel/commit/2e24e26e0283189d18a7b51b068bd63d58b5e3dd))
57
+ * add TypeID validation and refactor TypeIDType ([5a2a49e](https://github.com/iloveitaly/activemodel/commit/5a2a49e1ee10cb648b4fedc7fd3e262ba5d8e0f1))
58
+ * add utility to import all SQLModel subclasses ([e850016](https://github.com/iloveitaly/activemodel/commit/e85001632524130eac461e6cff23691fcb1c6bbb))
59
+ * enforce unique non-empty prefixes in TypeIDMixin ([a167293](https://github.com/iloveitaly/activemodel/commit/a167293996b319759c8b01c49a05ab0f8dd1d153))
60
+ * enhance foreign key handling and add validation ([61d5849](https://github.com/iloveitaly/activemodel/commit/61d58495a64c7d87d4c5ad1f1cfe0dd4649fe523))
61
+ * enhance query handling and testing in ORM ([363c0dd](https://github.com/iloveitaly/activemodel/commit/363c0dd67b24ba4e860799555e25d51a3c8d4b0d))
62
+ * enhance schema handling with new json schema generation ([3ba47b6](https://github.com/iloveitaly/activemodel/commit/3ba47b6c150d80e24691c8eba195b800cc3ba61c))
63
+ * enhance session management and JSON serialization ([c74804b](https://github.com/iloveitaly/activemodel/commit/c74804b005e7667b5b18cb4f9b03f52cdcb72313))
64
+ * handle dict annotations in PydanticJSONMixin ([085c6a9](https://github.com/iloveitaly/activemodel/commit/085c6a96d02e0d1521c6c58be38cf5b7d3a667af))
65
+ * integrate field description as SQL comment ([cd98fe4](https://github.com/iloveitaly/activemodel/commit/cd98fe4b3024d55dbd9e7951d65b3b73b2aa3cf8))
66
+ * integrate table comment extraction for models ([b7b9722](https://github.com/iloveitaly/activemodel/commit/b7b97224244b886f2067c0f5a0aea3c77c6bbe82))
67
+ * integrate TypeID with Pydantic schema handling ([ab7ded9](https://github.com/iloveitaly/activemodel/commit/ab7ded9e472abdab8e34205e15fc643db842904d))
68
+ * patch FieldInfo for comment support ([e85d154](https://github.com/iloveitaly/activemodel/commit/e85d1543856be8bd19f185e025a43f20aa9a01cb))
69
+ * **test:** enhance ORM tests and introduce QueryWrapper test ([be98abb](https://github.com/iloveitaly/activemodel/commit/be98abb1bb5abe34cf42ebba7b63b89a942e487e))
70
+
71
+
72
+ ### Bug Fixes
73
+
74
+ * attempt at using a context manager, no joy ([409ed6d](https://github.com/iloveitaly/activemodel/commit/409ed6de7618c0fcce7fa8fde2f77e0c612c39cb))
75
+ * return True upon successful delete operation ([444a5f5](https://github.com/iloveitaly/activemodel/commit/444a5f561a04fb2dad549c4ffc5a05cc31453fca))
76
+ * support lots of UUID inputs ([783a9fe](https://github.com/iloveitaly/activemodel/commit/783a9fe7f733b346cd6bf2401a9ae134ec785cf6))
77
+
78
+
79
+ ### Documentation
80
+
81
+ * add example queries to the README file ([f3e878c](https://github.com/iloveitaly/activemodel/commit/f3e878cb72e62fdec727f7b268806d850ea145f0))
82
+ * add new controller project ([c10bc29](https://github.com/iloveitaly/activemodel/commit/c10bc2946b8819812810271c195e317c19269adc))
83
+ * add usage example for Appointment model in README ([7d9ac70](https://github.com/iloveitaly/activemodel/commit/7d9ac708b6bc5c77d3dde0a904ddb6c24c7f2710))
84
+ * expand README with setup and usage sections ([c471f5f](https://github.com/iloveitaly/activemodel/commit/c471f5ff6359e2ab06e9e9053b416dc4f19dd26a))
85
+ * update README with TypeID integration details ([6112888](https://github.com/iloveitaly/activemodel/commit/6112888a4ac0fc8601bf57daba638db6b5bc6788))
86
+
87
+ ## [0.5.0](https://github.com/iloveitaly/activemodel/compare/v0.4.0...v0.5.0) (2024-11-28)
88
+
89
+
90
+ ### Features
91
+
92
+ * add methods for finding or creating records in model ([f1fd2f2](https://github.com/iloveitaly/activemodel/commit/f1fd2f2d65f182631b5df6a1ab20bf2f9a269607))
93
+
94
+
95
+
96
+ ## [0.4.0](https://github.com/iloveitaly/activemodel/compare/v0.3.0...v0.4.0) (2024-11-26)
97
+
98
+
99
+ ### Bug Fixes
100
+
101
+ * update uv version to 0.5.4 ([1d77c39](https://github.com/iloveitaly/activemodel/commit/1d77c39e2234b98335e7206626dc2fdca0b34b79))
102
+
103
+
104
+ ### Features
105
+
106
+ * add database truncation functionality for tests ([177abf9](https://github.com/iloveitaly/activemodel/commit/177abf91c8b25295cb93878433132302f8caffbc))
107
+ * add FastAPISessionMaker for SQLAlchemy session management ([b80f045](https://github.com/iloveitaly/activemodel/commit/b80f045e52c908c7b1ae8721e42ee2796c8e85bc))
108
+ * add mixins for timestamps and TypeID handling ([51a6128](https://github.com/iloveitaly/activemodel/commit/51a6128e6d0f45e5801821b99e399ae0bcfca624))
109
+ * add python-decouple-typed as a dependency ([d495ad4](https://github.com/iloveitaly/activemodel/commit/d495ad419494c0c387a331a9d0ef4d112df83af7))
110
+ * add typeid-python dependency to project requirements ([998762f](https://github.com/iloveitaly/activemodel/commit/998762fda8f62a078fc3a4afa8c09f5af323dcfb))
111
+ * implement database reset methods for tests ([9cec29d](https://github.com/iloveitaly/activemodel/commit/9cec29d2ad89a871d4cbda2a6b8ad3a1ef50df6e))
112
+ * lots of stuff :) ([0510d20](https://github.com/iloveitaly/activemodel/commit/0510d20a807829db4f6b454ee2915c32ecedb323))
113
+
114
+
115
+
116
+ ## [0.3.0](https://github.com/iloveitaly/activemodel/compare/v0.2.0...v0.3.0) (2024-11-20)
117
+
118
+
119
+ ### Features
120
+
121
+ * add inspiration section to README and update TODO ([b11fb09](https://github.com/iloveitaly/activemodel/commit/b11fb09eb95e338de7358ba070fac0e75eda9909))
122
+
123
+
124
+
125
+ ## [0.2.0](https://github.com/iloveitaly/activemodel/compare/193f839c9ace154e7aaa0a9770400031d0e67cd3...v0.2.0) (2024-11-16)
126
+
127
+
128
+ ### Bug Fixes
129
+
130
+ * update uv version and rename test file location ([9389fd2](https://github.com/iloveitaly/activemodel/commit/9389fd2e20e75ea322cd55bb699777978a9d282d))
131
+
132
+
133
+ ### Features
134
+
135
+ * add Redis and Postgres services to CI workflow ([b9cb0ba](https://github.com/iloveitaly/activemodel/commit/b9cb0baca6bd46092437552ddf1d317a528983ca))
136
+ * automate tablename generation from camelCase ([193f839](https://github.com/iloveitaly/activemodel/commit/193f839c9ace154e7aaa0a9770400031d0e67cd3))
137
+ * enhance project description and keywords in config ([10c5707](https://github.com/iloveitaly/activemodel/commit/10c570786925fa9d7a397cb6f503b658df00aa4f))
@@ -0,0 +1,14 @@
1
+ [macos]
2
+ db_play:
3
+ uv tool run pgcli $DATABASE_URL
4
+
5
+ up:
6
+ docker compose up -d
7
+
8
+
9
+ gh_configure:
10
+ repo_path=$(gh repo view --json nameWithOwner --jq '.nameWithOwner') && \
11
+ gh api --method PUT "/repos/${repo_path}/actions/permissions/workflow" \
12
+ -f default_workflow_permissions=write \
13
+ -F can_approve_pull_request_reviews=true && \
14
+ gh api "/repos/${repo_path}/actions/permissions/workflow"
@@ -0,0 +1,10 @@
1
+ setup:
2
+ uv venv && uv sync
3
+ @echo "activate: source ./.venv/bin/activate"
4
+
5
+ db_open:
6
+ open -a TablePlus $$DATABASE_URL
7
+
8
+ clean:
9
+ rm -rf *.egg-info
10
+ rm -rf .venv