winipedia-utils 0.5.22__py3-none-any.whl → 0.7.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of winipedia-utils might be problematic. Click here for more details.
- winipedia_utils/artifacts/build.py +27 -0
- winipedia_utils/dev/artifacts/build.py +62 -0
- winipedia_utils/{text → dev/configs/base}/config.py +5 -5
- winipedia_utils/{git/gitignore/config.py → dev/configs/gitignore.py} +2 -2
- winipedia_utils/{git/pre_commit/config.py → dev/configs/pre_commit.py} +5 -5
- winipedia_utils/{projects/poetry/config.py → dev/configs/pyproject.py} +82 -16
- winipedia_utils/{testing/config.py → dev/configs/testing.py} +7 -4
- winipedia_utils/dev/configs/workflows/base/base.py +907 -0
- winipedia_utils/dev/configs/workflows/health_check.py +69 -0
- winipedia_utils/dev/configs/workflows/publish.py +51 -0
- winipedia_utils/dev/configs/workflows/release.py +91 -0
- winipedia_utils/dev/git/github/repo/__init__.py +1 -0
- winipedia_utils/{git → dev/git}/github/repo/protect.py +5 -5
- winipedia_utils/{git → dev/git}/pre_commit/hooks.py +3 -63
- winipedia_utils/{git → dev/git}/pre_commit/run_hooks.py +8 -10
- winipedia_utils/dev/projects/poetry/dev_deps.py +21 -0
- winipedia_utils/{projects → dev/projects}/poetry/poetry.py +2 -2
- winipedia_utils/{projects → dev/projects}/project.py +6 -7
- winipedia_utils/dev/testing/__init__.py +1 -0
- winipedia_utils/{testing → dev/testing}/convention.py +1 -1
- winipedia_utils/{testing → dev/testing}/create_tests.py +14 -14
- winipedia_utils/dev/testing/tests/__init__.py +1 -0
- winipedia_utils/dev/testing/tests/base/__init__.py +1 -0
- winipedia_utils/dev/testing/tests/base/fixtures/__init__.py +1 -0
- winipedia_utils/{testing → dev/testing}/tests/base/fixtures/fixture.py +1 -1
- winipedia_utils/dev/testing/tests/base/fixtures/scopes/__init__.py +1 -0
- winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/class_.py +2 -2
- winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/module.py +2 -2
- winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/session.py +10 -10
- winipedia_utils/dev/testing/tests/base/utils/__init__.py +1 -0
- winipedia_utils/dev/testing/tests/base/utils/utils.py +1 -0
- winipedia_utils/{testing → dev/testing}/tests/conftest.py +2 -2
- winipedia_utils/{testing/tests/base/utils → dev/testing}/utils.py +7 -24
- winipedia_utils/setup.py +9 -5
- winipedia_utils/utils/__init__.py +1 -0
- winipedia_utils/utils/data/dataframe/__init__.py +1 -0
- winipedia_utils/{data → utils/data}/dataframe/cleaning.py +1 -1
- winipedia_utils/utils/data/structures/__init__.py +1 -0
- winipedia_utils/{text → utils/data/structures/text}/string.py +36 -3
- winipedia_utils/utils/git/__init__.py +1 -0
- winipedia_utils/utils/git/github/__init__.py +1 -0
- winipedia_utils/{git → utils/git}/github/github.py +1 -1
- winipedia_utils/utils/git/github/repo/__init__.py +1 -0
- winipedia_utils/{git → utils/git}/github/repo/repo.py +1 -1
- winipedia_utils/{git → utils/git}/gitignore/gitignore.py +2 -2
- winipedia_utils/{concurrent → utils/iterating/concurrent}/concurrent.py +4 -4
- winipedia_utils/{concurrent → utils/iterating/concurrent}/multiprocessing.py +2 -2
- winipedia_utils/{concurrent → utils/iterating/concurrent}/multithreading.py +1 -1
- winipedia_utils/{logging → utils/logging}/logger.py +1 -1
- winipedia_utils/{modules → utils/modules}/class_.py +5 -5
- winipedia_utils/{modules → utils/modules}/function.py +2 -2
- winipedia_utils/{modules → utils/modules}/module.py +8 -5
- winipedia_utils/{modules → utils/modules}/package.py +9 -36
- winipedia_utils/{oop → utils/oop}/mixins/meta.py +4 -4
- winipedia_utils/{oop → utils/oop}/mixins/mixin.py +2 -2
- winipedia_utils/{os → utils/os}/os.py +2 -2
- winipedia_utils/utils/resources/__init__.py +1 -0
- winipedia_utils/utils/resources/svgs/__init__.py +1 -0
- winipedia_utils/{resources → utils/resources}/svgs/svg.py +1 -1
- winipedia_utils/utils/testing/__init__.py +1 -0
- winipedia_utils/{testing → utils/testing}/assertions.py +18 -0
- winipedia_utils/{testing → utils/testing}/skip.py +1 -1
- {winipedia_utils-0.5.22.dist-info → winipedia_utils-0.7.1.dist-info}/METADATA +34 -33
- winipedia_utils-0.7.1.dist-info/RECORD +109 -0
- winipedia_utils/git/github/workflows/base/base.py +0 -377
- winipedia_utils/git/github/workflows/health_check.py +0 -80
- winipedia_utils/git/github/workflows/publish.py +0 -49
- winipedia_utils/git/github/workflows/release.py +0 -55
- winipedia_utils/testing/__init__.py +0 -1
- winipedia_utils/testing/tests/__init__.py +0 -1
- winipedia_utils/testing/tests/base/__init__.py +0 -1
- winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -1
- winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -1
- winipedia_utils/testing/tests/base/utils/__init__.py +0 -1
- winipedia_utils-0.5.22.dist-info/RECORD +0 -95
- /winipedia_utils/{data/dataframe → artifacts}/__init__.py +0 -0
- /winipedia_utils/{data/structures → dev}/__init__.py +0 -0
- /winipedia_utils/{git/github → dev/artifacts}/__init__.py +0 -0
- /winipedia_utils/{git/github/repo → dev/configs}/__init__.py +0 -0
- /winipedia_utils/{git/github/workflows → dev/configs}/base/__init__.py +0 -0
- /winipedia_utils/{git/github → dev/configs}/workflows/__init__.py +0 -0
- /winipedia_utils/{resources → dev/configs/workflows/base}/__init__.py +0 -0
- /winipedia_utils/{git → dev/git}/__init__.py +0 -0
- /winipedia_utils/{resources/svgs → dev/git/github}/__init__.py +0 -0
- /winipedia_utils/{git → dev/git}/pre_commit/__init__.py +0 -0
- /winipedia_utils/{projects → dev/projects}/__init__.py +0 -0
- /winipedia_utils/{projects → dev/projects}/poetry/__init__.py +0 -0
- /winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/function.py +0 -0
- /winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/package.py +0 -0
- /winipedia_utils/{data → utils/data}/__init__.py +0 -0
- /winipedia_utils/{data → utils/data}/structures/dicts.py +0 -0
- /winipedia_utils/{text → utils/data/structures/text}/__init__.py +0 -0
- /winipedia_utils/{git → utils/git}/gitignore/__init__.py +0 -0
- /winipedia_utils/{iterating → utils/iterating}/__init__.py +0 -0
- /winipedia_utils/{concurrent → utils/iterating/concurrent}/__init__.py +0 -0
- /winipedia_utils/{iterating → utils/iterating}/iterate.py +0 -0
- /winipedia_utils/{logging → utils/logging}/__init__.py +0 -0
- /winipedia_utils/{logging → utils/logging}/ansi.py +0 -0
- /winipedia_utils/{logging → utils/logging}/config.py +0 -0
- /winipedia_utils/{modules → utils/modules}/__init__.py +0 -0
- /winipedia_utils/{modules → utils/modules}/inspection.py +0 -0
- /winipedia_utils/{oop → utils/oop}/__init__.py +0 -0
- /winipedia_utils/{oop → utils/oop}/mixins/__init__.py +0 -0
- /winipedia_utils/{os → utils/os}/__init__.py +0 -0
- /winipedia_utils/{resources → utils/resources}/svgs/delete_garbage_can.svg +0 -0
- /winipedia_utils/{resources → utils/resources}/svgs/download_arrow.svg +0 -0
- /winipedia_utils/{resources → utils/resources}/svgs/exit_fullscreen_icon.svg +0 -0
- /winipedia_utils/{resources → utils/resources}/svgs/fullscreen_icon.svg +0 -0
- /winipedia_utils/{resources → utils/resources}/svgs/menu_icon.svg +0 -0
- /winipedia_utils/{resources → utils/resources}/svgs/pause_icon.svg +0 -0
- /winipedia_utils/{resources → utils/resources}/svgs/play_icon.svg +0 -0
- /winipedia_utils/{resources → utils/resources}/svgs/plus_icon.svg +0 -0
- /winipedia_utils/{security → utils/security}/__init__.py +0 -0
- /winipedia_utils/{security → utils/security}/cryptography.py +0 -0
- /winipedia_utils/{security → utils/security}/keyring.py +0 -0
- /winipedia_utils/{testing → utils/testing}/fixtures.py +0 -0
- {winipedia_utils-0.5.22.dist-info → winipedia_utils-0.7.1.dist-info}/WHEEL +0 -0
- {winipedia_utils-0.5.22.dist-info → winipedia_utils-0.7.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""Contains the pull request workflow.
|
|
2
|
+
|
|
3
|
+
This workflow is used to run tests on pull requests.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from winipedia_utils.dev.configs.workflows.base.base import Workflow
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class HealthCheckWorkflow(Workflow):
|
|
12
|
+
"""Pull request workflow.
|
|
13
|
+
|
|
14
|
+
This workflow is triggered by a pull request.
|
|
15
|
+
It runs tests on the pull request.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
@classmethod
|
|
19
|
+
def get_workflow_triggers(cls) -> dict[str, Any]:
|
|
20
|
+
"""Get the workflow triggers."""
|
|
21
|
+
triggers = super().get_workflow_triggers()
|
|
22
|
+
triggers.update(cls.on_pull_request())
|
|
23
|
+
triggers.update(cls.on_schedule(cron="0 6 * * *"))
|
|
24
|
+
return triggers
|
|
25
|
+
|
|
26
|
+
@classmethod
|
|
27
|
+
def get_jobs(cls) -> dict[str, Any]:
|
|
28
|
+
"""Get the workflow jobs."""
|
|
29
|
+
jobs: dict[str, Any] = {}
|
|
30
|
+
jobs.update(cls.job_health_check_matrix())
|
|
31
|
+
jobs.update(cls.job_health_check())
|
|
32
|
+
return jobs
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def job_health_check_matrix(cls) -> dict[str, Any]:
|
|
36
|
+
"""Get the health check matrix job."""
|
|
37
|
+
return cls.get_job(
|
|
38
|
+
job_func=cls.job_health_check_matrix,
|
|
39
|
+
strategy=cls.strategy_matrix_os_and_python_version(),
|
|
40
|
+
runs_on=cls.insert_matrix_os(),
|
|
41
|
+
steps=cls.steps_health_check_matrix(),
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def job_health_check(cls) -> dict[str, Any]:
|
|
46
|
+
"""Get the health check job."""
|
|
47
|
+
return cls.get_job(
|
|
48
|
+
job_func=cls.job_health_check,
|
|
49
|
+
needs=[cls.make_id_from_func(cls.job_health_check_matrix)],
|
|
50
|
+
steps=cls.steps_aggregate_matrix_results(),
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def steps_health_check_matrix(cls) -> list[dict[str, Any]]:
|
|
55
|
+
"""Get the health check matrix steps."""
|
|
56
|
+
return [
|
|
57
|
+
*cls.steps_core_matrix_setup(
|
|
58
|
+
python_version=cls.insert_matrix_python_version()
|
|
59
|
+
),
|
|
60
|
+
cls.step_protect_repository(),
|
|
61
|
+
cls.step_run_pre_commit_hooks(),
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
@classmethod
|
|
65
|
+
def steps_aggregate_matrix_results(cls) -> list[dict[str, Any]]:
|
|
66
|
+
"""Get the aggregate matrix results step."""
|
|
67
|
+
return [
|
|
68
|
+
cls.step_aggregate_matrix_results(),
|
|
69
|
+
]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""Contains the publish workflow.
|
|
2
|
+
|
|
3
|
+
This workflow is used to publish the package to PyPI with poetry.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from winipedia_utils.dev.configs.workflows.base.base import Workflow
|
|
9
|
+
from winipedia_utils.dev.configs.workflows.release import ReleaseWorkflow
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class PublishWorkflow(Workflow):
|
|
13
|
+
"""Publish workflow.
|
|
14
|
+
|
|
15
|
+
This workflow is triggered by the release workflow.
|
|
16
|
+
It publishes the package to PyPI with poetry.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def get_workflow_triggers(cls) -> dict[str, Any]:
|
|
21
|
+
"""Get the workflow triggers."""
|
|
22
|
+
triggers = super().get_workflow_triggers()
|
|
23
|
+
triggers.update(
|
|
24
|
+
cls.on_workflow_run(workflows=[ReleaseWorkflow.get_workflow_name()])
|
|
25
|
+
)
|
|
26
|
+
return triggers
|
|
27
|
+
|
|
28
|
+
@classmethod
|
|
29
|
+
def get_jobs(cls) -> dict[str, Any]:
|
|
30
|
+
"""Get the workflow jobs."""
|
|
31
|
+
jobs: dict[str, Any] = {}
|
|
32
|
+
jobs.update(cls.job_publish())
|
|
33
|
+
return jobs
|
|
34
|
+
|
|
35
|
+
@classmethod
|
|
36
|
+
def job_publish(cls) -> dict[str, Any]:
|
|
37
|
+
"""Get the publish job."""
|
|
38
|
+
return cls.get_job(
|
|
39
|
+
job_func=cls.job_publish,
|
|
40
|
+
steps=cls.steps_publish(),
|
|
41
|
+
if_condition=cls.if_workflow_run_is_success(),
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def steps_publish(cls) -> list[dict[str, Any]]:
|
|
46
|
+
"""Get the publish steps."""
|
|
47
|
+
return [
|
|
48
|
+
*cls.steps_core_setup(),
|
|
49
|
+
cls.step_add_pypi_token_to_poetry(),
|
|
50
|
+
cls.step_publish_to_pypi(),
|
|
51
|
+
]
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""Contains the release workflow.
|
|
2
|
+
|
|
3
|
+
This workflow is used to create a release on GitHub.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from winipedia_utils.dev.configs.workflows.health_check import HealthCheckWorkflow
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ReleaseWorkflow(HealthCheckWorkflow):
|
|
12
|
+
"""Release workflow.
|
|
13
|
+
|
|
14
|
+
This workflow is triggered by a push to the main branch.
|
|
15
|
+
It creates a tag for the release and builds a changelog.
|
|
16
|
+
With tag and changelog it creates a release on GitHub
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def get_workflow_triggers(cls) -> dict[str, Any]:
|
|
21
|
+
"""Get the workflow triggers."""
|
|
22
|
+
triggers = super().get_workflow_triggers()
|
|
23
|
+
triggers.update(cls.on_push())
|
|
24
|
+
triggers.update(cls.on_schedule(cron="0 6 * * 2"))
|
|
25
|
+
return triggers
|
|
26
|
+
|
|
27
|
+
@classmethod
|
|
28
|
+
def get_permissions(cls) -> dict[str, Any]:
|
|
29
|
+
"""Get the workflow permissions."""
|
|
30
|
+
permissions = super().get_permissions()
|
|
31
|
+
permissions["contents"] = "write"
|
|
32
|
+
return permissions
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def get_jobs(cls) -> dict[str, Any]:
|
|
36
|
+
"""Get the workflow jobs."""
|
|
37
|
+
jobs = super().get_jobs()
|
|
38
|
+
last_job_name = list(jobs.keys())[-1]
|
|
39
|
+
jobs.update(cls.job_build(needs=[last_job_name]))
|
|
40
|
+
jobs.update(cls.job_release())
|
|
41
|
+
return jobs
|
|
42
|
+
|
|
43
|
+
@classmethod
|
|
44
|
+
def job_build(cls, needs: list[str] | None = None) -> dict[str, Any]:
|
|
45
|
+
"""Get the build job."""
|
|
46
|
+
return cls.get_job(
|
|
47
|
+
job_func=cls.job_build,
|
|
48
|
+
needs=needs,
|
|
49
|
+
strategy=cls.strategy_matrix_os(),
|
|
50
|
+
runs_on=cls.insert_matrix_os(),
|
|
51
|
+
steps=cls.steps_build(),
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def job_release(cls) -> dict[str, Any]:
|
|
56
|
+
"""Get the release job."""
|
|
57
|
+
return cls.get_job(
|
|
58
|
+
job_func=cls.job_release,
|
|
59
|
+
needs=[cls.make_id_from_func(cls.job_build)],
|
|
60
|
+
steps=cls.steps_release(),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
@classmethod
|
|
64
|
+
def steps_build(cls) -> list[dict[str, Any]]:
|
|
65
|
+
"""Get the build steps."""
|
|
66
|
+
if not cls.BUILD_SCRIPT_PATH.exists():
|
|
67
|
+
return [cls.step_no_build_script()]
|
|
68
|
+
return [
|
|
69
|
+
*cls.steps_core_matrix_setup(),
|
|
70
|
+
cls.step_build_artifacts(),
|
|
71
|
+
cls.step_upload_artifacts(),
|
|
72
|
+
]
|
|
73
|
+
|
|
74
|
+
@classmethod
|
|
75
|
+
def steps_release(cls) -> list[dict[str, Any]]:
|
|
76
|
+
"""Get the release steps."""
|
|
77
|
+
return [
|
|
78
|
+
*cls.steps_core_setup(repo_token=True),
|
|
79
|
+
cls.step_install_python_dependencies(),
|
|
80
|
+
cls.step_setup_keyring(),
|
|
81
|
+
cls.step_setup_git(),
|
|
82
|
+
cls.step_add_version_patch(),
|
|
83
|
+
cls.step_run_pre_commit_hooks(),
|
|
84
|
+
cls.step_commit_added_changes(),
|
|
85
|
+
cls.step_push_commits(),
|
|
86
|
+
cls.step_create_and_push_tag(),
|
|
87
|
+
cls.step_extract_version(),
|
|
88
|
+
cls.step_download_artifacts(),
|
|
89
|
+
cls.step_build_changelog(),
|
|
90
|
+
cls.step_create_release(),
|
|
91
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""__init__ module."""
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
from typing import Any
|
|
4
4
|
|
|
5
|
-
from winipedia_utils.
|
|
6
|
-
from winipedia_utils.
|
|
5
|
+
from winipedia_utils.dev.configs.pyproject import PyprojectConfigFile
|
|
6
|
+
from winipedia_utils.dev.configs.workflows.health_check import HealthCheckWorkflow
|
|
7
|
+
from winipedia_utils.utils.git.github.github import get_github_repo_token
|
|
8
|
+
from winipedia_utils.utils.git.github.repo.repo import (
|
|
7
9
|
DEFAULT_BRANCH,
|
|
8
10
|
DEFAULT_RULESET_NAME,
|
|
9
11
|
create_or_update_ruleset,
|
|
10
12
|
get_repo,
|
|
11
13
|
get_rules_payload,
|
|
12
14
|
)
|
|
13
|
-
from winipedia_utils.
|
|
14
|
-
from winipedia_utils.modules.package import get_src_package
|
|
15
|
-
from winipedia_utils.projects.poetry.config import PyprojectConfigFile
|
|
15
|
+
from winipedia_utils.utils.modules.package import get_src_package
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def protect_repository() -> None:
|
|
@@ -7,79 +7,19 @@ strings are the arguments to the command. These funcs will be called by
|
|
|
7
7
|
run_hooks.py, which will pass the returned list to subprocess.run().
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
from winipedia_utils.projects.poetry.poetry import (
|
|
10
|
+
from winipedia_utils.dev.projects.poetry.poetry import (
|
|
11
11
|
POETRY_ARG,
|
|
12
12
|
get_poetry_run_module_args,
|
|
13
13
|
)
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
def patch_version() -> list[str]:
|
|
17
|
-
"""Patch the version in pyproject.toml.
|
|
18
|
-
|
|
19
|
-
This function returns the input for subprocess.run() to patch the version
|
|
20
|
-
in pyproject.toml.
|
|
21
|
-
"""
|
|
22
|
-
return [POETRY_ARG, "version", "patch"]
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def add_version_patch_to_git() -> list[str]:
|
|
26
|
-
"""Add the version patch to git.
|
|
27
|
-
|
|
28
|
-
This function returns the input for subprocess.run() to add the version
|
|
29
|
-
patch to git, so that the hook does not fail bc the file was changed.
|
|
30
|
-
"""
|
|
31
|
-
return ["git", "add", "pyproject.toml"]
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def update_package_manager() -> list[str]:
|
|
35
|
-
"""Update the package manager.
|
|
36
|
-
|
|
37
|
-
This function returns the input for subprocess.run() to update the package
|
|
38
|
-
manager.
|
|
39
|
-
"""
|
|
40
|
-
return [POETRY_ARG, "self", "update"]
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def install_dependencies_with_dev() -> list[str]:
|
|
44
|
-
"""Install all dependencies.
|
|
45
|
-
|
|
46
|
-
This function returns the input for subprocess.run() to install all dependencies.
|
|
47
|
-
"""
|
|
48
|
-
return [POETRY_ARG, "install", "--with", "dev"]
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def update_dependencies_with_dev() -> list[str]:
|
|
52
|
-
"""Update all dependencies.
|
|
53
|
-
|
|
54
|
-
This function returns the input for subprocess.run() to update all dependencies.
|
|
55
|
-
"""
|
|
56
|
-
return [POETRY_ARG, "update", "--with", "dev"]
|
|
57
|
-
|
|
58
|
-
|
|
59
16
|
def add_updates_to_git() -> list[str]:
|
|
60
17
|
"""Add the updated dependencies to git.
|
|
61
18
|
|
|
62
19
|
This function returns the input for subprocess.run() to add the updated
|
|
63
20
|
dependencies to git, so that the hook does not fail bc the file was changed.
|
|
64
21
|
"""
|
|
65
|
-
return ["git", "add", "pyproject.toml"]
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def lock_dependencies() -> list[str]:
|
|
69
|
-
"""Lock the dependencies.
|
|
70
|
-
|
|
71
|
-
This function returns the input for subprocess.run() to lock the dependencies.
|
|
72
|
-
"""
|
|
73
|
-
return [POETRY_ARG, "lock"]
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
def add_lock_file_to_git() -> list[str]:
|
|
77
|
-
"""Add the lock file to git.
|
|
78
|
-
|
|
79
|
-
This function returns the input for subprocess.run() to add the lock file
|
|
80
|
-
to git, so that the hook does not fail bc the file was changed.
|
|
81
|
-
"""
|
|
82
|
-
return ["git", "add", "poetry.lock"]
|
|
22
|
+
return ["git", "add", "pyproject.toml", "poetry.lock"]
|
|
83
23
|
|
|
84
24
|
|
|
85
25
|
def check_package_manager_configs() -> list[str]:
|
|
@@ -96,7 +36,7 @@ def create_missing_tests() -> list[str]:
|
|
|
96
36
|
|
|
97
37
|
This function returns the input for subprocess.run() to create all tests.
|
|
98
38
|
"""
|
|
99
|
-
from winipedia_utils.testing import ( # noqa: PLC0415 # avoid circular import
|
|
39
|
+
from winipedia_utils.dev.testing import ( # noqa: PLC0415 # avoid circular import
|
|
100
40
|
create_tests,
|
|
101
41
|
)
|
|
102
42
|
|
|
@@ -6,11 +6,11 @@ and should not be modified manually.
|
|
|
6
6
|
|
|
7
7
|
import sys
|
|
8
8
|
|
|
9
|
-
from winipedia_utils.git.pre_commit import hooks
|
|
10
|
-
from winipedia_utils.logging.ansi import GREEN, RED, RESET
|
|
11
|
-
from winipedia_utils.logging.logger import get_logger
|
|
12
|
-
from winipedia_utils.modules.function import get_all_functions_from_module
|
|
13
|
-
from winipedia_utils.os.os import run_subprocess
|
|
9
|
+
from winipedia_utils.dev.git.pre_commit import hooks
|
|
10
|
+
from winipedia_utils.utils.logging.ansi import GREEN, RED, RESET
|
|
11
|
+
from winipedia_utils.utils.logging.logger import get_logger
|
|
12
|
+
from winipedia_utils.utils.modules.function import get_all_functions_from_module
|
|
13
|
+
from winipedia_utils.utils.os.os import run_subprocess
|
|
14
14
|
|
|
15
15
|
logger = get_logger(__name__)
|
|
16
16
|
|
|
@@ -19,7 +19,6 @@ def run_hooks() -> None:
|
|
|
19
19
|
"""Import all funcs defined in hooks.py and runs them."""
|
|
20
20
|
hook_funcs = get_all_functions_from_module(hooks)
|
|
21
21
|
|
|
22
|
-
exit_code = 0
|
|
23
22
|
for hook_func in hook_funcs:
|
|
24
23
|
subprocess_args = hook_func()
|
|
25
24
|
result = run_subprocess(
|
|
@@ -44,7 +43,7 @@ Stderr:
|
|
|
44
43
|
|
|
45
44
|
---------------------------------------------------------------------------------------------
|
|
46
45
|
"""
|
|
47
|
-
|
|
46
|
+
|
|
48
47
|
# make the dashes always the same lentgth by adjusting to len of hook name
|
|
49
48
|
num_dashes = 50 - len(hook_func.__name__)
|
|
50
49
|
log_method(
|
|
@@ -53,6 +52,5 @@ Stderr:
|
|
|
53
52
|
"-" * num_dashes,
|
|
54
53
|
status_str,
|
|
55
54
|
)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
sys.exit(exit_code)
|
|
55
|
+
if not passed:
|
|
56
|
+
sys.exit(1)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""Contains a dict with the dev dependencies.
|
|
2
|
+
|
|
3
|
+
For poetry when winipedia_utils is a dependency.
|
|
4
|
+
winipedia_utils will add these automatically to the pyproject.toml file.
|
|
5
|
+
winipedia utils PyprojectConfigFile will auto dump the config here so it can access it
|
|
6
|
+
when being a dependency in another project.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
DEV_DEPENDENCIES: set[str] = {
|
|
10
|
+
"ruff",
|
|
11
|
+
"types-networkx",
|
|
12
|
+
"types-defusedxml",
|
|
13
|
+
"types-pyyaml",
|
|
14
|
+
"pytest",
|
|
15
|
+
"types-setuptools",
|
|
16
|
+
"pytest-mock",
|
|
17
|
+
"bandit",
|
|
18
|
+
"pre-commit",
|
|
19
|
+
"mypy",
|
|
20
|
+
"types-tqdm",
|
|
21
|
+
}
|
|
@@ -10,7 +10,7 @@ from typing import Literal
|
|
|
10
10
|
from packaging.specifiers import SpecifierSet
|
|
11
11
|
from packaging.version import Version
|
|
12
12
|
|
|
13
|
-
from winipedia_utils.logging.logger import get_logger
|
|
13
|
+
from winipedia_utils.utils.logging.logger import get_logger
|
|
14
14
|
|
|
15
15
|
logger = get_logger(__name__)
|
|
16
16
|
|
|
@@ -29,7 +29,7 @@ def get_script_from_args(args: Iterable[str]) -> str:
|
|
|
29
29
|
|
|
30
30
|
def get_run_python_module_args(module: ModuleType) -> list[str]:
|
|
31
31
|
"""Get the args to run a module."""
|
|
32
|
-
from winipedia_utils.modules.module import ( # noqa: PLC0415 # avoid circular import
|
|
32
|
+
from winipedia_utils.utils.modules.module import ( # noqa: PLC0415 # avoid circular import
|
|
33
33
|
make_obj_importpath,
|
|
34
34
|
)
|
|
35
35
|
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
"""Utilities for working with Python projects."""
|
|
2
2
|
|
|
3
|
-
from winipedia_utils.
|
|
4
|
-
from winipedia_utils.projects.poetry.config import (
|
|
5
|
-
PyprojectConfigFile, # avoid circular import
|
|
6
|
-
)
|
|
7
|
-
from winipedia_utils.text.config import (
|
|
3
|
+
from winipedia_utils.dev.configs.base.config import (
|
|
8
4
|
ConfigFile, # avoid circular import
|
|
9
5
|
)
|
|
6
|
+
from winipedia_utils.dev.configs.pyproject import (
|
|
7
|
+
PyprojectConfigFile, # avoid circular import
|
|
8
|
+
)
|
|
9
|
+
from winipedia_utils.utils.modules.module import create_module
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def create_project_root() -> None:
|
|
13
13
|
"""Create the project root."""
|
|
14
|
-
ConfigFile.init_config_files()
|
|
15
|
-
|
|
16
14
|
src_package_name = PyprojectConfigFile.get_package_name()
|
|
17
15
|
create_module(src_package_name, is_package=True)
|
|
16
|
+
ConfigFile.init_config_files()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""__init__ module."""
|
|
@@ -13,7 +13,7 @@ from collections.abc import Callable, Iterable
|
|
|
13
13
|
from types import ModuleType
|
|
14
14
|
from typing import Any
|
|
15
15
|
|
|
16
|
-
from winipedia_utils.modules.module import (
|
|
16
|
+
from winipedia_utils.utils.modules.module import (
|
|
17
17
|
get_isolated_obj_name,
|
|
18
18
|
import_obj_from_importpath,
|
|
19
19
|
make_obj_importpath,
|
|
@@ -9,31 +9,31 @@ NotImplementedError to indicate tests that need to be written.
|
|
|
9
9
|
from types import ModuleType
|
|
10
10
|
from typing import cast
|
|
11
11
|
|
|
12
|
-
from winipedia_utils.
|
|
12
|
+
from winipedia_utils.dev.configs.testing import ConftestConfigFile, ZeroTestConfigFile
|
|
13
|
+
from winipedia_utils.dev.testing import tests
|
|
14
|
+
from winipedia_utils.dev.testing.convention import (
|
|
15
|
+
get_test_obj_from_obj,
|
|
16
|
+
make_test_obj_importpath_from_obj,
|
|
17
|
+
make_test_obj_name,
|
|
18
|
+
reverse_make_test_obj_name,
|
|
19
|
+
)
|
|
20
|
+
from winipedia_utils.utils.modules.class_ import (
|
|
13
21
|
get_all_cls_from_module,
|
|
14
22
|
get_all_methods_from_cls,
|
|
15
23
|
)
|
|
16
|
-
from winipedia_utils.modules.function import get_all_functions_from_module
|
|
17
|
-
from winipedia_utils.modules.inspection import get_qualname_of_obj
|
|
18
|
-
from winipedia_utils.modules.module import (
|
|
24
|
+
from winipedia_utils.utils.modules.function import get_all_functions_from_module
|
|
25
|
+
from winipedia_utils.utils.modules.inspection import get_qualname_of_obj
|
|
26
|
+
from winipedia_utils.utils.modules.module import (
|
|
19
27
|
create_module,
|
|
20
28
|
get_isolated_obj_name,
|
|
21
29
|
get_module_content_as_str,
|
|
22
30
|
to_path,
|
|
23
31
|
)
|
|
24
|
-
from winipedia_utils.modules.package import (
|
|
32
|
+
from winipedia_utils.utils.modules.package import (
|
|
25
33
|
copy_package,
|
|
26
34
|
get_src_package,
|
|
27
35
|
walk_package,
|
|
28
36
|
)
|
|
29
|
-
from winipedia_utils.testing import tests
|
|
30
|
-
from winipedia_utils.testing.config import ConftestConfigFile, ZeroTestConfigFile
|
|
31
|
-
from winipedia_utils.testing.convention import (
|
|
32
|
-
get_test_obj_from_obj,
|
|
33
|
-
make_test_obj_importpath_from_obj,
|
|
34
|
-
make_test_obj_name,
|
|
35
|
-
reverse_make_test_obj_name,
|
|
36
|
-
)
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
def create_tests() -> None:
|
|
@@ -50,7 +50,7 @@ def create_tests_base() -> None:
|
|
|
50
50
|
"""Create the base test structure.
|
|
51
51
|
|
|
52
52
|
This function:
|
|
53
|
-
1. Creates a mirror of
|
|
53
|
+
1. Creates a mirror of testing.tests in the tests directory
|
|
54
54
|
2. Skips copying __init__.py file contents
|
|
55
55
|
3. Writes new __init__.py files for all packages
|
|
56
56
|
4. Creates a conftest.py file with the appropriate pytest plugin configuration
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""__init__ module."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""__init__ module."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""__init__ module."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""__init__ module."""
|
|
@@ -8,8 +8,8 @@ mechanism.
|
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
10
|
|
|
11
|
-
from winipedia_utils.testing.
|
|
12
|
-
from winipedia_utils.testing.
|
|
11
|
+
from winipedia_utils.dev.testing.utils import assert_no_untested_objs
|
|
12
|
+
from winipedia_utils.utils.testing.fixtures import autouse_class_fixture
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
@autouse_class_fixture
|
|
@@ -10,8 +10,8 @@ from typing import TYPE_CHECKING
|
|
|
10
10
|
|
|
11
11
|
import pytest
|
|
12
12
|
|
|
13
|
-
from winipedia_utils.testing.
|
|
14
|
-
from winipedia_utils.testing.
|
|
13
|
+
from winipedia_utils.dev.testing.utils import assert_no_untested_objs
|
|
14
|
+
from winipedia_utils.utils.testing.fixtures import autouse_module_fixture
|
|
15
15
|
|
|
16
16
|
if TYPE_CHECKING:
|
|
17
17
|
from types import ModuleType
|
|
@@ -10,21 +10,21 @@ from importlib import import_module
|
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
|
|
12
12
|
import winipedia_utils
|
|
13
|
-
from winipedia_utils.
|
|
14
|
-
|
|
15
|
-
get_src_package,
|
|
16
|
-
walk_package,
|
|
17
|
-
)
|
|
18
|
-
from winipedia_utils.projects.poetry.config import (
|
|
13
|
+
from winipedia_utils.dev.configs.base.config import ConfigFile
|
|
14
|
+
from winipedia_utils.dev.configs.pyproject import (
|
|
19
15
|
PyprojectConfigFile,
|
|
20
16
|
)
|
|
21
|
-
from winipedia_utils.testing.
|
|
22
|
-
from winipedia_utils.testing.convention import (
|
|
17
|
+
from winipedia_utils.dev.testing.convention import (
|
|
23
18
|
TESTS_PACKAGE_NAME,
|
|
24
19
|
make_test_obj_importpath_from_obj,
|
|
25
20
|
)
|
|
26
|
-
from winipedia_utils.
|
|
27
|
-
|
|
21
|
+
from winipedia_utils.utils.modules.package import (
|
|
22
|
+
find_packages,
|
|
23
|
+
get_src_package,
|
|
24
|
+
walk_package,
|
|
25
|
+
)
|
|
26
|
+
from winipedia_utils.utils.testing.assertions import assert_with_msg
|
|
27
|
+
from winipedia_utils.utils.testing.fixtures import autouse_session_fixture
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
@autouse_session_fixture
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""__init__ module."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Testing utilities."""
|
|
@@ -7,13 +7,13 @@ and adds them to pytest_plugins. This way defining reusable fixtures is easy.
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
9
|
import winipedia_utils
|
|
10
|
-
from winipedia_utils.modules.module import to_module_name, to_path
|
|
10
|
+
from winipedia_utils.utils.modules.module import to_module_name, to_path
|
|
11
11
|
|
|
12
12
|
package_path = Path(winipedia_utils.__path__[0])
|
|
13
13
|
|
|
14
14
|
custom_plugin_path = to_path("tests.base.fixtures", is_package=True)
|
|
15
15
|
package_plugin_path = (
|
|
16
|
-
package_path / to_path("testing", is_package=True) / custom_plugin_path
|
|
16
|
+
package_path / to_path("dev.testing", is_package=True) / custom_plugin_path
|
|
17
17
|
)
|
|
18
18
|
|
|
19
19
|
custom_plugin_module_names = [
|
|
@@ -13,18 +13,17 @@ from collections.abc import Callable
|
|
|
13
13
|
from types import ModuleType
|
|
14
14
|
from typing import Any
|
|
15
15
|
|
|
16
|
-
from winipedia_utils.
|
|
17
|
-
from winipedia_utils.modules.function import is_abstractmethod
|
|
18
|
-
from winipedia_utils.modules.module import (
|
|
19
|
-
get_objs_from_obj,
|
|
20
|
-
make_obj_importpath,
|
|
21
|
-
)
|
|
22
|
-
from winipedia_utils.testing.assertions import assert_with_msg
|
|
23
|
-
from winipedia_utils.testing.convention import (
|
|
16
|
+
from winipedia_utils.dev.testing.convention import (
|
|
24
17
|
get_obj_from_test_obj,
|
|
25
18
|
make_test_obj_importpath_from_obj,
|
|
26
19
|
make_untested_summary_error_msg,
|
|
27
20
|
)
|
|
21
|
+
from winipedia_utils.utils.logging.logger import get_logger
|
|
22
|
+
from winipedia_utils.utils.modules.module import (
|
|
23
|
+
get_objs_from_obj,
|
|
24
|
+
make_obj_importpath,
|
|
25
|
+
)
|
|
26
|
+
from winipedia_utils.utils.testing.assertions import assert_with_msg
|
|
28
27
|
|
|
29
28
|
logger = get_logger(__name__)
|
|
30
29
|
|
|
@@ -63,19 +62,3 @@ def assert_no_untested_objs(
|
|
|
63
62
|
untested_objs = supposed_test_objs_paths - test_objs_paths
|
|
64
63
|
|
|
65
64
|
assert_with_msg(not untested_objs, make_untested_summary_error_msg(untested_objs))
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def assert_isabstrct_method(method: Any) -> None:
|
|
69
|
-
"""Assert that a method is an abstract method.
|
|
70
|
-
|
|
71
|
-
Args:
|
|
72
|
-
method: The method to check
|
|
73
|
-
|
|
74
|
-
Raises:
|
|
75
|
-
AssertionError: If the method is not an abstract method
|
|
76
|
-
|
|
77
|
-
"""
|
|
78
|
-
assert_with_msg(
|
|
79
|
-
is_abstractmethod(method),
|
|
80
|
-
f"Expected {method} to be abstract method",
|
|
81
|
-
)
|