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.

Files changed (118) hide show
  1. winipedia_utils/artifacts/build.py +27 -0
  2. winipedia_utils/dev/artifacts/build.py +62 -0
  3. winipedia_utils/{text → dev/configs/base}/config.py +5 -5
  4. winipedia_utils/{git/gitignore/config.py → dev/configs/gitignore.py} +2 -2
  5. winipedia_utils/{git/pre_commit/config.py → dev/configs/pre_commit.py} +5 -5
  6. winipedia_utils/{projects/poetry/config.py → dev/configs/pyproject.py} +82 -16
  7. winipedia_utils/{testing/config.py → dev/configs/testing.py} +7 -4
  8. winipedia_utils/dev/configs/workflows/base/base.py +907 -0
  9. winipedia_utils/dev/configs/workflows/health_check.py +69 -0
  10. winipedia_utils/dev/configs/workflows/publish.py +51 -0
  11. winipedia_utils/dev/configs/workflows/release.py +91 -0
  12. winipedia_utils/dev/git/github/repo/__init__.py +1 -0
  13. winipedia_utils/{git → dev/git}/github/repo/protect.py +5 -5
  14. winipedia_utils/{git → dev/git}/pre_commit/hooks.py +3 -63
  15. winipedia_utils/{git → dev/git}/pre_commit/run_hooks.py +8 -10
  16. winipedia_utils/dev/projects/poetry/dev_deps.py +21 -0
  17. winipedia_utils/{projects → dev/projects}/poetry/poetry.py +2 -2
  18. winipedia_utils/{projects → dev/projects}/project.py +6 -7
  19. winipedia_utils/dev/testing/__init__.py +1 -0
  20. winipedia_utils/{testing → dev/testing}/convention.py +1 -1
  21. winipedia_utils/{testing → dev/testing}/create_tests.py +14 -14
  22. winipedia_utils/dev/testing/tests/__init__.py +1 -0
  23. winipedia_utils/dev/testing/tests/base/__init__.py +1 -0
  24. winipedia_utils/dev/testing/tests/base/fixtures/__init__.py +1 -0
  25. winipedia_utils/{testing → dev/testing}/tests/base/fixtures/fixture.py +1 -1
  26. winipedia_utils/dev/testing/tests/base/fixtures/scopes/__init__.py +1 -0
  27. winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/class_.py +2 -2
  28. winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/module.py +2 -2
  29. winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/session.py +10 -10
  30. winipedia_utils/dev/testing/tests/base/utils/__init__.py +1 -0
  31. winipedia_utils/dev/testing/tests/base/utils/utils.py +1 -0
  32. winipedia_utils/{testing → dev/testing}/tests/conftest.py +2 -2
  33. winipedia_utils/{testing/tests/base/utils → dev/testing}/utils.py +7 -24
  34. winipedia_utils/setup.py +9 -5
  35. winipedia_utils/utils/__init__.py +1 -0
  36. winipedia_utils/utils/data/dataframe/__init__.py +1 -0
  37. winipedia_utils/{data → utils/data}/dataframe/cleaning.py +1 -1
  38. winipedia_utils/utils/data/structures/__init__.py +1 -0
  39. winipedia_utils/{text → utils/data/structures/text}/string.py +36 -3
  40. winipedia_utils/utils/git/__init__.py +1 -0
  41. winipedia_utils/utils/git/github/__init__.py +1 -0
  42. winipedia_utils/{git → utils/git}/github/github.py +1 -1
  43. winipedia_utils/utils/git/github/repo/__init__.py +1 -0
  44. winipedia_utils/{git → utils/git}/github/repo/repo.py +1 -1
  45. winipedia_utils/{git → utils/git}/gitignore/gitignore.py +2 -2
  46. winipedia_utils/{concurrent → utils/iterating/concurrent}/concurrent.py +4 -4
  47. winipedia_utils/{concurrent → utils/iterating/concurrent}/multiprocessing.py +2 -2
  48. winipedia_utils/{concurrent → utils/iterating/concurrent}/multithreading.py +1 -1
  49. winipedia_utils/{logging → utils/logging}/logger.py +1 -1
  50. winipedia_utils/{modules → utils/modules}/class_.py +5 -5
  51. winipedia_utils/{modules → utils/modules}/function.py +2 -2
  52. winipedia_utils/{modules → utils/modules}/module.py +8 -5
  53. winipedia_utils/{modules → utils/modules}/package.py +9 -36
  54. winipedia_utils/{oop → utils/oop}/mixins/meta.py +4 -4
  55. winipedia_utils/{oop → utils/oop}/mixins/mixin.py +2 -2
  56. winipedia_utils/{os → utils/os}/os.py +2 -2
  57. winipedia_utils/utils/resources/__init__.py +1 -0
  58. winipedia_utils/utils/resources/svgs/__init__.py +1 -0
  59. winipedia_utils/{resources → utils/resources}/svgs/svg.py +1 -1
  60. winipedia_utils/utils/testing/__init__.py +1 -0
  61. winipedia_utils/{testing → utils/testing}/assertions.py +18 -0
  62. winipedia_utils/{testing → utils/testing}/skip.py +1 -1
  63. {winipedia_utils-0.5.22.dist-info → winipedia_utils-0.7.1.dist-info}/METADATA +34 -33
  64. winipedia_utils-0.7.1.dist-info/RECORD +109 -0
  65. winipedia_utils/git/github/workflows/base/base.py +0 -377
  66. winipedia_utils/git/github/workflows/health_check.py +0 -80
  67. winipedia_utils/git/github/workflows/publish.py +0 -49
  68. winipedia_utils/git/github/workflows/release.py +0 -55
  69. winipedia_utils/testing/__init__.py +0 -1
  70. winipedia_utils/testing/tests/__init__.py +0 -1
  71. winipedia_utils/testing/tests/base/__init__.py +0 -1
  72. winipedia_utils/testing/tests/base/fixtures/__init__.py +0 -1
  73. winipedia_utils/testing/tests/base/fixtures/scopes/__init__.py +0 -1
  74. winipedia_utils/testing/tests/base/utils/__init__.py +0 -1
  75. winipedia_utils-0.5.22.dist-info/RECORD +0 -95
  76. /winipedia_utils/{data/dataframe → artifacts}/__init__.py +0 -0
  77. /winipedia_utils/{data/structures → dev}/__init__.py +0 -0
  78. /winipedia_utils/{git/github → dev/artifacts}/__init__.py +0 -0
  79. /winipedia_utils/{git/github/repo → dev/configs}/__init__.py +0 -0
  80. /winipedia_utils/{git/github/workflows → dev/configs}/base/__init__.py +0 -0
  81. /winipedia_utils/{git/github → dev/configs}/workflows/__init__.py +0 -0
  82. /winipedia_utils/{resources → dev/configs/workflows/base}/__init__.py +0 -0
  83. /winipedia_utils/{git → dev/git}/__init__.py +0 -0
  84. /winipedia_utils/{resources/svgs → dev/git/github}/__init__.py +0 -0
  85. /winipedia_utils/{git → dev/git}/pre_commit/__init__.py +0 -0
  86. /winipedia_utils/{projects → dev/projects}/__init__.py +0 -0
  87. /winipedia_utils/{projects → dev/projects}/poetry/__init__.py +0 -0
  88. /winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/function.py +0 -0
  89. /winipedia_utils/{testing → dev/testing}/tests/base/fixtures/scopes/package.py +0 -0
  90. /winipedia_utils/{data → utils/data}/__init__.py +0 -0
  91. /winipedia_utils/{data → utils/data}/structures/dicts.py +0 -0
  92. /winipedia_utils/{text → utils/data/structures/text}/__init__.py +0 -0
  93. /winipedia_utils/{git → utils/git}/gitignore/__init__.py +0 -0
  94. /winipedia_utils/{iterating → utils/iterating}/__init__.py +0 -0
  95. /winipedia_utils/{concurrent → utils/iterating/concurrent}/__init__.py +0 -0
  96. /winipedia_utils/{iterating → utils/iterating}/iterate.py +0 -0
  97. /winipedia_utils/{logging → utils/logging}/__init__.py +0 -0
  98. /winipedia_utils/{logging → utils/logging}/ansi.py +0 -0
  99. /winipedia_utils/{logging → utils/logging}/config.py +0 -0
  100. /winipedia_utils/{modules → utils/modules}/__init__.py +0 -0
  101. /winipedia_utils/{modules → utils/modules}/inspection.py +0 -0
  102. /winipedia_utils/{oop → utils/oop}/__init__.py +0 -0
  103. /winipedia_utils/{oop → utils/oop}/mixins/__init__.py +0 -0
  104. /winipedia_utils/{os → utils/os}/__init__.py +0 -0
  105. /winipedia_utils/{resources → utils/resources}/svgs/delete_garbage_can.svg +0 -0
  106. /winipedia_utils/{resources → utils/resources}/svgs/download_arrow.svg +0 -0
  107. /winipedia_utils/{resources → utils/resources}/svgs/exit_fullscreen_icon.svg +0 -0
  108. /winipedia_utils/{resources → utils/resources}/svgs/fullscreen_icon.svg +0 -0
  109. /winipedia_utils/{resources → utils/resources}/svgs/menu_icon.svg +0 -0
  110. /winipedia_utils/{resources → utils/resources}/svgs/pause_icon.svg +0 -0
  111. /winipedia_utils/{resources → utils/resources}/svgs/play_icon.svg +0 -0
  112. /winipedia_utils/{resources → utils/resources}/svgs/plus_icon.svg +0 -0
  113. /winipedia_utils/{security → utils/security}/__init__.py +0 -0
  114. /winipedia_utils/{security → utils/security}/cryptography.py +0 -0
  115. /winipedia_utils/{security → utils/security}/keyring.py +0 -0
  116. /winipedia_utils/{testing → utils/testing}/fixtures.py +0 -0
  117. {winipedia_utils-0.5.22.dist-info → winipedia_utils-0.7.1.dist-info}/WHEEL +0 -0
  118. {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.git.github.github import get_github_repo_token
6
- from winipedia_utils.git.github.repo.repo import (
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.git.github.workflows.health_check import HealthCheckWorkflow
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
- exit_code = 1
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
- if exit_code != 0:
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.modules.module import create_module
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.modules.class_ import (
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 winipedia_utils.testing.tests in the tests directory
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."""
@@ -10,7 +10,7 @@ from pathlib import Path
10
10
 
11
11
  import pytest
12
12
 
13
- from winipedia_utils.text.config import ConfigFile
13
+ from winipedia_utils.dev.configs.base.config import ConfigFile
14
14
 
15
15
 
16
16
  @pytest.fixture
@@ -0,0 +1 @@
1
+ """__init__ module."""
@@ -8,8 +8,8 @@ mechanism.
8
8
 
9
9
  import pytest
10
10
 
11
- from winipedia_utils.testing.fixtures import autouse_class_fixture
12
- from winipedia_utils.testing.tests.base.utils.utils import assert_no_untested_objs
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.fixtures import autouse_module_fixture
14
- from winipedia_utils.testing.tests.base.utils.utils import assert_no_untested_objs
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.modules.package import (
14
- find_packages,
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.assertions import assert_with_msg
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.testing.fixtures import autouse_session_fixture
27
- from winipedia_utils.text.config import ConfigFile
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.logging.logger import get_logger
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
- )