Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-django-codemod for
openSUSE:Factory checked in at 2022-01-11 21:19:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-codemod (Old)
and /work/SRC/openSUSE:Factory/.python-django-codemod.new.1892 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-codemod"
Tue Jan 11 21:19:45 2022 rev:5 rq:945447 version:1.7.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-django-codemod/python-django-codemod.changes
2022-01-07 12:47:51.619907081 +0100
+++
/work/SRC/openSUSE:Factory/.python-django-codemod.new.1892/python-django-codemod.changes
2022-01-11 21:23:57.725156860 +0100
@@ -1,0 +2,6 @@
+Mon Jan 10 22:39:58 UTC 2022 - John Vandenberg <[email protected]>
+
+- Update to v1.7.0
+ * Avoid imports in try blocks
+
+-------------------------------------------------------------------
Old:
----
django-codemod-1.6.6.tar.gz
New:
----
django-codemod-1.7.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-codemod.spec ++++++
--- /var/tmp/diff_new_pack.kJq9vF/_old 2022-01-11 21:23:58.177157178 +0100
+++ /var/tmp/diff_new_pack.kJq9vF/_new 2022-01-11 21:23:58.181157181 +0100
@@ -17,10 +17,9 @@
%define skip_python2 1
-%define skip_python36 1
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-django-codemod
-Version: 1.6.6
+Version: 1.7.0
Release: 0
Summary: Collections of libCST codemodders to upgrade Django
License: MIT
++++++ django-codemod-1.6.6.tar.gz -> django-codemod-1.7.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/.github/labels.toml
new/django-codemod-1.7.0/.github/labels.toml
--- old/django-codemod-1.6.6/.github/labels.toml 2021-12-11
09:26:14.000000000 +0100
+++ new/django-codemod-1.7.0/.github/labels.toml 2022-01-10
18:08:51.000000000 +0100
@@ -82,3 +82,13 @@
color = "ffa663"
name = "hacktoberfest"
description = "Good issues for Hacktoberfest"
+
+[answered]
+color = "0ee2b6"
+name = "answered"
+description = "Automatically closes as answered after a delay"
+
+[waiting]
+color = "5f7972"
+name = "waiting"
+description = "Automatically closes if no answer after a delay"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/.github/workflows/ci.yml
new/django-codemod-1.7.0/.github/workflows/ci.yml
--- old/django-codemod-1.6.6/.github/workflows/ci.yml 2021-12-11
09:26:14.000000000 +0100
+++ new/django-codemod-1.7.0/.github/workflows/ci.yml 2022-01-10
18:08:51.000000000 +0100
@@ -81,7 +81,7 @@
# - Update CHANGELOG.md
# - Update version in code
# - Create git tag
- # - Create Github release
+ # - Create GitHub release
# - Publish to PyPI
- name: Python Semantic Release
uses: relekang/[email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-codemod-1.6.6/.github/workflows/issue-manager.yml
new/django-codemod-1.7.0/.github/workflows/issue-manager.yml
--- old/django-codemod-1.6.6/.github/workflows/issue-manager.yml
2021-12-11 09:26:14.000000000 +0100
+++ new/django-codemod-1.7.0/.github/workflows/issue-manager.yml
2022-01-10 18:08:51.000000000 +0100
@@ -1,21 +1,18 @@
-# Automatically close issues that have a keyword mark (an HTML comment)
-# in the last comment in the issue, by a group of predefined users, after a
custom delay.
-# https://github.com/tiangolo/issue-manager
-
-# Default config:
-# <!-- issue-manager: answered -->
-# Wait 10 days and comment: "Assuming the original issue was solved, it will
be automatically closed now"
-
-# Extra config:
-# '<!-- issue-manager: waiting -->'
-# Wait 10 days and comment: "Automatically closing. To re-open, please provide
the additional information requested"
-
name: Issue Manager
on:
- # Every day at midnight
schedule:
- cron: "0 0 * * *"
+ issue_comment:
+ types:
+ - created
+ issues:
+ types:
+ - labeled
+ pull_request_target:
+ types:
+ - labeled
+ workflow_dispatch:
jobs:
issue-manager:
@@ -24,15 +21,12 @@
- uses: tiangolo/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
-
config: >
{
"answered": {
- "delay": 864000,
"message": "Assuming the original issue was solved, it will be
automatically closed now."
},
"waiting": {
- "delay": 864000,
"message": "Automatically closing. To re-open, please provide
the additional information requested."
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django-codemod-1.6.6/.github/workflows/semantic-release.yml
new/django-codemod-1.7.0/.github/workflows/semantic-release.yml
--- old/django-codemod-1.6.6/.github/workflows/semantic-release.yml
2021-12-11 09:26:14.000000000 +0100
+++ new/django-codemod-1.7.0/.github/workflows/semantic-release.yml
2022-01-10 18:08:51.000000000 +0100
@@ -17,7 +17,7 @@
# - Update CHANGELOG.md
# - Update version in code
# - Create git tag
- # - Create Github release
+ # - Create GitHub release
# - Publish to PyPI
- name: Python Semantic Release
uses: relekang/[email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/.pre-commit-config.yaml
new/django-codemod-1.7.0/.pre-commit-config.yaml
--- old/django-codemod-1.6.6/.pre-commit-config.yaml 2021-12-11
09:26:14.000000000 +0100
+++ new/django-codemod-1.7.0/.pre-commit-config.yaml 2022-01-10
18:08:51.000000000 +0100
@@ -9,7 +9,7 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.0.1
+ rev: v4.1.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
@@ -22,7 +22,7 @@
- id: prettier
args: ["--tab-width", "2"]
- repo: https://github.com/asottile/pyupgrade
- rev: v2.29.1
+ rev: v2.31.0
hooks:
- id: pyupgrade
args: [--py3-plus]
@@ -39,11 +39,11 @@
hooks:
- id: flake8
- repo: https://github.com/commitizen-tools/commitizen
- rev: v2.20.0
+ rev: v2.20.3
hooks:
- id: commitizen
stages: [commit-msg]
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v0.910-1
+ rev: v0.930
hooks:
- id: mypy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/CHANGELOG.md
new/django-codemod-1.7.0/CHANGELOG.md
--- old/django-codemod-1.6.6/CHANGELOG.md 2021-12-11 09:26:14.000000000
+0100
+++ new/django-codemod-1.7.0/CHANGELOG.md 2022-01-10 18:08:51.000000000
+0100
@@ -2,6 +2,16 @@
<!--next-version-placeholder-->
+## v1.7.0 (2022-01-10)
+### Feature
+* Avoid imports in try blocks
([`f6c5159`](https://github.com/browniebroke/django-codemod/commit/f6c515965714677ce2a9deff2eef1bb2232d4acb))
+
+### Fix
+* **deps:** Update dependency rich to v11
([`3541992`](https://github.com/browniebroke/django-codemod/commit/354199292140c80b3b79b3f3c5b25edc951ca7fb))
+
+### Documentation
+* Add a note about django-upgrade in the readme
([`6bdc36d`](https://github.com/browniebroke/django-codemod/commit/6bdc36de73a7a7d06827ba16a94f8c78d07d44a8))
+
## v1.6.6 (2021-12-11)
### Fix
* **deps:** Update dependency myst-parser to ^0.16.0
([`8af7b0b`](https://github.com/browniebroke/django-codemod/commit/8af7b0bf9af0c8911b5a8773d450a70a8b24dc8e))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/README.md
new/django-codemod-1.7.0/README.md
--- old/django-codemod-1.6.6/README.md 2021-12-11 09:26:14.000000000 +0100
+++ new/django-codemod-1.7.0/README.md 2022-01-10 18:08:51.000000000 +0100
@@ -61,6 +61,12 @@
- This tool is best suited for Django sites, NOT for reusable Django
applications. The project needs to target a single Django version, e.g. 3.1.x.
- You do NOT need to install this tool as part of your project dependencies,
it is a CLI tool, not a Django package to be installed in your site.
+### Similar tools
+
+[django-upgrade](https://github.com/adamchainz/django-upgrade) is a similar
tool written by Adam Johnson. It's a reimplementation taking a different
approach based only on standard library module.
+
+django-codemod is based on [libCST](https://libcst.readthedocs.io/) (Concrete
Syntax Tree), and it's a limiting factor in terms of supported Python versions
as well as its speed. By using standard library modules, django-upgrade is a
lot faster and is able to support the latest Python, however it requires Python
3.8+.
+
## Contributors ???
Thanks goes to these wonderful people ([emoji
key](https://allcontributors.org/docs/en/emoji-key)):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/django_codemod/__init__.py
new/django-codemod-1.7.0/django_codemod/__init__.py
--- old/django-codemod-1.6.6/django_codemod/__init__.py 2021-12-11
09:26:14.000000000 +0100
+++ new/django-codemod-1.7.0/django_codemod/__init__.py 2022-01-10
18:08:51.000000000 +0100
@@ -1 +1 @@
-__version__ = "1.6.6"
+__version__ = "1.7.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/django_codemod/visitors/base.py
new/django-codemod-1.7.0/django_codemod/visitors/base.py
--- old/django-codemod-1.6.6/django_codemod/visitors/base.py 2021-12-11
09:26:14.000000000 +0100
+++ new/django-codemod-1.7.0/django_codemod/visitors/base.py 2022-01-10
18:08:51.000000000 +0100
@@ -7,6 +7,7 @@
Attribute,
BaseExpression,
BaseSmallStatement,
+ BatchableMetadataProvider,
Call,
CSTNode,
ImportAlias,
@@ -16,15 +17,35 @@
Name,
RemovalSentinel,
RemoveFromParent,
+ Try,
)
from libcst import matchers as m
-from libcst.codemod import CodemodContext, ContextAwareTransformer
+from libcst.codemod import CodemodContext, ContextAwareTransformer, SkipFile
from libcst.codemod.visitors import AddImportsVisitor, RemoveImportsVisitor
from libcst.metadata import ParentNodeProvider, Scope, ScopeProvider
from django_codemod.feature_flags import REPLACE_PARENT_MODULE_IMPORTED
+class IsTryImportProvider(BatchableMetadataProvider[bool]):
+ """
+ Marks ImportFrom nodes found inside a try block.
+ """
+
+ def __init__(self) -> None:
+ super().__init__()
+ self.try_level = 0
+
+ def visit_Try(self, node: Try) -> None:
+ self.try_level += 1
+
+ def leave_Try(self, node: Try) -> None:
+ self.try_level -= 1
+
+ def visit_ImportFrom(self, node: ImportFrom) -> None:
+ self.set_metadata(node, bool(self.try_level))
+
+
class BaseDjCodemodTransformer(ContextAwareTransformer, ABC):
deprecated_in: Tuple[int, int]
removed_in: Tuple[int, int]
@@ -50,6 +71,8 @@
class BaseRenameTransformer(BaseDjCodemodTransformer, ABC):
"""Base class to help rename or move a declaration."""
+ METADATA_DEPENDENCIES = (IsTryImportProvider,)
+
rename_from: str
rename_to: str
@@ -91,10 +114,11 @@
self, original_node: ImportFrom, updated_node: ImportFrom
) -> Union[BaseSmallStatement, RemovalSentinel]:
"""Update import statements for matching old module name."""
+
return (
self._check_import_from_exact(original_node, updated_node)
or self._check_import_from_parent(original_node, updated_node)
- or self._check_import_from_child(updated_node)
+ or self._check_import_from_child(original_node, updated_node)
or updated_node
)
@@ -114,7 +138,9 @@
# Check whether the exact symbol is imported
if not import_from_matches(updated_node, self.old_module_parts):
return None
- # Match, update the node an return it
+ if self.get_metadata(IsTryImportProvider, original_node):
+ raise SkipFile
+ # Match, update the node and return it
new_import_aliases = []
for import_alias in updated_node.names:
if not self.old_name or import_alias.evaluated_name ==
self.old_name:
@@ -162,6 +188,8 @@
# Check whether parent module is imported
if not import_from_matches(updated_node, self.old_parent_module_parts):
return None
+ if self.get_metadata(IsTryImportProvider, original_node):
+ raise SkipFile
# Match, check imports and extract metadata
for import_alias in updated_node.names:
if import_alias.evaluated_name == self.old_parent_name:
@@ -208,7 +236,7 @@
return updated_node
def _check_import_from_child(
- self, updated_node: ImportFrom
+ self, original_node: ImportFrom, updated_node: ImportFrom
) -> Optional[Union[BaseSmallStatement, RemovalSentinel]]:
"""
Check import of a member of the module being codemodded.
@@ -223,6 +251,8 @@
# Check whether a member of the module is imported
if not import_from_matches(updated_node, self.old_all_parts):
return None
+ if self.get_metadata(IsTryImportProvider, original_node):
+ raise SkipFile
# Match, add import for all imported names and remove the existing
import
for import_alias in updated_node.names:
AddImportsVisitor.add_needed_import(
@@ -260,6 +290,7 @@
def leave_Name(self, original_node: Name, updated_node: Name) ->
BaseExpression:
"""Rename reference to the imported name."""
+
matcher = self.name_matcher
if (
matcher
@@ -301,7 +332,7 @@
# Can't resolve scope of node -> consider no match
# Might be because of one of these reasons:
# - It's the same name in another scope
- # - It's a attribute with the same name
+ # - It's an attribute with the same name
# - It's a keyword argument
return False
return scope == self.import_scope
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/poetry.lock
new/django-codemod-1.7.0/poetry.lock
--- old/django-codemod-1.6.6/poetry.lock 2021-12-11 09:26:14.000000000
+0100
+++ new/django-codemod-1.7.0/poetry.lock 2022-01-10 18:08:51.000000000
+0100
@@ -351,21 +351,21 @@
[[package]]
name = "mypy"
-version = "0.910"
+version = "0.931"
description = "Optional static typing for Python"
category = "dev"
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.6"
[package.dependencies]
-mypy-extensions = ">=0.4.3,<0.5.0"
-toml = "*"
-typed-ast = {version = ">=1.4.0,<1.5.0", markers = "python_version < \"3.8\""}
-typing-extensions = ">=3.7.4"
+mypy-extensions = ">=0.4.3"
+tomli = ">=1.1.0"
+typed-ast = {version = ">=1.4.0,<2", markers = "python_version < \"3.8\""}
+typing-extensions = ">=3.10"
[package.extras]
dmypy = ["psutil (>=4.0)"]
-python2 = ["typed-ast (>=1.4.0,<1.5.0)"]
+python2 = ["typed-ast (>=1.4.0,<2)"]
[[package]]
name = "mypy-extensions"
@@ -879,7 +879,7 @@
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash =
"26eb733dc55f7a5b21dbc126aeb6dfc99769a4554b4ecbc7daf57ce2a38b433f"
+content-hash =
"26b8198029e1bee51d74f4d6c5deeeeacfe822f81f22a68c3cfb4b5c149cc21d"
[metadata.files]
alabaster = [
@@ -1111,29 +1111,26 @@
{file = "mdit_py_plugins-0.3.0-py3-none-any.whl", hash =
"sha256:b1279701cee2dbf50e188d3da5f51fee8d78d038cdf99be57c6b9d1aa93b4073"},
]
mypy = [
- {file = "mypy-0.910-cp35-cp35m-macosx_10_9_x86_64.whl", hash =
"sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457"},
- {file = "mypy-0.910-cp35-cp35m-manylinux1_x86_64.whl", hash =
"sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb"},
- {file = "mypy-0.910-cp35-cp35m-manylinux2010_x86_64.whl", hash =
"sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9"},
- {file = "mypy-0.910-cp35-cp35m-win_amd64.whl", hash =
"sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e"},
- {file = "mypy-0.910-cp36-cp36m-macosx_10_9_x86_64.whl", hash =
"sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921"},
- {file = "mypy-0.910-cp36-cp36m-manylinux1_x86_64.whl", hash =
"sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6"},
- {file = "mypy-0.910-cp36-cp36m-manylinux2010_x86_64.whl", hash =
"sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212"},
- {file = "mypy-0.910-cp36-cp36m-win_amd64.whl", hash =
"sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885"},
- {file = "mypy-0.910-cp37-cp37m-macosx_10_9_x86_64.whl", hash =
"sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0"},
- {file = "mypy-0.910-cp37-cp37m-manylinux1_x86_64.whl", hash =
"sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de"},
- {file = "mypy-0.910-cp37-cp37m-manylinux2010_x86_64.whl", hash =
"sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703"},
- {file = "mypy-0.910-cp37-cp37m-win_amd64.whl", hash =
"sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a"},
- {file = "mypy-0.910-cp38-cp38-macosx_10_9_x86_64.whl", hash =
"sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504"},
- {file = "mypy-0.910-cp38-cp38-manylinux1_x86_64.whl", hash =
"sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9"},
- {file = "mypy-0.910-cp38-cp38-manylinux2010_x86_64.whl", hash =
"sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072"},
- {file = "mypy-0.910-cp38-cp38-win_amd64.whl", hash =
"sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811"},
- {file = "mypy-0.910-cp39-cp39-macosx_10_9_x86_64.whl", hash =
"sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e"},
- {file = "mypy-0.910-cp39-cp39-macosx_11_0_arm64.whl", hash =
"sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b"},
- {file = "mypy-0.910-cp39-cp39-manylinux1_x86_64.whl", hash =
"sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2"},
- {file = "mypy-0.910-cp39-cp39-manylinux2010_x86_64.whl", hash =
"sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97"},
- {file = "mypy-0.910-cp39-cp39-win_amd64.whl", hash =
"sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8"},
- {file = "mypy-0.910-py3-none-any.whl", hash =
"sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d"},
- {file = "mypy-0.910.tar.gz", hash =
"sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"},
+ {file = "mypy-0.931-cp310-cp310-macosx_10_9_x86_64.whl", hash =
"sha256:3c5b42d0815e15518b1f0990cff7a705805961613e701db60387e6fb663fe78a"},
+ {file = "mypy-0.931-cp310-cp310-macosx_11_0_arm64.whl", hash =
"sha256:c89702cac5b302f0c5d33b172d2b55b5df2bede3344a2fbed99ff96bddb2cf00"},
+ {file =
"mypy-0.931-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
hash =
"sha256:300717a07ad09525401a508ef5d105e6b56646f7942eb92715a1c8d610149714"},
+ {file = "mypy-0.931-cp310-cp310-win_amd64.whl", hash =
"sha256:7b3f6f557ba4afc7f2ce6d3215d5db279bcf120b3cfd0add20a5d4f4abdae5bc"},
+ {file = "mypy-0.931-cp36-cp36m-macosx_10_9_x86_64.whl", hash =
"sha256:1bf752559797c897cdd2c65f7b60c2b6969ffe458417b8d947b8340cc9cec08d"},
+ {file =
"mypy-0.931-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
hash =
"sha256:4365c60266b95a3f216a3047f1d8e3f895da6c7402e9e1ddfab96393122cc58d"},
+ {file = "mypy-0.931-cp36-cp36m-win_amd64.whl", hash =
"sha256:1b65714dc296a7991000b6ee59a35b3f550e0073411ac9d3202f6516621ba66c"},
+ {file = "mypy-0.931-cp37-cp37m-macosx_10_9_x86_64.whl", hash =
"sha256:e839191b8da5b4e5d805f940537efcaa13ea5dd98418f06dc585d2891d228cf0"},
+ {file =
"mypy-0.931-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
hash =
"sha256:50c7346a46dc76a4ed88f3277d4959de8a2bd0a0fa47fa87a4cde36fe247ac05"},
+ {file = "mypy-0.931-cp37-cp37m-win_amd64.whl", hash =
"sha256:d8f1ff62f7a879c9fe5917b3f9eb93a79b78aad47b533911b853a757223f72e7"},
+ {file = "mypy-0.931-cp38-cp38-macosx_10_9_x86_64.whl", hash =
"sha256:f9fe20d0872b26c4bba1c1be02c5340de1019530302cf2dcc85c7f9fc3252ae0"},
+ {file = "mypy-0.931-cp38-cp38-macosx_11_0_arm64.whl", hash =
"sha256:1b06268df7eb53a8feea99cbfff77a6e2b205e70bf31743e786678ef87ee8069"},
+ {file =
"mypy-0.931-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
hash =
"sha256:8c11003aaeaf7cc2d0f1bc101c1cc9454ec4cc9cb825aef3cafff8a5fdf4c799"},
+ {file = "mypy-0.931-cp38-cp38-win_amd64.whl", hash =
"sha256:d9d2b84b2007cea426e327d2483238f040c49405a6bf4074f605f0156c91a47a"},
+ {file = "mypy-0.931-cp39-cp39-macosx_10_9_x86_64.whl", hash =
"sha256:ff3bf387c14c805ab1388185dd22d6b210824e164d4bb324b195ff34e322d166"},
+ {file = "mypy-0.931-cp39-cp39-macosx_11_0_arm64.whl", hash =
"sha256:5b56154f8c09427bae082b32275a21f500b24d93c88d69a5e82f3978018a0266"},
+ {file =
"mypy-0.931-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl",
hash =
"sha256:8ca7f8c4b1584d63c9a0f827c37ba7a47226c19a23a753d52e5b5eddb201afcd"},
+ {file = "mypy-0.931-cp39-cp39-win_amd64.whl", hash =
"sha256:74f7eccbfd436abe9c352ad9fb65872cc0f1f0a868e9d9c44db0893440f0c697"},
+ {file = "mypy-0.931-py3-none-any.whl", hash =
"sha256:1171f2e0859cfff2d366da2c7092b06130f232c636a3f7301e3feb8b41f6377d"},
+ {file = "mypy-0.931.tar.gz", hash =
"sha256:0038b21890867793581e4cb0d810829f5fd4441aa75796b53033af3aa30430ce"},
]
mypy-extensions = [
{file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash =
"sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/pyproject.toml
new/django-codemod-1.7.0/pyproject.toml
--- old/django-codemod-1.6.6/pyproject.toml 2021-12-11 09:26:14.000000000
+0100
+++ new/django-codemod-1.7.0/pyproject.toml 2022-01-10 18:08:51.000000000
+0100
@@ -1,6 +1,6 @@
[tool.poetry]
name = "django-codemod"
-version = "1.6.6"
+version = "1.7.0"
description = "A command line tool to automatically fix Django deprecations."
authors = ["Bruno Alla <[email protected]>"]
license = "MIT"
@@ -31,7 +31,7 @@
click = "<9"
libcst = "==0.3.23"
pathspec = ">=0.6,<1"
-rich = "<11"
+rich = "<12"
# Docs deps
Sphinx = {version = "^4.0.0", optional = true}
@@ -55,7 +55,7 @@
flake8 = "^4.0.0"
pyupgrade = {version = "^2.29.1", python = "^3.6.1"}
isort = {version = "^5.10.1", python = "^3.6.1"}
-mypy = "^0.910"
+mypy = "^0.931"
[tool.semantic_release]
branch = "main"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django-codemod-1.6.6/tests/visitors/test_base.py
new/django-codemod-1.7.0/tests/visitors/test_base.py
--- old/django-codemod-1.6.6/tests/visitors/test_base.py 2021-12-11
09:26:14.000000000 +0100
+++ new/django-codemod-1.7.0/tests/visitors/test_base.py 2022-01-10
18:08:51.000000000 +0100
@@ -1,5 +1,6 @@
import pytest
from libcst import matchers as m
+from libcst.codemod import SkipFile
from parameterized import parameterized
from django_codemod.visitors.base import (
@@ -211,7 +212,7 @@
self.assertCodemod(before, after)
def test_name_from_outer_scope(self) -> None:
- """When import from outer scope has same name as function variable."""
+ """When import from outer scope has the same name as function
variable."""
before = """
from django.dummy.module import func
@@ -277,6 +278,49 @@
"""
self.assertCodemod(before, after)
+ def test_avoid_try_import(self) -> None:
+ before = after = """
+ try:
+ from django.dummy.module import func
+ except:
+ from django.dummy.other_module import better_func as func
+
+ result = func()
+ """
+ with pytest.raises(SkipFile):
+ self.assertCodemod(before, after)
+
+ @pytest.mark.usefixtures("parent_module_import_enabled")
+ def test_avoid_try_import_parent(self) -> None:
+ before = after = """
+ try:
+ from django.dummy import module
+ except:
+ from django.dummy import other_module as module
+
+ result = module.func()
+ """
+ with pytest.raises(SkipFile):
+ self.assertCodemod(before, after)
+
+ @pytest.mark.usefixtures("parent_module_import_enabled")
+ def test_parent_import_star(self) -> None:
+ before = after = """
+ from django.dummy import *
+
+ result = module.func()
+ """
+ self.assertCodemod(before, after)
+
+ @pytest.mark.usefixtures("parent_module_import_enabled")
+ def test_parent_import_not_matches(self) -> None:
+ before = after = """
+ from django.ymmud import other_module
+
+ result = other_module.other_func()
+ """
+ self.assertCodemod(before, after)
+
class OtherModuleFuncRenameTransformer(BaseFuncRenameTransformer):
"""Transformer with different module."""
@@ -424,6 +468,18 @@
"""
self.assertCodemod(before, after)
+ def test_avoid_try_import(self) -> None:
+ before = after = """
+ try:
+ from django.dummy.module import func
+ except:
+ from django.dummy.other_module import better_func as func
+
+ result = func()
+ """
+ with pytest.raises(SkipFile):
+ self.assertCodemod(before, after)
+
def test_parent_module_substitution(self) -> None:
before = """
from django.dummy import module