quickpub 4.1.2__tar.gz → 4.1.3__tar.gz
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.
- {quickpub-4.1.2/quickpub.egg-info → quickpub-4.1.3}/PKG-INFO +17 -3
- {quickpub-4.1.2 → quickpub-4.1.3}/pyproject.toml +17 -3
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/__init__.py +2 -1
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/__main__.py +5 -7
- quickpub-4.1.3/quickpub/classifiers.py +138 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/constraint_enforcers/local_version_enforcer.py +27 -19
- {quickpub-4.1.2 → quickpub-4.1.3/quickpub.egg-info}/PKG-INFO +17 -3
- quickpub-4.1.2/quickpub/classifiers.py +0 -79
- {quickpub-4.1.2 → quickpub-4.1.3}/LICENSE +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/MANIFEST.in +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/README.md +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/dist_files.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/enforcers.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/files.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/logging_.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/package_manager_detection.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/proxy.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/py.typed +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/qa.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/__init__.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/build_schema.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/constraint_enforcer.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/__init__.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/build_schemas/__init__.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/build_schemas/setuptools_build_schema.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/build_schemas/uv_build_schema.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/constraint_enforcers/__init__.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/constraint_enforcers/license_enforcer.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/constraint_enforcers/pypi_remote_version_enforcer.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/constraint_enforcers/pypirc_enforcer.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/constraint_enforcers/readme_enforcer.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/package_managers/__init__.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/package_managers/installed_package_parser.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/package_managers/pip_package_manager.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/package_managers/uv_package_manager.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/python_providers/__init__.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/python_providers/conda_python_provider.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/python_providers/default_python_provider.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/python_providers/union_provider.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/python_providers/uv_python_provider.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/quality_assurance_runners/__init__.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/quality_assurance_runners/mypy_qa_runner.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/quality_assurance_runners/pylint_qa_runner.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/quality_assurance_runners/pytest_qa_runner.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/quality_assurance_runners/unittest_qa_runner.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/upload_targets/__init__.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/upload_targets/github_upload_target.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/upload_targets/pypirc_upload_target.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/package_manager.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/python_provider.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/quality_assurance_runner.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/quickpub_strategy.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/upload_target.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/structures/__init__.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/structures/bound.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/structures/dependency.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/structures/version.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/validators.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub/worker_pool.py +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub.egg-info/SOURCES.txt +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub.egg-info/dependency_links.txt +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub.egg-info/entry_points.txt +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub.egg-info/requires.txt +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/quickpub.egg-info/top_level.txt +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/setup.cfg +0 -0
- {quickpub-4.1.2 → quickpub-4.1.3}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quickpub
|
|
3
|
-
Version: 4.1.
|
|
3
|
+
Version: 4.1.3
|
|
4
4
|
Summary: A local CI/CD simulation tool that runs quality checks, tests, and validations locally before publishing Python packages, ensuring higher build pass rates and faster feedback loops
|
|
5
5
|
Author-email: danielnachumdev <danielnachumdev@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -26,10 +26,24 @@ License: MIT License
|
|
|
26
26
|
SOFTWARE.
|
|
27
27
|
Project-URL: Homepage, https://github.com/danielnachumdev/quickpub
|
|
28
28
|
Project-URL: Bug Tracker, https://github.com/danielnachumdev/quickpub/issues
|
|
29
|
-
Classifier: Development Status ::
|
|
29
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
30
|
+
Classifier: Environment :: Console
|
|
30
31
|
Classifier: Intended Audience :: Developers
|
|
32
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
33
|
+
Classifier: Operating System :: OS Independent
|
|
34
|
+
Classifier: Programming Language :: Python
|
|
31
35
|
Classifier: Programming Language :: Python :: 3
|
|
32
|
-
Classifier:
|
|
36
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
37
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
38
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
43
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
44
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
45
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
46
|
+
Classifier: Typing :: Typed
|
|
33
47
|
Requires-Python: >=3.8.0
|
|
34
48
|
Description-Content-Type: text/markdown
|
|
35
49
|
License-File: LICENSE
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "quickpub"
|
|
7
|
-
version = "4.1.
|
|
7
|
+
version = "4.1.3"
|
|
8
8
|
authors = [
|
|
9
9
|
{ name = "danielnachumdev", email = "danielnachumdev@gmail.com" },
|
|
10
10
|
]
|
|
@@ -20,10 +20,24 @@ description = "A local CI/CD simulation tool that runs quality checks, tests, an
|
|
|
20
20
|
readme = {file = "./README.md", content-type = "text/markdown"}
|
|
21
21
|
requires-python = ">=3.8.0"
|
|
22
22
|
classifiers = [
|
|
23
|
-
"Development Status ::
|
|
23
|
+
"Development Status :: 5 - Production/Stable",
|
|
24
|
+
"Environment :: Console",
|
|
24
25
|
"Intended Audience :: Developers",
|
|
26
|
+
"License :: OSI Approved :: MIT License",
|
|
27
|
+
"Operating System :: OS Independent",
|
|
28
|
+
"Programming Language :: Python",
|
|
25
29
|
"Programming Language :: Python :: 3",
|
|
26
|
-
"
|
|
30
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
31
|
+
"Programming Language :: Python :: 3.8",
|
|
32
|
+
"Programming Language :: Python :: 3.9",
|
|
33
|
+
"Programming Language :: Python :: 3.10",
|
|
34
|
+
"Programming Language :: Python :: 3.11",
|
|
35
|
+
"Programming Language :: Python :: 3.12",
|
|
36
|
+
"Programming Language :: Python :: 3.13",
|
|
37
|
+
"Topic :: Software Development :: Build Tools",
|
|
38
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
39
|
+
"Topic :: Software Development :: Quality Assurance",
|
|
40
|
+
"Typing :: Typed",
|
|
27
41
|
]
|
|
28
42
|
[project.scripts]
|
|
29
43
|
quickpub = "quickpub.__main__:main"
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from .structures import *
|
|
2
2
|
from .strategies import *
|
|
3
|
+
from .classifiers import *
|
|
3
4
|
from .enforcers import ExitEarlyError
|
|
4
5
|
from .qa import SupportsProgress
|
|
5
6
|
from .logging_ import set_log_level
|
|
6
7
|
from .package_manager_detection import detect_package_manager, resolve_publish_environment
|
|
7
8
|
from .__main__ import publish, main
|
|
8
9
|
|
|
9
|
-
__version__ = "4.1.
|
|
10
|
+
__version__ = "4.1.3"
|
|
@@ -32,7 +32,7 @@ from .files import (
|
|
|
32
32
|
add_version_to_init,
|
|
33
33
|
update_pyproject_version,
|
|
34
34
|
)
|
|
35
|
-
from .classifiers import
|
|
35
|
+
from .classifiers import Classifier, default_publish_classifiers
|
|
36
36
|
from .qa import qa, SupportsProgress
|
|
37
37
|
from .logging_ import setup_logging
|
|
38
38
|
from .package_manager_detection import resolve_publish_environment
|
|
@@ -134,6 +134,7 @@ def _create_package_files(
|
|
|
134
134
|
validated_dependencies: List[Dependency],
|
|
135
135
|
min_python: Version,
|
|
136
136
|
scripts: Optional[Dict[str, Callable]],
|
|
137
|
+
classifiers: Optional[List[Classifier]] = None,
|
|
137
138
|
) -> None:
|
|
138
139
|
create_setup()
|
|
139
140
|
create_toml(
|
|
@@ -148,12 +149,7 @@ def _create_package_files(
|
|
|
148
149
|
homepage=homepage,
|
|
149
150
|
keywords=keywords,
|
|
150
151
|
dependencies=validated_dependencies,
|
|
151
|
-
classifiers=
|
|
152
|
-
DevelopmentStatusClassifier.Alpha,
|
|
153
|
-
IntendedAudienceClassifier.Developers,
|
|
154
|
-
ProgrammingLanguageClassifier.Python3,
|
|
155
|
-
OperatingSystemClassifier.MicrosoftWindows,
|
|
156
|
-
],
|
|
152
|
+
classifiers=classifiers or default_publish_classifiers(),
|
|
157
153
|
min_python=min_python,
|
|
158
154
|
scripts=scripts,
|
|
159
155
|
)
|
|
@@ -206,6 +202,7 @@ def publish(
|
|
|
206
202
|
keywords: Optional[List[str]] = None,
|
|
207
203
|
explicit_src_folder_path: Optional[str] = None,
|
|
208
204
|
scripts: Optional[Dict[str, Callable]] = None,
|
|
205
|
+
classifiers: Optional[List[Classifier]] = None,
|
|
209
206
|
pbar: Optional[SupportsProgress] = None,
|
|
210
207
|
demo: bool = False,
|
|
211
208
|
generate_project_files: bool = True,
|
|
@@ -253,6 +250,7 @@ def publish(
|
|
|
253
250
|
validated_deps,
|
|
254
251
|
validated_min_python,
|
|
255
252
|
scripts,
|
|
253
|
+
classifiers,
|
|
256
254
|
)
|
|
257
255
|
else:
|
|
258
256
|
_sync_existing_package_metadata(
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import List
|
|
4
|
+
|
|
5
|
+
logger = logging.getLogger(__name__)
|
|
6
|
+
|
|
7
|
+
_DEVELOPMENT_STATUS_LABELS = {
|
|
8
|
+
1: "Planning",
|
|
9
|
+
2: "Pre-Alpha",
|
|
10
|
+
3: "Alpha",
|
|
11
|
+
4: "Beta",
|
|
12
|
+
5: "Production/Stable",
|
|
13
|
+
6: "Mature",
|
|
14
|
+
7: "Inactive",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Classifier(Enum):
|
|
19
|
+
|
|
20
|
+
def _str(self) -> str:
|
|
21
|
+
return str(self.value)
|
|
22
|
+
|
|
23
|
+
@staticmethod
|
|
24
|
+
def _split_name(name: str) -> str:
|
|
25
|
+
words = []
|
|
26
|
+
current_word = ""
|
|
27
|
+
|
|
28
|
+
for char in name:
|
|
29
|
+
if char.isupper():
|
|
30
|
+
if current_word:
|
|
31
|
+
words.append(current_word)
|
|
32
|
+
current_word = char
|
|
33
|
+
else:
|
|
34
|
+
current_word += char
|
|
35
|
+
|
|
36
|
+
if current_word:
|
|
37
|
+
words.append(current_word)
|
|
38
|
+
|
|
39
|
+
return " ".join(words[:-1])
|
|
40
|
+
|
|
41
|
+
def __str__(self) -> str:
|
|
42
|
+
name = Classifier._split_name(self.__class__.__qualname__)
|
|
43
|
+
value = self._str()
|
|
44
|
+
result = f"{name} :: {value}"
|
|
45
|
+
logger.debug("Classifier string representation: %s", result)
|
|
46
|
+
return result
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class DevelopmentStatusClassifier(Classifier):
|
|
50
|
+
Planning = 1
|
|
51
|
+
PreAlpha = 2
|
|
52
|
+
Alpha = 3
|
|
53
|
+
Beta = 4
|
|
54
|
+
Production = 5
|
|
55
|
+
Stable = 5
|
|
56
|
+
Mature = 6
|
|
57
|
+
Inactive = 7
|
|
58
|
+
|
|
59
|
+
def _str(self) -> str:
|
|
60
|
+
return f"{self.value} - {_DEVELOPMENT_STATUS_LABELS[self.value]}"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class IntendedAudienceClassifier(Classifier):
|
|
64
|
+
CustomerService = "Customer Service"
|
|
65
|
+
Developers = "Developers"
|
|
66
|
+
Education = "Education"
|
|
67
|
+
EndUsersDesktop = "End Users/Desktop"
|
|
68
|
+
InformationTechnology = "Information Technology"
|
|
69
|
+
ScienceResearch = "Science/Research"
|
|
70
|
+
SystemAdministrators = "System Administrators"
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class ProgrammingLanguageClassifier(Classifier):
|
|
74
|
+
Python = "Python"
|
|
75
|
+
Python3 = "Python :: 3"
|
|
76
|
+
Python3Only = "Python :: 3 :: Only"
|
|
77
|
+
Python38 = "Python :: 3.8"
|
|
78
|
+
Python39 = "Python :: 3.9"
|
|
79
|
+
Python310 = "Python :: 3.10"
|
|
80
|
+
Python311 = "Python :: 3.11"
|
|
81
|
+
Python312 = "Python :: 3.12"
|
|
82
|
+
Python313 = "Python :: 3.13"
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class OperatingSystemClassifier(Classifier):
|
|
86
|
+
OSIndependent = "OS Independent"
|
|
87
|
+
MicrosoftWindows = "Microsoft :: Windows"
|
|
88
|
+
POSIX = "POSIX"
|
|
89
|
+
Linux = "POSIX :: Linux"
|
|
90
|
+
MacOS = "MacOS"
|
|
91
|
+
Unix = "Unix"
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class LicenseClassifier(Classifier):
|
|
95
|
+
MIT = "OSI Approved :: MIT License"
|
|
96
|
+
Apache2 = "OSI Approved :: Apache Software License"
|
|
97
|
+
BSD = "OSI Approved :: BSD License"
|
|
98
|
+
GPLv3 = "OSI Approved :: GNU General Public License v3 (GPLv3)"
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class TopicClassifier(Classifier):
|
|
102
|
+
SoftwareDevelopment = "Software Development"
|
|
103
|
+
BuildTools = "Software Development :: Build Tools"
|
|
104
|
+
Libraries = "Software Development :: Libraries"
|
|
105
|
+
PythonModules = "Software Development :: Libraries :: Python Modules"
|
|
106
|
+
QualityAssurance = "Software Development :: Quality Assurance"
|
|
107
|
+
Testing = "Software Development :: Testing"
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class TypingClassifier(Classifier):
|
|
111
|
+
Typed = "Typed"
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class EnvironmentClassifier(Classifier):
|
|
115
|
+
Console = "Console"
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def default_publish_classifiers() -> List[Classifier]:
|
|
119
|
+
return [
|
|
120
|
+
DevelopmentStatusClassifier.Alpha,
|
|
121
|
+
IntendedAudienceClassifier.Developers,
|
|
122
|
+
ProgrammingLanguageClassifier.Python3,
|
|
123
|
+
OperatingSystemClassifier.OSIndependent,
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
__all__ = [
|
|
128
|
+
"Classifier",
|
|
129
|
+
"DevelopmentStatusClassifier",
|
|
130
|
+
"IntendedAudienceClassifier",
|
|
131
|
+
"ProgrammingLanguageClassifier",
|
|
132
|
+
"OperatingSystemClassifier",
|
|
133
|
+
"LicenseClassifier",
|
|
134
|
+
"TopicClassifier",
|
|
135
|
+
"TypingClassifier",
|
|
136
|
+
"EnvironmentClassifier",
|
|
137
|
+
"default_publish_classifiers",
|
|
138
|
+
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any, Optional
|
|
3
3
|
|
|
4
|
-
from danielutils import directory_exists, get_files
|
|
4
|
+
from danielutils import directory_exists, get_files
|
|
5
5
|
|
|
6
6
|
from quickpub import Version
|
|
7
7
|
from ...constraint_enforcer import ConstraintEnforcer
|
|
@@ -9,19 +9,20 @@ from ...constraint_enforcer import ConstraintEnforcer
|
|
|
9
9
|
logger = logging.getLogger(__name__)
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
def
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return
|
|
24
|
-
|
|
12
|
+
def _version_from_dist_filename(name: str, filename: str) -> Optional[Version]:
|
|
13
|
+
prefix = f"{name}-"
|
|
14
|
+
if not filename.startswith(prefix):
|
|
15
|
+
return None
|
|
16
|
+
if filename.endswith(".tar.gz"):
|
|
17
|
+
version_str = filename[len(prefix) : -len(".tar.gz")]
|
|
18
|
+
elif filename.endswith(".whl"):
|
|
19
|
+
version_str = filename[len(prefix) : -len(".whl")].split("-")[0]
|
|
20
|
+
else:
|
|
21
|
+
return None
|
|
22
|
+
try:
|
|
23
|
+
return Version.from_str(version_str)
|
|
24
|
+
except ValueError:
|
|
25
|
+
return None
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
class LocalVersionEnforcer(ConstraintEnforcer):
|
|
@@ -49,10 +50,17 @@ class LocalVersionEnforcer(ConstraintEnforcer):
|
|
|
49
50
|
return
|
|
50
51
|
|
|
51
52
|
max_local_version = Version(0, 0, 0)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
found_artifact = False
|
|
54
|
+
for filename in prev_builds:
|
|
55
|
+
parsed = _version_from_dist_filename(name, filename)
|
|
56
|
+
if parsed is None:
|
|
57
|
+
continue
|
|
58
|
+
found_artifact = True
|
|
59
|
+
max_local_version = max(max_local_version, parsed)
|
|
60
|
+
|
|
61
|
+
if not found_artifact:
|
|
62
|
+
logger.info("No sdist or wheel artifacts found in dist directory")
|
|
63
|
+
return
|
|
56
64
|
|
|
57
65
|
if version <= max_local_version:
|
|
58
66
|
logger.error(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quickpub
|
|
3
|
-
Version: 4.1.
|
|
3
|
+
Version: 4.1.3
|
|
4
4
|
Summary: A local CI/CD simulation tool that runs quality checks, tests, and validations locally before publishing Python packages, ensuring higher build pass rates and faster feedback loops
|
|
5
5
|
Author-email: danielnachumdev <danielnachumdev@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -26,10 +26,24 @@ License: MIT License
|
|
|
26
26
|
SOFTWARE.
|
|
27
27
|
Project-URL: Homepage, https://github.com/danielnachumdev/quickpub
|
|
28
28
|
Project-URL: Bug Tracker, https://github.com/danielnachumdev/quickpub/issues
|
|
29
|
-
Classifier: Development Status ::
|
|
29
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
30
|
+
Classifier: Environment :: Console
|
|
30
31
|
Classifier: Intended Audience :: Developers
|
|
32
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
33
|
+
Classifier: Operating System :: OS Independent
|
|
34
|
+
Classifier: Programming Language :: Python
|
|
31
35
|
Classifier: Programming Language :: Python :: 3
|
|
32
|
-
Classifier:
|
|
36
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
37
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
38
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
43
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
44
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
45
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
46
|
+
Classifier: Typing :: Typed
|
|
33
47
|
Requires-Python: >=3.8.0
|
|
34
48
|
Description-Content-Type: text/markdown
|
|
35
49
|
License-File: LICENSE
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from enum import Enum
|
|
3
|
-
|
|
4
|
-
logger = logging.getLogger(__name__)
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class Classifier(Enum):
|
|
8
|
-
|
|
9
|
-
def _str(self) -> str:
|
|
10
|
-
return str(self.value)
|
|
11
|
-
|
|
12
|
-
@staticmethod
|
|
13
|
-
def _split_name(name: str) -> str:
|
|
14
|
-
words = []
|
|
15
|
-
current_word = ""
|
|
16
|
-
|
|
17
|
-
for char in name:
|
|
18
|
-
if char.isupper():
|
|
19
|
-
if current_word:
|
|
20
|
-
words.append(current_word)
|
|
21
|
-
current_word = char
|
|
22
|
-
else:
|
|
23
|
-
current_word += char
|
|
24
|
-
|
|
25
|
-
if current_word:
|
|
26
|
-
words.append(current_word)
|
|
27
|
-
|
|
28
|
-
return " ".join(words[:-1])
|
|
29
|
-
|
|
30
|
-
def __str__(self) -> str:
|
|
31
|
-
name = Classifier._split_name(self.__class__.__qualname__)
|
|
32
|
-
value = self._str()
|
|
33
|
-
result = f"{name} :: {value}"
|
|
34
|
-
logger.debug("Classifier string representation: %s", result)
|
|
35
|
-
return result
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class DevelopmentStatusClassifier(Classifier):
|
|
39
|
-
"""Classifier for package development status. Use values like Alpha, Beta, Production, etc."""
|
|
40
|
-
|
|
41
|
-
Planning = 1
|
|
42
|
-
PreAlpha = 2
|
|
43
|
-
Alpha = 3
|
|
44
|
-
Beta = 4
|
|
45
|
-
Production = 5
|
|
46
|
-
Stable = 5
|
|
47
|
-
Mature = 6
|
|
48
|
-
Inactive = 7
|
|
49
|
-
|
|
50
|
-
def _str(self) -> str:
|
|
51
|
-
return f"{self.value} - {self.name}"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
class IntendedAudienceClassifier(Classifier):
|
|
55
|
-
"""Classifier for intended audience of the package."""
|
|
56
|
-
|
|
57
|
-
CustomerService = "CustomerService"
|
|
58
|
-
Developers = "Developers"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
class ProgrammingLanguageClassifier(Classifier):
|
|
62
|
-
"""Classifier for programming languages supported by the package."""
|
|
63
|
-
|
|
64
|
-
Python3 = "Python :: 3"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
class OperatingSystemClassifier(Classifier):
|
|
68
|
-
"""Classifier for operating systems supported by the package."""
|
|
69
|
-
|
|
70
|
-
MicrosoftWindows = "Microsoft :: Windows"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
__all__ = [
|
|
74
|
-
"Classifier",
|
|
75
|
-
"DevelopmentStatusClassifier",
|
|
76
|
-
"IntendedAudienceClassifier",
|
|
77
|
-
"ProgrammingLanguageClassifier",
|
|
78
|
-
"OperatingSystemClassifier",
|
|
79
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/build_schemas/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/package_managers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/python_providers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quickpub-4.1.2 → quickpub-4.1.3}/quickpub/strategies/implementations/upload_targets/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|