diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3070c08..9ad71f1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,9 +11,11 @@ jobs: msgcheck: runs-on: ubuntu-latest steps: - - uses: actions/setup-python@v3 - - uses: actions/checkout@v3 - - run: sudo apt install -y gettext aspell libenchant-dev + - uses: actions/setup-python@v4 + with: + python-version: "3.10" + - uses: actions/checkout@v4 + - run: sudo apt install -y gettext aspell libenchant-2-dev - uses: actions/cache@v3 with: path: ~/.cache/pip @@ -35,8 +37,10 @@ jobs: - "pydocstyle ." runs-on: ubuntu-latest steps: - - uses: actions/setup-python@v3 - - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: "3.10" + - uses: actions/checkout@v4 - uses: actions/cache@v3 with: path: ~/.cache/pip @@ -49,8 +53,10 @@ jobs: dist: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + with: + python-version: "3.10" - run: sudo apt install gettext -y - run: python -m pip install --upgrade pip build wheel twine readme-renderer - run: python -m build --sdist --wheel @@ -78,11 +84,11 @@ jobs: - "test,progressbar" steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - run: sudo apt install gettext -y - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: python -m pip install --upgrade pip codecov - run: python -m pip install -e .[${{ matrix.extra }}] if: ${{ matrix.extra }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 19f0b4e..a71d600 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,8 +9,10 @@ jobs: PyPi: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + with: + python-version: "3.10" - run: sudo apt-get install gettext -y - run: python -m pip install --upgrade pip build wheel twine - run: python -m build --sdist --wheel diff --git a/lint-requirements.txt b/lint-requirements.txt index 7aae3f5..9279c0e 100644 --- a/lint-requirements.txt +++ b/lint-requirements.txt @@ -1,6 +1,6 @@ -bandit==1.7.4 -black==22.3.0 -flake8==4.0.1 -isort==5.10.1 +bandit==1.7.5 +black==23.10.0 +flake8==6.1.0 +isort==5.12.0 msgcheck==4.0.0 -pydocstyle==6.1.1 +pydocstyle==6.3.0 diff --git a/stdimage/models.py b/stdimage/models.py index 6e0083d..dd429d8 100644 --- a/stdimage/models.py +++ b/stdimage/models.py @@ -158,9 +158,9 @@ def __getstate__(self): state = super().__getstate__() state["variations"] = {} for variation_name in self.field.variations: - variation = getattr(self, variation_name) - variation_state = variation.__getstate__() - state["variations"][variation_name] = variation_state + if variation := getattr(self, variation_name, None): + variation_state = variation.__getstate__() + state["variations"][variation_name] = variation_state return state def __setstate__(self, state): @@ -207,7 +207,7 @@ def __init__( render_variations=True, force_min_size=False, delete_orphans=False, - **kwargs + **kwargs, ): """ Standardized ImageField for Django. diff --git a/tests/test_models.py b/tests/test_models.py index e8d47f2..e234521 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -174,6 +174,20 @@ def test_defer(self, db, django_assert_num_queries): deferred.image assert instance.image.thumbnail == deferred.image.thumbnail + @pytest.mark.django_db + def test_variations_deepcopy_unsaved(self): + instance_original = ResizeModel(image=self.fixtures["600x400.jpg"]) + instance = deepcopy(instance_original) + assert isinstance(instance.image, StdImageFieldFile) + assert instance.image == instance_original.image + + @pytest.mark.django_db + def test_variations_deepcopy_without_image(self): + instance_original = ThumbnailModel.objects.create(image=None) + instance = deepcopy(instance_original) + assert isinstance(instance.image, StdImageFieldFile) + assert instance.image == instance_original.image + @pytest.mark.django_db def test_variations_deepcopy(self): """Tests test_variations() with a deep copied object"""
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: