From 894d75418ddba4c393c88673e91c908345518929 Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Tue, 7 Jan 2025 19:53:51 +0000 Subject: [PATCH 1/5] feat(dev): linting; - Flake8 and pyright. --- .github/workflows/flake8.yml | 22 +++ .github/workflows/pyright.yml | 44 +++++ ckanext/gcnotify/mailer.py | 260 +++++++++++--------------- ckanext/gcnotify/plugin.py | 15 +- ckanext/gcnotify/tests/test_plugin.py | 2 +- package-lock.json | 66 +++++++ package.json | 21 +++ pyproject.toml | 74 ++++++++ setup.cfg | 9 + setup.py | 9 +- 10 files changed, 363 insertions(+), 159 deletions(-) create mode 100644 .github/workflows/flake8.yml create mode 100644 .github/workflows/pyright.yml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pyproject.toml diff --git a/.github/workflows/flake8.yml b/.github/workflows/flake8.yml new file mode 100644 index 0000000..cc04dc1 --- /dev/null +++ b/.github/workflows/flake8.yml @@ -0,0 +1,22 @@ +name: Lint +on: [pull_request] + +permissions: + contents: read + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.9' + - name: Install requirements + run: pip install flake8 pycodestyle + - name: Check syntax + # Stop the build if there are Python syntax errors or undefined names + run: flake8 --show-source + + - name: Warnings + run: flake8 diff --git a/.github/workflows/pyright.yml b/.github/workflows/pyright.yml new file mode 100644 index 0000000..9173fe9 --- /dev/null +++ b/.github/workflows/pyright.yml @@ -0,0 +1,44 @@ +name: Check types +on: [pull_request] +env: + NODE_VERSION: '18' + PYTHON_VERSION: '3.9' + +permissions: + contents: read + +jobs: + typecheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + id: gitcheckout + - uses: actions/setup-python@v2 + with: + python-version: ${{ env.PYTHON_VERSION }} + - uses: actions/setup-node@v3 + with: + node-version: ${{ env.NODE_VERSION }} + - name: Install python deps + id: pydepends + if: steps.gitcheckout.outcome == 'success' + run: | + python3 -m venv /home/runner/work/app + mkdir -p /home/runner/work/app/src/ckanext-gcnotify + cp -R . /home/runner/work/app/src/ckanext-gcnotify + source /home/runner/work/app/bin/activate + pip install --upgrade setuptools==70.0.0 + pip install --upgrade pip==23.2.1 + pip install -e 'git+https://github.com/open-data/ckan@canada-v2.10#egg=ckan' -r 'https://raw.githubusercontent.com/open-data/ckan/canada-v2.10/requirement-setuptools.txt' -r 'https://raw.githubusercontent.com/open-data/ckan/canada-v2.10/requirements.txt' -r 'https://raw.githubusercontent.com/open-data/ckan/canada-v2.10/dev-requirements.txt' + pip install -e /home/runner/work/app/src/ckanext-gcnotify/. -r /home/runner/work/app/src/ckanext-gcnotify/requirements.txt -r /home/runner/work/app/src/ckanext-gcnotify/test-requirements.txt + find /home/runner/work/app -name '*.pyc' -delete + - name: Install node deps + if: steps.pydepends.outcome == 'success' + run: | + cd /home/runner/work/app/src/ckanext-gcnotify + npm ci + - name: Check types + if: steps.pydepends.outcome == 'success' + run: | + cd /home/runner/work/app/src/ckanext-gcnotify + npx pyright diff --git a/ckanext/gcnotify/mailer.py b/ckanext/gcnotify/mailer.py index 2eb7443..6d30765 100644 --- a/ckanext/gcnotify/mailer.py +++ b/ckanext/gcnotify/mailer.py @@ -1,3 +1,6 @@ +from typing import Dict, Any, Optional, List +from ckan.model import User + from ckan.lib.helpers import ckan_version, roles_translated from ckan.common import _, config, request @@ -7,73 +10,62 @@ import json -def get_template_id(action): - # type: (str) -> str|None - - template_ids = config.get('ckanext.gcnotify.template_ids') # type: dict|None +def get_template_id(action: str) -> str: + template_ids = config.get('ckanext.gcnotify.template_ids', '') if not template_ids: - template_ids = {} + template_ids = {} else: - template_ids = json.loads(template_ids) + template_ids = json.loads(template_ids) if action not in template_ids: - raise mailer.MailerException(_("No GC Notify template ID is set!")) + raise mailer.MailerException(_("No GC Notify template ID is set!")) - return template_ids.get(action) + template_id = template_ids.get(action) + if not isinstance(template_id, str): + raise mailer.MailerException(_("No GC Notify template ID is set!")) + return template_id -def send_reset_link(user): - # type: (ckan.model.User) -> None +def send_reset_link(user: 'User'): if not user.email: - raise mailer.MailerException(_("No recipient email address available!")) + raise mailer.MailerException(_("No recipient email address available!")) # use user ID, use user fullname if it is set user_name = user.name if user.fullname: - user_name = "%s (%s)" % (user.fullname, user.name) + user_name = "%s (%s)" % (user.fullname, user.name) # generate a user reset key, then get it mailer.create_reset_key(user) reset_link = mailer.get_reset_link(user) - send_email( - recipient=user.email, - template_id=get_template_id("send_reset_link"), - personalisation={ - "user_name": user_name, - "reset_link": reset_link - } - ) + send_email(recipient=user.email, + template_id=get_template_id("send_reset_link"), + personalisation={"user_name": user_name, + "reset_link": reset_link}) -def send_username_recovery(email, username_list): - # type: (str, list[str]) -> None - +def send_username_recovery(email: str, + username_list: List[str]): if not email: - raise mailer.MailerException(_("No recipient email address available!")) - - send_email( - recipient=email, - template_id=get_template_id("send_username_recovery"), - personalisation={ - "username_list": '\n'.join(username_list), - } - ) + raise mailer.MailerException(_("No recipient email address available!")) + send_email(recipient=email, + template_id=get_template_id("send_username_recovery"), + personalisation={"username_list": '\n'.join(username_list)}) -def send_invite(user, - group_dict=None, - role=None): - # type: (ckan.model.User,dict|None,str|None) -> None +def send_invite(user: 'User', + group_dict: Optional[Dict[str, Any]] = None, + role: Optional[str] = None): if not user.email: - raise mailer.MailerException(_("No recipient email address available!")) + raise mailer.MailerException(_("No recipient email address available!")) # use user ID, use user fullname if it is set user_name = user.name if user.fullname: - user_name = "%s (%s)" % (user.fullname, user.name) + user_name = "%s (%s)" % (user.fullname, user.name) # generate a user reset key, then get it mailer.create_reset_key(user) @@ -83,95 +75,71 @@ def send_invite(user, group_type = "N/A" group_title = "N/A" if group_dict: - group_type = (_('organization') if group_dict['is_organization'] - else _('group')) - group_title = group_dict.get('title') + group_type = (_('organization') if + group_dict['is_organization'] else _('group')) + group_title = group_dict.get('title') # get role name role_name = "N/A" if role: - role_name = roles_translated().get(role, _(role)) - - send_email( - recipient=user.email, - template_id=get_template_id("send_invite"), - personalisation={ - "user_name": user_name, - "group_type": group_type, - "group_title": group_title, - "role_name": role_name, - "reset_link": reset_link - } - ) - - -def notify_ckan_user_create(email, - fullname, - username, - phoneno, - dept): - # type: (str, str, str, str, str) -> None - - ### - # send email to canada.notification_new_user_email config if it exists - ### - if 'canada.notification_new_user_email' in config: - - recipient_name = config.get( - 'canada.notification_new_user_name', - config['canada.notification_new_user_email'] - ) - - recipient_address = config['canada.notification_new_user_email'] - - # use user ID, use user fullname if it is set - user_name = username - if fullname: - user_name = "%s (%s)" % (fullname, username) - - send_email( - recipient=recipient_address, - template_id=get_template_id("new_user_admin_note"), - personalisation={ - "admin_name": recipient_name, - "user_name": user_name, - "email_address": email, - "phone_number": phoneno or "N/A", - "department": dept - } - ) - - ### - # send email to form post values - ### - send_email( - recipient=email, - template_id=get_template_id("new_user_note"), - personalisation={ - "user_name": user_name - } - ) - - -def notify_lockout(user, lockout_timeout): - # type: (ckan.model.User,int) -> None - + role_name = roles_translated().get(role, _(role)) + + send_email(recipient=user.email, + template_id=get_template_id("send_invite"), + personalisation={"user_name": user_name, + "group_type": group_type, + "group_title": group_title, + "role_name": role_name, + "reset_link": reset_link}) + + +def notify_ckan_user_create(email: str, + fullname: str, + username: str, + phoneno: str, + dept: str): + """ + Send email to canada.notification_new_user_email config if it exists + """ + if 'canada.notification_new_user_email' in config: + + recipient_name = config.get( + 'canada.notification_new_user_name', + config['canada.notification_new_user_email'] + ) + + recipient_address = config['canada.notification_new_user_email'] + + # use user ID, use user fullname if it is set + user_name = username + if fullname: + user_name = "%s (%s)" % (fullname, username) + + send_email(recipient=recipient_address, + template_id=get_template_id("new_user_admin_note"), + personalisation={"admin_name": recipient_name, + "user_name": user_name, + "email_address": email, + "phone_number": phoneno or "N/A", + "department": dept}) + + # send email to form post values + send_email(recipient=email, + template_id=get_template_id("new_user_note"), + personalisation={"user_name": user_name}) + + +def notify_lockout(user: 'User', lockout_timeout: int): if not user.email: - raise mailer.MailerException(_("No recipient email address available!")) - - send_email( - recipient=user.email, - template_id=get_template_id("notify_lockout"), - personalisation={ - "timeout": int(lockout_timeout / 60) - } - ) + raise mailer.MailerException(_("No recipient email address available!")) + send_email(recipient=user.email, + template_id=get_template_id("notify_lockout"), + personalisation={"timeout": int(lockout_timeout / 60)}) -def get_request_headers(headers): - # type: (dict) -> dict|None - secret_key = config.get('ckanext.gcnotify.secret_key') # type: str +def get_request_headers(headers: Dict[str, Any]) -> Dict[str, Any]: + secret_key = config.get('ckanext.gcnotify.secret_key') headers['Authorization'] = 'ApiKey-v1 {}'.format(secret_key) headers['Content-Type'] = 'application/json' @@ -180,48 +148,44 @@ def get_request_headers(headers): return headers -def get_api_endpoint(endpoint): - # type: (str) -> str|None - - base_uri = config.get('ckanext.gcnotify.base_url') # type: str +def get_api_endpoint(endpoint: str) -> str: + base_uri = config.get('ckanext.gcnotify.base_url') if not endpoint: - raise mailer.MailerException(_("No GC Notify API endpoint is set!")) + raise mailer.MailerException(_("No GC Notify API endpoint is set!")) return base_uri + endpoint -def get_request_body(recipient, - template_id, - personalisation): - # type: (str, str, dict) -> dict|None - +def get_request_body(recipient: str, + template_id: str, + personalisation: Dict[str, Any]) -> Dict[str, Any]: return { - 'email_address': recipient, - 'template_id': template_id, - 'personalisation': personalisation, - 'reference': request.url if request else config.get('ckan.site_id', 'N/A'), + 'email_address': recipient, + 'template_id': template_id, + 'personalisation': personalisation, + 'reference': request.url if request else config.get('ckan.site_id', 'N/A'), } -def send_email(recipient, - template_id, - personalisation={}, - headers={}, - attachments=None): - # type: (str, str, dict, dict, dict|None) -> None - +def send_email(recipient: str, + template_id: str, + personalisation: Optional[Dict[str, Any]] = None, + headers: Optional[Dict[str, Any]] = None, + attachments: Optional[Dict[str, Any]] = None): + if not personalisation: + personalisation = {} + if not headers: + headers = {} method = 'POST' - body_content = get_request_body(recipient,template_id,personalisation) + body_content = get_request_body(recipient, template_id, personalisation) header_content = get_request_headers(headers) endpoint = get_api_endpoint('/v2/notifications/email') - response = requests.request( - method=method, - url=endpoint, - json=body_content, - headers=header_content, - verify=True - ) + response = requests.request(method=method, + url=endpoint, + json=body_content, + headers=header_content, + verify=True) response.raise_for_status() diff --git a/ckanext/gcnotify/plugin.py b/ckanext/gcnotify/plugin.py index 19f1f63..46d07d1 100644 --- a/ckanext/gcnotify/plugin.py +++ b/ckanext/gcnotify/plugin.py @@ -2,7 +2,7 @@ import ckan.lib.mailer as mailer import ckanext.gcnotify.mailer as mailer_overrider -from ckan.common import config +from ckan.common import config, CKANConfig class GcnotifyPlugin(plugins.SingletonPlugin): @@ -14,11 +14,12 @@ class GcnotifyPlugin(plugins.SingletonPlugin): # IConfigurer - def update_config(self, config): - # type: (object) -> None - + def update_config(self, config: 'CKANConfig'): mailer.send_reset_link = mailer_overrider.send_reset_link mailer.send_invite = mailer_overrider.send_invite - mailer.notify_ckan_user_create = mailer_overrider.notify_ckan_user_create - mailer.send_username_recovery = mailer_overrider.send_username_recovery - mailer.notify_lockout = mailer_overrider.notify_lockout + setattr(mailer, 'notify_ckan_user_create', + mailer_overrider.notify_ckan_user_create) + setattr(mailer, 'send_username_recovery', + mailer_overrider.send_username_recovery) + setattr(mailer, 'notify_lockout', + mailer_overrider.notify_lockout) diff --git a/ckanext/gcnotify/tests/test_plugin.py b/ckanext/gcnotify/tests/test_plugin.py index 6709409..f1103d0 100644 --- a/ckanext/gcnotify/tests/test_plugin.py +++ b/ckanext/gcnotify/tests/test_plugin.py @@ -1,5 +1,5 @@ """Tests for plugin.py.""" -import ckanext.gcnotify.plugin as plugin + def test_plugin(): pass diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8335dba --- /dev/null +++ b/package-lock.json @@ -0,0 +1,66 @@ +{ + "name": "ckanext-gcnotify", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "pyright": "1.1.386" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/pyright": { + "version": "1.1.386", + "resolved": "https://registry.npmjs.org/pyright/-/pyright-1.1.386.tgz", + "integrity": "sha512-mpVeXb12CtDC5EIm6lbrEjD6tD/qIpRSmkYZB16Vl5xWgYvFcgAFKgbCBSiy9D1h4eQBmqAP/9oFatmZ2hjTPw==", + "dev": true, + "dependencies": { + "fsevents": "~2.3.3" + }, + "bin": { + "pyright": "index.js", + "pyright-langserver": "langserver.index.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + } + }, + "dependencies": { + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "pyright": { + "version": "1.1.386", + "resolved": "https://registry.npmjs.org/pyright/-/pyright-1.1.386.tgz", + "integrity": "sha512-mpVeXb12CtDC5EIm6lbrEjD6tD/qIpRSmkYZB16Vl5xWgYvFcgAFKgbCBSiy9D1h4eQBmqAP/9oFatmZ2hjTPw==", + "dev": true, + "requires": { + "fsevents": "~2.3.3" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..82830ee --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "ckanext-gcnotify", + "version": "1.0.0", + "description": "CKAN GC Notify Plugin", + "dependencies": {}, + "devDependencies": { + "pyright": "1.1.386" + }, + "scripts": {}, + "repository": { + "type": "git", + "url": "git+https://github.com/open-data/ckanext-gcnotify.git" + }, + "keywords": [], + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/open-data/ckanext-gcnotify/issues" + }, + "homepage": "https://github.com/open-data/ckanext-gcnotify#readme" +} diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..3b8723a --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,74 @@ +[tool.pyright] +pythonVersion = "3.7" +include = ["ckanext"] +exclude = [ + "**/tests", + "**/migration", +] +extraPaths = [ + "../../lib/python3.9/site-packages", + "../.", + "../ckan", + "../ckanext-gcnotify", +] +strict = [] +strictParameterNoneValue = true +reportFunctionMemberAccess = true +reportMissingImports = true +reportMissingModuleSource = true +reportMissingTypeStubs = false +reportImportCycles = false +reportUnusedImport = true +reportUnusedClass = true +reportUnusedFunction = true +reportUnusedVariable = true +reportDuplicateImport = true +reportOptionalSubscript = true +reportOptionalMemberAccess = true +reportOptionalCall = true +reportOptionalIterable = true +reportOptionalContextManager = true +reportOptionalOperand = true +reportTypedDictNotRequiredAccess = false +reportConstantRedefinition = true +reportIncompatibleMethodOverride = false +reportIncompatibleVariableOverride = true +reportOverlappingOverload = true +reportUntypedFunctionDecorator = false +reportUnknownParameterType = true +reportUnknownArgumentType = false +reportUnknownLambdaType = false +reportUnknownMemberType = false +reportMissingTypeArgument = true +reportInvalidTypeVarUse = true +reportCallInDefaultInitializer = true +reportUnknownVariableType = false +reportUntypedBaseClass = true +reportUnnecessaryIsInstance = true +reportUnnecessaryCast = true +reportUnnecessaryComparison = true +reportAssertAlwaysTrue = true +reportSelfClsParameterName = true +reportUnusedCallResult = false +useLibraryCodeForTypes = true +reportGeneralTypeIssues = true +reportPropertyTypeMismatch = true +reportWildcardImportFromLibrary = true +reportUntypedClassDecorator = false +reportUntypedNamedTuple = true +reportPrivateUsage = false +reportPrivateImportUsage = true +reportInconsistentConstructor = true +reportMissingSuperCall = false +reportUninitializedInstanceVariable = false +reportInvalidStringEscapeSequence = true +reportMissingParameterType = true +reportImplicitStringConcatenation = false +reportUndefinedVariable = true +reportUnboundVariable = true +reportInvalidStubStatement = true +reportIncompleteStub = true +reportUnsupportedDunderAll = true +reportUnusedCoroutine = true +reportUnnecessaryTypeIgnoreComment = true +reportMatchNotExhaustive = true diff --git a/setup.cfg b/setup.cfg index ac2e215..b9b5e55 100644 --- a/setup.cfg +++ b/setup.cfg @@ -19,3 +19,12 @@ previous = true domain = ckanext-gcnotify directory = ckanext/gcnotify/i18n statistics = true + +[flake8] +max-complexity = 100 +max-line-length = 88 +count = true +exit-zero = true +statistics = true +per-file-ignores = + ckanext/gcnotify/tests/*:E501 diff --git a/setup.py b/setup.py index 7d66b29..3b84f9b 100644 --- a/setup.py +++ b/setup.py @@ -39,7 +39,8 @@ 'Development Status :: 4 - Beta', # Pick your license as you wish (should match "license" above) - 'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)', + 'License :: OSI Approved :: GNU Affero General ' + 'Public License v3 or later (AGPLv3+)', # Specify the Python versions you support here. In particular, ensure # that you indicate whether you support Python 2, Python 3 or both. @@ -59,7 +60,8 @@ # CKAN extensions should not list dependencies here, but in a separate # ``requirements.txt`` file. # - # http://docs.ckan.org/en/latest/extensions/best-practices.html#add-third-party-libraries-to-requirements-txt + # http://docs.ckan.org/en/latest/extensions/best-practices.html# + # add-third-party-libraries-to-requirements-txt ], # If there are data files included in your packages that need to be @@ -71,7 +73,8 @@ # Although 'package_data' is the preferred approach, in some case you may # need to place data files outside of your packages. - # see http://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files + # see http://docs.python.org/3.4/distutils/setupscript.html# + # installing-additional-files # In this case, 'data_file' will be installed into '/my_data' data_files=[], From 6307be82d3135fc35814a921aa6f1e840d0f76ac Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Tue, 7 Jan 2025 19:55:29 +0000 Subject: [PATCH 2/5] feat(misc): changelog; - Added change log file. --- changes/6.changes | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/6.changes diff --git a/changes/6.changes b/changes/6.changes new file mode 100644 index 0000000..d09cc07 --- /dev/null +++ b/changes/6.changes @@ -0,0 +1 @@ +Refactor code to meet CKAN and Python coding standards. From fe3532321e49a76165bde78e01e285f57e456b28 Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Tue, 7 Jan 2025 20:22:53 +0000 Subject: [PATCH 3/5] fix(github): workflow; - Fix pyright workflow. --- .github/workflows/pyright.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pyright.yml b/.github/workflows/pyright.yml index 9173fe9..ba1f18e 100644 --- a/.github/workflows/pyright.yml +++ b/.github/workflows/pyright.yml @@ -30,7 +30,7 @@ jobs: pip install --upgrade setuptools==70.0.0 pip install --upgrade pip==23.2.1 pip install -e 'git+https://github.com/open-data/ckan@canada-v2.10#egg=ckan' -r 'https://raw.githubusercontent.com/open-data/ckan/canada-v2.10/requirement-setuptools.txt' -r 'https://raw.githubusercontent.com/open-data/ckan/canada-v2.10/requirements.txt' -r 'https://raw.githubusercontent.com/open-data/ckan/canada-v2.10/dev-requirements.txt' - pip install -e /home/runner/work/app/src/ckanext-gcnotify/. -r /home/runner/work/app/src/ckanext-gcnotify/requirements.txt -r /home/runner/work/app/src/ckanext-gcnotify/test-requirements.txt + pip install -e /home/runner/work/app/src/ckanext-gcnotify/. -r /home/runner/work/app/src/ckanext-gcnotify/requirements.txt -r /home/runner/work/app/src/ckanext-gcnotify/dev-requirements.txt find /home/runner/work/app -name '*.pyc' -delete - name: Install node deps if: steps.pydepends.outcome == 'success' From 67f38aed2c885d380c83984a03e378509feb0eb3 Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Fri, 17 Jan 2025 20:03:10 +0000 Subject: [PATCH 4/5] fix(github): ckan fork; - Update ckan fork to master for pyright. --- .github/workflows/pyright.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pyright.yml b/.github/workflows/pyright.yml index ba1f18e..4f36411 100644 --- a/.github/workflows/pyright.yml +++ b/.github/workflows/pyright.yml @@ -29,7 +29,7 @@ jobs: source /home/runner/work/app/bin/activate pip install --upgrade setuptools==70.0.0 pip install --upgrade pip==23.2.1 - pip install -e 'git+https://github.com/open-data/ckan@canada-v2.10#egg=ckan' -r 'https://raw.githubusercontent.com/open-data/ckan/canada-v2.10/requirement-setuptools.txt' -r 'https://raw.githubusercontent.com/open-data/ckan/canada-v2.10/requirements.txt' -r 'https://raw.githubusercontent.com/open-data/ckan/canada-v2.10/dev-requirements.txt' + pip install -e 'git+https://github.com/ckan/ckan@master#egg=ckan' -r 'https://raw.githubusercontent.com/ckan/ckan/master/requirements.txt' -r 'https://raw.githubusercontent.com/ckan/ckan/master/dev-requirements.txt' pip install -e /home/runner/work/app/src/ckanext-gcnotify/. -r /home/runner/work/app/src/ckanext-gcnotify/requirements.txt -r /home/runner/work/app/src/ckanext-gcnotify/dev-requirements.txt find /home/runner/work/app -name '*.pyc' -delete - name: Install node deps From eff1b332069add075a6c48862c7bb55eb93aed72 Mon Sep 17 00:00:00 2001 From: Jesse Vickery Date: Fri, 17 Jan 2025 20:38:53 +0000 Subject: [PATCH 5/5] fix(github): setuptools; - Upgrade setuptools. --- .github/workflows/pyright.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pyright.yml b/.github/workflows/pyright.yml index 4f36411..663d3f3 100644 --- a/.github/workflows/pyright.yml +++ b/.github/workflows/pyright.yml @@ -31,6 +31,7 @@ jobs: pip install --upgrade pip==23.2.1 pip install -e 'git+https://github.com/ckan/ckan@master#egg=ckan' -r 'https://raw.githubusercontent.com/ckan/ckan/master/requirements.txt' -r 'https://raw.githubusercontent.com/ckan/ckan/master/dev-requirements.txt' pip install -e /home/runner/work/app/src/ckanext-gcnotify/. -r /home/runner/work/app/src/ckanext-gcnotify/requirements.txt -r /home/runner/work/app/src/ckanext-gcnotify/dev-requirements.txt + pip install --upgrade setuptools==44.1.0 find /home/runner/work/app -name '*.pyc' -delete - name: Install node deps if: steps.pydepends.outcome == 'success'