Compare commits

...

3 Commits

Author SHA1 Message Date
Daniil Fajnberg 3f0e3db427
👷 Use own workflow for creating and publishing new releases 2023-04-26 17:04:12 +02:00
Daniil Fajnberg 862a517018
🚨 Set explicit `stacklevel` when warning about schema-wide `many` setting depending on initialization state.
This should help users see the exact line they wrote that triggered the warning.
2023-04-21 15:52:33 +02:00
Daniil Fajnberg 3c16b4ebd6
📌 Restrict main dependency `marshmallow>=3.12.0`;
pin all development dependencies to specific versions
2023-04-21 15:47:03 +02:00
5 changed files with 43 additions and 31 deletions

View File

@ -2,17 +2,15 @@ name: CI
on:
push:
branches:
- master
branches: master
tags: 'v*.*.*'
jobs:
test-and-check:
name: Tests and checks
uses: daniil-berg/reusable-workflows/.github/workflows/python-test.yaml@v0.0.1
test:
name: Test
uses: daniil-berg/reusable-workflows/.github/workflows/python-test.yaml@v0.2.1
with:
versions: '["3.9", "3.10", "3.11"]'
cache: pip
cache-dependency-path: pyproject.toml
unittest-command: 'scripts/test.sh'
coverage-command: 'scripts/cov.sh'
unittest-requirements: "-e '.[dev]'"
@ -21,3 +19,16 @@ jobs:
typecheck-all-versions: true
lint-command: 'scripts/lint.sh'
lint-requirements: '-Ur requirements/dev.txt'
release:
name: Release
if: ${{ github.ref_type == 'tag' }}
needs: test
uses: daniil-berg/reusable-workflows/.github/workflows/python-release.yaml@v0.2.1
with:
git-ref: ${{ github.ref_name }}
secrets:
release-token: ${{ secrets.TOKEN_GITHUB_CREATE_RELEASE }}
publish-token: ${{ secrets.TOKEN_PYPI_PROJECT }}
permissions:
contents: write

View File

@ -37,18 +37,15 @@ dynamic = [
]
[project.optional-dependencies]
full = [
]
dev = [
"black",
"build",
"coverage[toml]",
"isort",
"mkdocs-material",
"mkdocstrings[python]",
"mypy",
"ruff",
"black==23.3.0",
"build==0.10.0",
"coverage[toml]==7.2.3",
"isort==5.12.0",
"mkdocs-material==9.1.6",
"mkdocstrings[python]==0.21.2",
"mypy==1.2.0",
"ruff==0.0.262",
]
[project.urls]

View File

@ -1 +1 @@
marshmallow
marshmallow>=3.12.0

View File

@ -1,9 +1,9 @@
-r common.txt
black
build
coverage[toml]
isort
mkdocs-material
mkdocstrings[python]
mypy
ruff
black==23.3.0
build==0.10.0
coverage[toml]==7.2.3
isort==5.12.0
mkdocs-material==9.1.6
mkdocstrings[python]==0.21.2
mypy==1.2.0
ruff==0.0.262

View File

@ -16,6 +16,11 @@ from .decorators import post_load
Model = TypeVar("Model")
MANY_SCHEMA_UNSAFE = (
"Changing `many` schema-wide breaks type safety. "
"Use the the `many` parameter of specific methods (like `load`) instead."
)
class GenericSchema(GenericInsightMixin1[Model], Schema):
"""
@ -100,6 +105,7 @@ class GenericSchema(GenericInsightMixin1[Model], Schema):
[`load`][marshmallow_generic.GenericSchema.load]/
[`loads`][marshmallow_generic.GenericSchema.loads].
"""
self._pre_init = True
super().__init__(
only=only,
exclude=exclude,
@ -110,6 +116,7 @@ class GenericSchema(GenericInsightMixin1[Model], Schema):
partial=partial,
unknown=unknown,
)
self._pre_init = False
def __setattr__(self, name: str, value: Any) -> None:
"""
@ -119,10 +126,7 @@ class GenericSchema(GenericInsightMixin1[Model], Schema):
[`object.__setattr__`](https://docs.python.org/3/reference/datamodel.html#object.__setattr__).
"""
if name == "many" and value is not False:
warn(
"Changing `many` schema-wide breaks type safety. Use the the "
"`many` parameter of specific methods (like `load`) instead."
)
warn(MANY_SCHEMA_UNSAFE, stacklevel=4 if self._pre_init else 2)
super().__setattr__(name, value)
@post_load