diff --git a/.github/workflows/pr_linting.yml b/.github/workflows/pr_linting.yml new file mode 100644 index 00000000..3d2431b6 --- /dev/null +++ b/.github/workflows/pr_linting.yml @@ -0,0 +1,24 @@ +name: 📇 Code Linting + +on: + push: + branches: [ develop ] + pull_request: + branches: [ develop ] + + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number}} + cancel-in-progress: true + +permissions: + contents: read + pull-requests: write + +jobs: + linting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: chartboost/ruff-action@v1 diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 00000000..d509ee4b --- /dev/null +++ b/ruff.toml @@ -0,0 +1,74 @@ +# Exclude a variety of commonly ignored directories. +exclude = [ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".git-rewrite", + ".hg", + ".ipynb_checkpoints", + ".mypy_cache", + ".nox", + ".pants.d", + ".pyenv", + ".pytest_cache", + ".pytype", + ".ruff_cache", + ".svn", + ".tox", + ".venv", + ".vscode", + "__pypackages__", + "_build", + "buck-out", + "build", + "dist", + "node_modules", + "site-packages", + "venv", +] + +# Same as Black. +line-length = 79 +indent-width = 4 + +[lint] +# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. +# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or +# McCabe complexity (`C901`) by default. +select = ["E4", "E7", "E9", "F", "W"] +ignore = [] + +# Allow fix for all enabled rules (when `--fix`) is provided. +fixable = ["ALL"] +unfixable = [] + +# Allow unused variables when underscore-prefixed. +dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + +[format] +# Like Black, use double quotes for strings. +quote-style = "double" + +# Like Black, indent with spaces, rather than tabs. +indent-style = "space" + +# Like Black, respect magic trailing commas. +skip-magic-trailing-comma = false + +# Like Black, automatically detect the appropriate line ending. +line-ending = "auto" + +# Enable auto-formatting of code examples in docstrings. Markdown, +# reStructuredText code/literal blocks and doctests are all supported. +# +# This is currently disabled by default, but it is planned for this +# to be opt-out in the future. +docstring-code-format = false + +# Set the line length limit used when formatting code snippets in +# docstrings. +# +# This only has an effect when the `docstring-code-format` setting is +# enabled. +docstring-code-line-length = "dynamic" diff --git a/services/shotgrid_common/ayon_shotgrid_hub/__init__.py b/services/shotgrid_common/ayon_shotgrid_hub/__init__.py index 680d6dab..e1b5a6f8 100644 --- a/services/shotgrid_common/ayon_shotgrid_hub/__init__.py +++ b/services/shotgrid_common/ayon_shotgrid_hub/__init__.py @@ -139,7 +139,7 @@ def project_name(self, project_name): try: self._ay_project = EntityHub(project_name) self._ay_project.project_entity - except Exception as err: + except Exception: self.log.warning(f"Project {project_name} does not exist in AYON.") self._ay_project = None @@ -156,7 +156,7 @@ def project_name(self, project_name): self.project_name, custom_fields=custom_fields ) - except Exception as e: + except Exception: self.log.warning(f"Project {project_name} does not exist in Shotgrid. ") self._sg_project = None @@ -370,7 +370,9 @@ def react_to_ayon_event(self, ayon_event): the change encompases, i.e. a new shot, new asset, etc. """ if not self._sg_project[CUST_FIELD_CODE_AUTO_SYNC]: - self.log.info(f"Ignoring event, Shotgirid field 'Ayon Auto Sync' is disabled.") + self.log.info( + "Ignoring event, Shotgrid field 'Ayon Auto Sync' is disabled." + ) return match ayon_event["topic"]: diff --git a/services/shotgrid_common/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py b/services/shotgrid_common/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py index e9af92a5..f0d6575d 100644 --- a/services/shotgrid_common/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py +++ b/services/shotgrid_common/ayon_shotgrid_hub/match_shotgrid_hierarchy_in_ayon.py @@ -282,7 +282,7 @@ def _create_new_entity( try: # INFO: it was causing error so trying to set status directly ay_entity.status = status - except ValueError as e: + except ValueError: # `ValueError: Status ip is not available on project.` # log.warning(f"Status sync not implemented: {e}") pass @@ -333,4 +333,4 @@ def _create_color() -> str: color = [random.randint(0, 255) for _ in range(3)] if sum(color) < 400: color = [255 - x for x in color] - return f'#{"".join([f"{x:02x}" for x in color])}' \ No newline at end of file + return f'#{"".join([f"{x:02x}" for x in color])}'