PyFunceble-dev 4.3.1__py3-none-any.whl → 4.4.0__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.
- PyFunceble/checker/availability/base.py +11 -3
- PyFunceble/checker/availability/domain.py +3 -1
- PyFunceble/checker/availability/domain_and_ip.py +2 -0
- PyFunceble/checker/base.py +13 -1
- PyFunceble/checker/reputation/base.py +10 -2
- PyFunceble/checker/syntax/base.py +5 -2
- PyFunceble/checker/utils/whois.py +7 -3
- PyFunceble/cli/processes/base.py +7 -0
- PyFunceble/cli/processes/workers/producer.py +9 -3
- PyFunceble/cli/processes/workers/tester.py +5 -5
- PyFunceble/cli/system/launcher.py +18 -5
- PyFunceble/cli/utils/testing.py +9 -3
- PyFunceble/dataset/autocontinue/csv.py +15 -1
- PyFunceble/dataset/base.py +25 -0
- PyFunceble/dataset/csv_base.py +3 -0
- PyFunceble/dataset/db_base.py +14 -0
- PyFunceble/dataset/iana.py +6 -1
- PyFunceble/dataset/ipv4_reputation.py +7 -1
- PyFunceble/dataset/public_suffix.py +6 -1
- PyFunceble/dataset/user_agent.py +6 -1
- PyFunceble/storage.py +1 -1
- {pyfunceble_dev-4.3.1.dist-info → pyfunceble_dev-4.4.0.dist-info}/METADATA +108 -108
- {pyfunceble_dev-4.3.1.dist-info → pyfunceble_dev-4.4.0.dist-info}/RECORD +27 -27
- {pyfunceble_dev-4.3.1.dist-info → pyfunceble_dev-4.4.0.dist-info}/WHEEL +0 -0
- {pyfunceble_dev-4.3.1.dist-info → pyfunceble_dev-4.4.0.dist-info}/entry_points.txt +0 -0
- {pyfunceble_dev-4.3.1.dist-info → pyfunceble_dev-4.4.0.dist-info}/licenses/LICENSE +0 -0
- {pyfunceble_dev-4.3.1.dist-info → pyfunceble_dev-4.4.0.dist-info}/top_level.txt +0 -0
|
@@ -54,7 +54,7 @@ License:
|
|
|
54
54
|
|
|
55
55
|
import multiprocessing
|
|
56
56
|
from datetime import datetime
|
|
57
|
-
from typing import Dict, List, Optional
|
|
57
|
+
from typing import Any, Dict, List, Optional
|
|
58
58
|
|
|
59
59
|
from sqlalchemy.orm import Session
|
|
60
60
|
|
|
@@ -110,8 +110,12 @@ class AvailabilityCheckerBase(CheckerBase):
|
|
|
110
110
|
Optional, Activates/Disables the check of the status before the actual
|
|
111
111
|
status gathering.
|
|
112
112
|
:param bool use_whois_db:
|
|
113
|
-
Optional, Activates/
|
|
113
|
+
Optional, Activates/Disables the usage of a local database to store the
|
|
114
114
|
WHOIS datasets.
|
|
115
|
+
:param bool use_platform:
|
|
116
|
+
Optional, Activates/Disables the usage of the platform features.
|
|
117
|
+
:param multiprocessing.Lock shared_lock:
|
|
118
|
+
Optional, The shared lock to use to access shared resources.
|
|
115
119
|
"""
|
|
116
120
|
|
|
117
121
|
# pylint: disable=too-many-public-methods, too-many-instance-attributes
|
|
@@ -160,6 +164,7 @@ class AvailabilityCheckerBase(CheckerBase):
|
|
|
160
164
|
db_session: Optional[Session] = None,
|
|
161
165
|
use_whois_db: Optional[bool] = None,
|
|
162
166
|
use_platform: Optional[bool] = None,
|
|
167
|
+
shared_lock: Optional[Any] = None,
|
|
163
168
|
) -> None:
|
|
164
169
|
self.dns_query_tool = DNSQueryTool()
|
|
165
170
|
self.whois_query_tool = WhoisQueryTool()
|
|
@@ -226,6 +231,7 @@ class AvailabilityCheckerBase(CheckerBase):
|
|
|
226
231
|
do_syntax_check_first=do_syntax_check_first,
|
|
227
232
|
db_session=db_session,
|
|
228
233
|
use_platform=use_platform,
|
|
234
|
+
shared_lock=shared_lock,
|
|
229
235
|
)
|
|
230
236
|
|
|
231
237
|
@property
|
|
@@ -761,7 +767,9 @@ class AvailabilityCheckerBase(CheckerBase):
|
|
|
761
767
|
if (
|
|
762
768
|
PyFunceble.facility.ConfigLoader.is_already_loaded() and self.use_whois_db
|
|
763
769
|
): # pragma: no cover ## Not interesting enough to spend time on it.
|
|
764
|
-
whois_object = get_whois_dataset_object(
|
|
770
|
+
whois_object = get_whois_dataset_object(
|
|
771
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
772
|
+
)
|
|
765
773
|
known_record = whois_object[self.subject]
|
|
766
774
|
|
|
767
775
|
if known_record and not isinstance(known_record, dict):
|
|
@@ -115,7 +115,9 @@ class DomainAvailabilityChecker(AvailabilityCheckerBase):
|
|
|
115
115
|
self.status.idna_subject,
|
|
116
116
|
)
|
|
117
117
|
|
|
118
|
-
lookup_result = DomainReputationChecker(
|
|
118
|
+
lookup_result = DomainReputationChecker(
|
|
119
|
+
self.status.idna_subject, shared_lock=self.shared_lock
|
|
120
|
+
).get_status()
|
|
119
121
|
|
|
120
122
|
# pylint: disable=no-member
|
|
121
123
|
if lookup_result and lookup_result.is_malicious():
|
|
@@ -112,6 +112,7 @@ class DomainAndIPAvailabilityChecker(AvailabilityCheckerBase):
|
|
|
112
112
|
db_session=self.db_session,
|
|
113
113
|
use_whois_db=self.use_whois_db,
|
|
114
114
|
use_platform=self.use_platform,
|
|
115
|
+
shared_lock=self.shared_lock,
|
|
115
116
|
)
|
|
116
117
|
else:
|
|
117
118
|
query_object = DomainAvailabilityChecker(
|
|
@@ -126,6 +127,7 @@ class DomainAndIPAvailabilityChecker(AvailabilityCheckerBase):
|
|
|
126
127
|
db_session=self.db_session,
|
|
127
128
|
use_whois_db=self.use_whois_db,
|
|
128
129
|
use_platform=self.use_platform,
|
|
130
|
+
shared_lock=self.shared_lock,
|
|
129
131
|
)
|
|
130
132
|
|
|
131
133
|
query_object.dns_query_tool = self.dns_query_tool
|
PyFunceble/checker/base.py
CHANGED
|
@@ -52,7 +52,7 @@ License:
|
|
|
52
52
|
|
|
53
53
|
import datetime
|
|
54
54
|
import functools
|
|
55
|
-
from typing import Optional
|
|
55
|
+
from typing import Any, Optional
|
|
56
56
|
|
|
57
57
|
import domain2idna
|
|
58
58
|
from sqlalchemy.orm import Session
|
|
@@ -77,6 +77,12 @@ class CheckerBase:
|
|
|
77
77
|
|
|
78
78
|
.. warning::
|
|
79
79
|
This does not apply to the syntax checker - itself.
|
|
80
|
+
:param Session db_session:
|
|
81
|
+
Optional, The database session to use.
|
|
82
|
+
:param bool use_platform:
|
|
83
|
+
Optional, Authorizes the usage of the platform.
|
|
84
|
+
:param Any shared_lock:
|
|
85
|
+
Optional, The shared lock to use to access shared resources.
|
|
80
86
|
"""
|
|
81
87
|
|
|
82
88
|
STD_DO_SYNTAX_CHECK_FIRST: bool = False
|
|
@@ -97,6 +103,8 @@ class CheckerBase:
|
|
|
97
103
|
status: Optional[CheckerStatusBase] = None
|
|
98
104
|
params: Optional[CheckerParamsBase] = None
|
|
99
105
|
|
|
106
|
+
shared_lock: Optional[Any] = None
|
|
107
|
+
|
|
100
108
|
def __init__(
|
|
101
109
|
self,
|
|
102
110
|
subject: Optional[str] = None,
|
|
@@ -104,6 +112,7 @@ class CheckerBase:
|
|
|
104
112
|
do_syntax_check_first: Optional[bool] = None,
|
|
105
113
|
db_session: Optional[Session] = None,
|
|
106
114
|
use_platform: Optional[bool] = None,
|
|
115
|
+
shared_lock: Optional[Any] = None,
|
|
107
116
|
) -> None:
|
|
108
117
|
self.platform_query_tool = PlatformQueryTool()
|
|
109
118
|
self.url2netloc = Url2Netloc()
|
|
@@ -115,6 +124,9 @@ class CheckerBase:
|
|
|
115
124
|
if self.status is None:
|
|
116
125
|
self.status = CheckerStatusBase()
|
|
117
126
|
|
|
127
|
+
if shared_lock is not None:
|
|
128
|
+
self.shared_lock = shared_lock
|
|
129
|
+
|
|
118
130
|
if subject is not None:
|
|
119
131
|
self.subject = subject
|
|
120
132
|
|
|
@@ -50,7 +50,7 @@ License:
|
|
|
50
50
|
limitations under the License.
|
|
51
51
|
"""
|
|
52
52
|
|
|
53
|
-
from typing import List, Optional
|
|
53
|
+
from typing import Any, List, Optional
|
|
54
54
|
|
|
55
55
|
from sqlalchemy.orm import Session
|
|
56
56
|
|
|
@@ -75,6 +75,12 @@ class ReputationCheckerBase(CheckerBase):
|
|
|
75
75
|
:param bool do_syntax_check_first:
|
|
76
76
|
Optional, Activates/Disables the check of the status before the actual
|
|
77
77
|
status gathering.
|
|
78
|
+
:param Session db_session:
|
|
79
|
+
Optional, The database session to use.
|
|
80
|
+
:param bool use_platform:
|
|
81
|
+
Optional, Authorizes the usage of the platform.
|
|
82
|
+
:param Any shared_lock:
|
|
83
|
+
Optional, The shared lock to use to access shared resources.
|
|
78
84
|
"""
|
|
79
85
|
|
|
80
86
|
dns_query_tool: Optional[DNSQueryTool] = None
|
|
@@ -92,9 +98,10 @@ class ReputationCheckerBase(CheckerBase):
|
|
|
92
98
|
do_syntax_check_first: Optional[bool] = None,
|
|
93
99
|
db_session: Optional[Session] = None,
|
|
94
100
|
use_platform: Optional[bool] = None,
|
|
101
|
+
shared_lock: Optional[Any] = None,
|
|
95
102
|
) -> None:
|
|
96
103
|
self.dns_query_tool = DNSQueryTool()
|
|
97
|
-
self.ipv4_reputation_query_tool = IPV4ReputationDataset()
|
|
104
|
+
self.ipv4_reputation_query_tool = IPV4ReputationDataset(shared_lock=shared_lock)
|
|
98
105
|
self.domain_syntax_checker = DomainSyntaxChecker()
|
|
99
106
|
self.ip_syntax_checker = IPSyntaxChecker()
|
|
100
107
|
self.url_syntax_checker = URLSyntaxChecker()
|
|
@@ -110,6 +117,7 @@ class ReputationCheckerBase(CheckerBase):
|
|
|
110
117
|
do_syntax_check_first=do_syntax_check_first,
|
|
111
118
|
db_session=db_session,
|
|
112
119
|
use_platform=use_platform,
|
|
120
|
+
shared_lock=shared_lock,
|
|
113
121
|
)
|
|
114
122
|
|
|
115
123
|
@staticmethod
|
|
@@ -50,7 +50,7 @@ License:
|
|
|
50
50
|
limitations under the License.
|
|
51
51
|
"""
|
|
52
52
|
|
|
53
|
-
from typing import Optional
|
|
53
|
+
from typing import Any, Optional
|
|
54
54
|
|
|
55
55
|
from sqlalchemy.orm import Session
|
|
56
56
|
|
|
@@ -78,13 +78,16 @@ class SyntaxCheckerBase(CheckerBase):
|
|
|
78
78
|
self,
|
|
79
79
|
subject: Optional[str] = None,
|
|
80
80
|
db_session: Optional[Session] = None,
|
|
81
|
+
shared_lock: Optional[Any] = None,
|
|
81
82
|
) -> None:
|
|
82
83
|
self.params = SyntaxCheckerParams()
|
|
83
84
|
|
|
84
85
|
self.status = SyntaxCheckerStatus()
|
|
85
86
|
self.status.params = self.params
|
|
86
87
|
|
|
87
|
-
super().__init__(
|
|
88
|
+
super().__init__(
|
|
89
|
+
subject=subject, db_session=db_session, shared_lock=shared_lock
|
|
90
|
+
)
|
|
88
91
|
|
|
89
92
|
def subject_propagator(self) -> "CheckerBase":
|
|
90
93
|
"""
|
|
@@ -50,7 +50,7 @@ License:
|
|
|
50
50
|
limitations under the License.
|
|
51
51
|
"""
|
|
52
52
|
|
|
53
|
-
from typing import Optional, Union
|
|
53
|
+
from typing import Any, Optional, Union
|
|
54
54
|
|
|
55
55
|
from sqlalchemy.orm import Session
|
|
56
56
|
|
|
@@ -64,13 +64,17 @@ from PyFunceble.dataset.whois.sql import SQLDBWhoisDataset
|
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
def get_whois_dataset_object(
|
|
67
|
-
*,
|
|
67
|
+
*,
|
|
68
|
+
db_session: Optional[Session] = None,
|
|
69
|
+
shared_lock: Optional[Any] = None,
|
|
68
70
|
) -> Union[DatasetBase, CSVDatasetBase, DBDatasetBase]:
|
|
69
71
|
"""
|
|
70
72
|
Provides the whois dataset object to work with.
|
|
71
73
|
|
|
72
74
|
:param db_session:
|
|
73
75
|
A database session to use.
|
|
76
|
+
:param shared_lock:
|
|
77
|
+
Optional, The shared lock to use to access shared resources.
|
|
74
78
|
|
|
75
79
|
:raise ValueError:
|
|
76
80
|
When the given database type is unknown.
|
|
@@ -80,7 +84,7 @@ def get_whois_dataset_object(
|
|
|
80
84
|
|
|
81
85
|
if PyFunceble.facility.ConfigLoader.is_already_loaded():
|
|
82
86
|
if PyFunceble.storage.CONFIGURATION.cli_testing.db_type == "csv":
|
|
83
|
-
return CSVWhoisDataset().set_authorized(
|
|
87
|
+
return CSVWhoisDataset(shared_lock=shared_lock).set_authorized(
|
|
84
88
|
bool(PyFunceble.storage.CONFIGURATION.cli_testing.whois_db)
|
|
85
89
|
)
|
|
86
90
|
|
PyFunceble/cli/processes/base.py
CHANGED
|
@@ -60,3 +60,10 @@ class ProcessesManagerBase(PyFunceble.ext.process_manager.ProcessManagerCore):
|
|
|
60
60
|
"""
|
|
61
61
|
Provides the base of all classes.
|
|
62
62
|
"""
|
|
63
|
+
|
|
64
|
+
def __init__(self, *args, **kwargs) -> None:
|
|
65
|
+
# Better handling of shared locks.
|
|
66
|
+
# This help be be retro-compatible. Allowing existing users to
|
|
67
|
+
# not get exceptions.
|
|
68
|
+
shared_lock = kwargs.pop("shared_lock", None)
|
|
69
|
+
super().__init__(*args, **kwargs, shared_lock=shared_lock)
|
|
@@ -125,9 +125,15 @@ class ProducerWorker(WorkerBase):
|
|
|
125
125
|
self.file_printer = FilePrinter(
|
|
126
126
|
skip_column=skip_columns, extra_formatters=extra_formatters
|
|
127
127
|
)
|
|
128
|
-
self.whois_dataset = get_whois_dataset_object(
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
self.whois_dataset = get_whois_dataset_object(
|
|
129
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
130
|
+
)
|
|
131
|
+
self.inactive_dataset = get_inactive_dataset_object(
|
|
132
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
133
|
+
)
|
|
134
|
+
self.continue_dataset = get_continue_dataset_object(
|
|
135
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
136
|
+
)
|
|
131
137
|
self.status_file_generator = StatusFileGenerator().guess_all_settings()
|
|
132
138
|
self.counter = FilesystemCounter()
|
|
133
139
|
self.registrar_counter = RegistrarCounter()
|
|
@@ -90,12 +90,12 @@ class TesterWorker(WorkerBase):
|
|
|
90
90
|
|
|
91
91
|
self.continue_dataset = (
|
|
92
92
|
PyFunceble.cli.utils.testing.get_continue_dataset_object(
|
|
93
|
-
db_session=self.db_session
|
|
93
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
94
94
|
)
|
|
95
95
|
)
|
|
96
96
|
self.inactive_dataset = (
|
|
97
97
|
PyFunceble.cli.utils.testing.get_inactive_dataset_object(
|
|
98
|
-
db_session=self.db_session
|
|
98
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
99
99
|
)
|
|
100
100
|
)
|
|
101
101
|
|
|
@@ -191,7 +191,7 @@ class TesterWorker(WorkerBase):
|
|
|
191
191
|
self.initiated_testing_objects[checker_type][
|
|
192
192
|
subject_type
|
|
193
193
|
] = self.known_testing_objects[checker_type][subject_type](
|
|
194
|
-
db_session=self.db_session
|
|
194
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
195
195
|
).set_do_syntax_check_first(
|
|
196
196
|
# We want to always check the syntax first (ONLY UNDER THE CLI)
|
|
197
197
|
not bool(PyFunceble.storage.CONFIGURATION.cli_testing.local_network)
|
|
@@ -278,12 +278,12 @@ class TesterWorker(WorkerBase):
|
|
|
278
278
|
test_dataset["idna_subject"],
|
|
279
279
|
)
|
|
280
280
|
|
|
281
|
-
self._init_testing_object(
|
|
281
|
+
testing_object = self._init_testing_object(
|
|
282
282
|
test_dataset["subject_type"], test_dataset["checker_type"]
|
|
283
283
|
)
|
|
284
284
|
|
|
285
285
|
result = (
|
|
286
|
-
|
|
286
|
+
testing_object.set_subject(test_dataset["idna_subject"])
|
|
287
287
|
.query_status()
|
|
288
288
|
.get_status()
|
|
289
289
|
)
|
|
@@ -156,6 +156,7 @@ class SystemLauncher(SystemBase):
|
|
|
156
156
|
file_preloader: Optional[FilePreloader] = None
|
|
157
157
|
|
|
158
158
|
manager: Optional[multiprocessing.Manager]
|
|
159
|
+
shared_lock: Optional[multiprocessing.Lock] = None
|
|
159
160
|
tester_process_manager: Optional[
|
|
160
161
|
Union[TesterProcessesManager, ChancyTesterProcessesManager]
|
|
161
162
|
] = None
|
|
@@ -185,11 +186,20 @@ class SystemLauncher(SystemBase):
|
|
|
185
186
|
except TypeError:
|
|
186
187
|
self.db_session = None
|
|
187
188
|
|
|
189
|
+
self.manager = multiprocessing.Manager()
|
|
190
|
+
self.shared_lock = multiprocessing.Lock()
|
|
191
|
+
|
|
188
192
|
self.execution_time_holder = ExecutionTime().set_start_time()
|
|
189
193
|
self.checker_type = get_testing_mode()
|
|
190
|
-
self.continue_dataset = get_continue_dataset_object(
|
|
191
|
-
|
|
192
|
-
|
|
194
|
+
self.continue_dataset = get_continue_dataset_object(
|
|
195
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
196
|
+
)
|
|
197
|
+
self.inactive_dataset = get_inactive_dataset_object(
|
|
198
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
199
|
+
)
|
|
200
|
+
self.whois_dataset = get_whois_dataset_object(
|
|
201
|
+
db_session=self.db_session, shared_lock=self.shared_lock
|
|
202
|
+
)
|
|
193
203
|
self.continuous_integration = ci_object()
|
|
194
204
|
|
|
195
205
|
if self.continuous_integration.authorized:
|
|
@@ -197,8 +207,6 @@ class SystemLauncher(SystemBase):
|
|
|
197
207
|
|
|
198
208
|
self.stdout_printer.guess_allow_coloration().guess_allow_background_coloration()
|
|
199
209
|
|
|
200
|
-
self.manager = multiprocessing.Manager()
|
|
201
|
-
|
|
202
210
|
if not PyFunceble.storage.CONFIGURATION.cli_testing.chancy_tester:
|
|
203
211
|
self.tester_process_manager = TesterProcessesManager(
|
|
204
212
|
max_workers=PyFunceble.storage.CONFIGURATION.cli_testing.max_workers,
|
|
@@ -215,6 +223,7 @@ class SystemLauncher(SystemBase):
|
|
|
215
223
|
delay_shutdown=PyFunceble.storage.CONFIGURATION.cli_testing.mining,
|
|
216
224
|
generate_configuration_queue=False,
|
|
217
225
|
continuous_integration=self.continuous_integration,
|
|
226
|
+
shared_lock=self.shared_lock,
|
|
218
227
|
)
|
|
219
228
|
|
|
220
229
|
self.producer_process_manager = ProducerProcessesManager(
|
|
@@ -227,6 +236,7 @@ class SystemLauncher(SystemBase):
|
|
|
227
236
|
delay_shutdown=PyFunceble.storage.CONFIGURATION.cli_testing.mining,
|
|
228
237
|
generate_configuration_queue=False,
|
|
229
238
|
continuous_integration=self.continuous_integration,
|
|
239
|
+
shared_lock=self.shared_lock,
|
|
230
240
|
)
|
|
231
241
|
else:
|
|
232
242
|
self.tester_process_manager = ChancyTesterProcessesManager(
|
|
@@ -266,6 +276,7 @@ class SystemLauncher(SystemBase):
|
|
|
266
276
|
daemon=True,
|
|
267
277
|
generate_output_queue=False,
|
|
268
278
|
generate_configuration_queue=False,
|
|
279
|
+
shared_lock=self.shared_lock,
|
|
269
280
|
)
|
|
270
281
|
self.migrator_process_manager = MigratorProcessesManager(
|
|
271
282
|
manager=self.manager,
|
|
@@ -273,6 +284,7 @@ class SystemLauncher(SystemBase):
|
|
|
273
284
|
daemon=True,
|
|
274
285
|
generate_input_queue=False,
|
|
275
286
|
generate_output_queue=False,
|
|
287
|
+
shared_lock=self.shared_lock,
|
|
276
288
|
)
|
|
277
289
|
|
|
278
290
|
if PyFunceble.storage.CONFIGURATION.cli_testing.mining:
|
|
@@ -287,6 +299,7 @@ class SystemLauncher(SystemBase):
|
|
|
287
299
|
spread_stop_signal=False,
|
|
288
300
|
spread_wait_signal=True,
|
|
289
301
|
delay_shutdown=PyFunceble.storage.CONFIGURATION.cli_testing.mining,
|
|
302
|
+
shared_lock=self.shared_lock,
|
|
290
303
|
)
|
|
291
304
|
|
|
292
305
|
self.tester_process_manager.add_dependent_manager(
|
PyFunceble/cli/utils/testing.py
CHANGED
|
@@ -51,7 +51,7 @@ License:
|
|
|
51
51
|
"""
|
|
52
52
|
|
|
53
53
|
import os
|
|
54
|
-
from typing import List, Optional, Union
|
|
54
|
+
from typing import Any, List, Optional, Union
|
|
55
55
|
|
|
56
56
|
from sqlalchemy.orm import Session
|
|
57
57
|
|
|
@@ -92,12 +92,15 @@ def get_testing_mode() -> str:
|
|
|
92
92
|
|
|
93
93
|
def get_continue_dataset_object(
|
|
94
94
|
db_session: Optional[Session] = None,
|
|
95
|
+
shared_lock: Optional[Any] = None,
|
|
95
96
|
) -> Union[DatasetBase, CSVDatasetBase, DBDatasetBase]:
|
|
96
97
|
"""
|
|
97
98
|
Provides the continue object to work with.
|
|
98
99
|
|
|
99
100
|
:param db_session:
|
|
100
101
|
A database session to use.
|
|
102
|
+
:param shared_lock:
|
|
103
|
+
Optional, The shared lock to use to access shared resources.
|
|
101
104
|
|
|
102
105
|
:raise ValueError:
|
|
103
106
|
When the given database type is unkown.
|
|
@@ -106,7 +109,7 @@ def get_continue_dataset_object(
|
|
|
106
109
|
result = None
|
|
107
110
|
|
|
108
111
|
if PyFunceble.storage.CONFIGURATION.cli_testing.db_type in "csv":
|
|
109
|
-
result = CSVContinueDataset()
|
|
112
|
+
result = CSVContinueDataset(shared_lock=shared_lock)
|
|
110
113
|
elif PyFunceble.storage.CONFIGURATION.cli_testing.db_type in (
|
|
111
114
|
"mariadb",
|
|
112
115
|
"mysql",
|
|
@@ -129,12 +132,15 @@ def get_continue_dataset_object(
|
|
|
129
132
|
|
|
130
133
|
def get_inactive_dataset_object(
|
|
131
134
|
db_session: Optional[Session] = None,
|
|
135
|
+
shared_lock: Optional[Any] = None,
|
|
132
136
|
) -> Union[DatasetBase, CSVDatasetBase, DBDatasetBase]:
|
|
133
137
|
"""
|
|
134
138
|
Provides the inactive object to work with.
|
|
135
139
|
|
|
136
140
|
:param db_session:
|
|
137
141
|
A database session to use.
|
|
142
|
+
:param shared_lock:
|
|
143
|
+
An optional shared lock to use.
|
|
138
144
|
|
|
139
145
|
:raise ValueError:
|
|
140
146
|
When the given database type is unkown.
|
|
@@ -143,7 +149,7 @@ def get_inactive_dataset_object(
|
|
|
143
149
|
result = None
|
|
144
150
|
|
|
145
151
|
if PyFunceble.storage.CONFIGURATION.cli_testing.db_type == "csv":
|
|
146
|
-
result = CSVInactiveDataset()
|
|
152
|
+
result = CSVInactiveDataset(shared_lock=shared_lock)
|
|
147
153
|
elif PyFunceble.storage.CONFIGURATION.cli_testing.db_type in (
|
|
148
154
|
"mariadb",
|
|
149
155
|
"mysql",
|
|
@@ -66,6 +66,17 @@ class CSVContinueDataset(CSVDatasetBase, ContinueDatasetBase):
|
|
|
66
66
|
"""
|
|
67
67
|
Provides the interface for the management of the continue
|
|
68
68
|
CSV file.
|
|
69
|
+
|
|
70
|
+
:param bool authorized:
|
|
71
|
+
Optional, Authorizes/Disables the usage of this dataset.
|
|
72
|
+
If not set, :code:`STD_AUTHORIZED` is used.
|
|
73
|
+
:param bool remove_unneeded_fields:
|
|
74
|
+
Optional, Activates/Deactivates the removal of unneeded fields.
|
|
75
|
+
If not set, :code:`STD_REMOVE_UNNEEDED_FIELDS` is used.
|
|
76
|
+
:param str base_directory:
|
|
77
|
+
Optional, The base directory to use.
|
|
78
|
+
:param Any shared_lock:
|
|
79
|
+
Optional, The shared lock to use to access shared resources.
|
|
69
80
|
"""
|
|
70
81
|
|
|
71
82
|
source_file: Optional[str] = None
|
|
@@ -78,12 +89,15 @@ class CSVContinueDataset(CSVDatasetBase, ContinueDatasetBase):
|
|
|
78
89
|
authorized: Optional[bool] = None,
|
|
79
90
|
remove_unneeded_fields: Optional[bool] = None,
|
|
80
91
|
base_directory: Optional[str] = None,
|
|
92
|
+
shared_lock: Optional[Any] = None,
|
|
81
93
|
) -> None:
|
|
82
94
|
if base_directory is not None:
|
|
83
95
|
self.set_base_directory(base_directory)
|
|
84
96
|
|
|
85
97
|
super().__init__(
|
|
86
|
-
authorized=authorized,
|
|
98
|
+
authorized=authorized,
|
|
99
|
+
remove_unneeded_fields=remove_unneeded_fields,
|
|
100
|
+
shared_lock=shared_lock,
|
|
87
101
|
)
|
|
88
102
|
|
|
89
103
|
def __contains__(self, value: str) -> bool:
|
PyFunceble/dataset/base.py
CHANGED
|
@@ -57,11 +57,15 @@ import PyFunceble.storage
|
|
|
57
57
|
from PyFunceble.downloader.base import DownloaderBase
|
|
58
58
|
from PyFunceble.helpers.dict import DictHelper
|
|
59
59
|
from PyFunceble.helpers.file import FileHelper
|
|
60
|
+
from PyFunceble.utils.platform import PlatformUtility
|
|
60
61
|
|
|
61
62
|
|
|
62
63
|
class DatasetBase:
|
|
63
64
|
"""
|
|
64
65
|
Provides the base of all dataset.
|
|
66
|
+
|
|
67
|
+
:param Any shared_lock:
|
|
68
|
+
Optional, The shared lock to use to access shared resources.
|
|
65
69
|
"""
|
|
66
70
|
|
|
67
71
|
STORAGE_INDEX: Optional[str] = None
|
|
@@ -69,6 +73,12 @@ class DatasetBase:
|
|
|
69
73
|
|
|
70
74
|
source_file: Optional[str] = None
|
|
71
75
|
|
|
76
|
+
shared_lock: Optional[Any] = None
|
|
77
|
+
|
|
78
|
+
def __init__(self, *, shared_lock: Optional[Any] = None) -> None:
|
|
79
|
+
if shared_lock is not None:
|
|
80
|
+
self.shared_lock = shared_lock
|
|
81
|
+
|
|
72
82
|
def __contains__(self, value: Any): # pragma: no cover
|
|
73
83
|
raise NotImplementedError()
|
|
74
84
|
|
|
@@ -110,7 +120,22 @@ class DatasetBase:
|
|
|
110
120
|
|
|
111
121
|
return wrapper
|
|
112
122
|
|
|
123
|
+
def autolock(func): # pylint: disable=no-self-argument
|
|
124
|
+
"""
|
|
125
|
+
A decorator to automatically lock and unlock the shared lock.
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
@functools.wraps(func)
|
|
129
|
+
def wrapper(self, *args, **kwargs):
|
|
130
|
+
if PlatformUtility.is_windows() and self.shared_lock is not None:
|
|
131
|
+
with self.shared_lock:
|
|
132
|
+
return func(self, *args, **kwargs) # pylint: disable=not-callable
|
|
133
|
+
return func(self, *args, **kwargs) # pylint: disable=not-callable
|
|
134
|
+
|
|
135
|
+
return wrapper
|
|
136
|
+
|
|
113
137
|
@ensure_source_file_exists
|
|
138
|
+
@autolock
|
|
114
139
|
def get_content(self) -> Optional[dict]:
|
|
115
140
|
"""
|
|
116
141
|
Provides the cached or the real contend of the dataset (after caching)
|
PyFunceble/dataset/csv_base.py
CHANGED
|
@@ -118,6 +118,7 @@ class CSVDatasetBase(DBDatasetBase):
|
|
|
118
118
|
|
|
119
119
|
@DBDatasetBase.ensure_source_file_exists
|
|
120
120
|
@DBDatasetBase.execute_if_authorized(None)
|
|
121
|
+
@DBDatasetBase.autolock
|
|
121
122
|
def add(self, row: dict) -> "CSVDatasetBase":
|
|
122
123
|
"""
|
|
123
124
|
Adds the given dataset into the CSV file.
|
|
@@ -151,6 +152,7 @@ class CSVDatasetBase(DBDatasetBase):
|
|
|
151
152
|
|
|
152
153
|
@DBDatasetBase.ensure_source_file_exists
|
|
153
154
|
@DBDatasetBase.execute_if_authorized(None)
|
|
155
|
+
@DBDatasetBase.autolock
|
|
154
156
|
def remove(self, row: dict) -> "CSVDatasetBase":
|
|
155
157
|
"""
|
|
156
158
|
Removes the given dataset from the CSV file.
|
|
@@ -194,6 +196,7 @@ class CSVDatasetBase(DBDatasetBase):
|
|
|
194
196
|
|
|
195
197
|
@DBDatasetBase.ensure_source_file_exists
|
|
196
198
|
@DBDatasetBase.execute_if_authorized(None)
|
|
199
|
+
@DBDatasetBase.autolock
|
|
197
200
|
def get_content(self) -> Generator[Optional[dict], None, None]:
|
|
198
201
|
"""
|
|
199
202
|
Provides a generator which provides the next line to read.
|
PyFunceble/dataset/db_base.py
CHANGED
|
@@ -60,6 +60,17 @@ from PyFunceble.dataset.base import DatasetBase
|
|
|
60
60
|
class DBDatasetBase(DatasetBase):
|
|
61
61
|
"""
|
|
62
62
|
Provides the base of all datasets which acts as database interface.
|
|
63
|
+
|
|
64
|
+
:param bool authorized:
|
|
65
|
+
Optional, Whether we are authorized to process or not.
|
|
66
|
+
If not set, :code:`STD_AUTHORIZED` is used.
|
|
67
|
+
:param bool remove_unneeded_fields:
|
|
68
|
+
Optional, Whether we should remove unneeded fields or not.
|
|
69
|
+
If not set, :code:`STD_REMOVE_UNNEEDED_FIELDS` is used.
|
|
70
|
+
:param str config_dir:
|
|
71
|
+
Optional, The configuration directory to use.
|
|
72
|
+
:param Any shared_lock:
|
|
73
|
+
Optional, The shared lock to use to access shared resources.
|
|
63
74
|
"""
|
|
64
75
|
|
|
65
76
|
STD_REMOVE_UNNEEDED_FIELDS: bool = True
|
|
@@ -79,6 +90,7 @@ class DBDatasetBase(DatasetBase):
|
|
|
79
90
|
authorized: Optional[bool] = None,
|
|
80
91
|
remove_unneeded_fields: Optional[bool] = None,
|
|
81
92
|
config_dir: Optional[str] = None,
|
|
93
|
+
shared_lock: Optional[Any] = None,
|
|
82
94
|
) -> None:
|
|
83
95
|
if config_dir is not None:
|
|
84
96
|
self.config_dir = config_dir
|
|
@@ -91,6 +103,8 @@ class DBDatasetBase(DatasetBase):
|
|
|
91
103
|
if remove_unneeded_fields is not None:
|
|
92
104
|
self.set_remove_unneeded_fields(remove_unneeded_fields)
|
|
93
105
|
|
|
106
|
+
super().__init__(shared_lock=shared_lock)
|
|
107
|
+
|
|
94
108
|
self.__post_init__()
|
|
95
109
|
|
|
96
110
|
def __post_init__(self) -> None:
|
PyFunceble/dataset/iana.py
CHANGED
|
@@ -59,15 +59,20 @@ from PyFunceble.downloader.iana import IANADownloader
|
|
|
59
59
|
class IanaDataset(DatasetBase):
|
|
60
60
|
"""
|
|
61
61
|
Provides the dataset handler for the IANA dataset.
|
|
62
|
+
|
|
63
|
+
:param Any shared_lock:
|
|
64
|
+
Optional, The shared lock to use to access shared resources.
|
|
62
65
|
"""
|
|
63
66
|
|
|
64
67
|
STORAGE_INDEX: str = "IANA"
|
|
65
68
|
downloader: Optional[IANADownloader] = None
|
|
66
69
|
|
|
67
|
-
def __init__(self) -> None:
|
|
70
|
+
def __init__(self, *, shared_lock: Optional[Any] = None) -> None:
|
|
68
71
|
self.downloader = IANADownloader()
|
|
69
72
|
self.source_file = self.downloader.destination
|
|
70
73
|
|
|
74
|
+
super().__init__(shared_lock=shared_lock)
|
|
75
|
+
|
|
71
76
|
def __contains__(self, value: Any) -> bool:
|
|
72
77
|
if value.startswith("."):
|
|
73
78
|
value = value[1:]
|
|
@@ -60,15 +60,20 @@ from PyFunceble.helpers.file import FileHelper
|
|
|
60
60
|
class IPV4ReputationDataset(DatasetBase):
|
|
61
61
|
"""
|
|
62
62
|
Provides the interface for the lookup of the IPv4 reputation.
|
|
63
|
+
|
|
64
|
+
:param Any shared_lock:
|
|
65
|
+
Optional, The shared lock to use to access shared resources.
|
|
63
66
|
"""
|
|
64
67
|
|
|
65
68
|
STORAGE_INDEX: Optional[str] = None
|
|
66
69
|
downloader: Optional[IPV4ReputationDownloader] = None
|
|
67
70
|
|
|
68
|
-
def __init__(self) -> None:
|
|
71
|
+
def __init__(self, *, shared_lock: Optional[Any] = None) -> None:
|
|
69
72
|
self.downloader = IPV4ReputationDownloader()
|
|
70
73
|
self.source_file = self.downloader.destination
|
|
71
74
|
|
|
75
|
+
super().__init__(shared_lock=shared_lock)
|
|
76
|
+
|
|
72
77
|
def __contains__(self, value: Any) -> bool:
|
|
73
78
|
with self.get_content() as file_stream:
|
|
74
79
|
for line in file_stream:
|
|
@@ -80,6 +85,7 @@ class IPV4ReputationDataset(DatasetBase):
|
|
|
80
85
|
return False
|
|
81
86
|
|
|
82
87
|
@DatasetBase.ensure_source_file_exists
|
|
88
|
+
@DatasetBase.autolock
|
|
83
89
|
def get_content(self) -> open:
|
|
84
90
|
"""
|
|
85
91
|
Provides a file handler which does let you read the content line by
|
|
@@ -59,15 +59,20 @@ from PyFunceble.downloader.public_suffix import PublicSuffixDownloader
|
|
|
59
59
|
class PublicSuffixDataset(DatasetBase):
|
|
60
60
|
"""
|
|
61
61
|
Provides the dataset handler for the Public Suffix List dataset.
|
|
62
|
+
|
|
63
|
+
:param Any shared_lock:
|
|
64
|
+
Optional, The shared lock to use to access shared resources.
|
|
62
65
|
"""
|
|
63
66
|
|
|
64
67
|
STORAGE_INDEX: str = "PUBLIC_SUFFIX"
|
|
65
68
|
downloader: Optional[PublicSuffixDownloader] = None
|
|
66
69
|
|
|
67
|
-
def __init__(self) -> None:
|
|
70
|
+
def __init__(self, *, shared_lock: Optional[Any] = None) -> None:
|
|
68
71
|
self.downloader = PublicSuffixDownloader()
|
|
69
72
|
self.source_file = self.downloader.destination
|
|
70
73
|
|
|
74
|
+
super().__init__(shared_lock=shared_lock)
|
|
75
|
+
|
|
71
76
|
def __contains__(self, value: Any) -> bool:
|
|
72
77
|
if value.startswith("."):
|
|
73
78
|
value = value[1:]
|
PyFunceble/dataset/user_agent.py
CHANGED
|
@@ -62,6 +62,9 @@ from PyFunceble.downloader.user_agents import UserAgentsDownloader
|
|
|
62
62
|
class UserAgentDataset(DatasetBase):
|
|
63
63
|
"""
|
|
64
64
|
Provides the dataset and infrastructure for the User Agent navigation
|
|
65
|
+
|
|
66
|
+
:param Any shared_lock:
|
|
67
|
+
Optional, The shared lock to use to access shared resources.
|
|
65
68
|
"""
|
|
66
69
|
|
|
67
70
|
STORAGE_INDEX: str = "USER_AGENTS"
|
|
@@ -70,10 +73,12 @@ class UserAgentDataset(DatasetBase):
|
|
|
70
73
|
preferred_browser: str = "chrome"
|
|
71
74
|
preferred_platform: str = "linux"
|
|
72
75
|
|
|
73
|
-
def __init__(self) -> None:
|
|
76
|
+
def __init__(self, *, shared_lock: Optional[Any] = None) -> None:
|
|
74
77
|
self.downloader = UserAgentsDownloader()
|
|
75
78
|
self.source_file = self.downloader.destination
|
|
76
79
|
|
|
80
|
+
super().__init__(shared_lock=shared_lock)
|
|
81
|
+
|
|
77
82
|
def __contains__(self, value: Any) -> bool:
|
|
78
83
|
content = self.get_content()
|
|
79
84
|
|
PyFunceble/storage.py
CHANGED
|
@@ -60,7 +60,7 @@ from dotenv import load_dotenv
|
|
|
60
60
|
from PyFunceble.storage_facility import get_config_directory
|
|
61
61
|
|
|
62
62
|
PROJECT_NAME: str = "PyFunceble"
|
|
63
|
-
PROJECT_VERSION: str = "4.
|
|
63
|
+
PROJECT_VERSION: str = "4.4.0.dev"
|
|
64
64
|
|
|
65
65
|
DISTRIBUTED_CONFIGURATION_FILENAME: str = ".PyFunceble_production.yaml"
|
|
66
66
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyFunceble-dev
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.4.0
|
|
4
4
|
Summary: The tool to check the availability or syntax of domain, IP or URL.
|
|
5
5
|
Home-page: https://github.com/funilrys/PyFunceble
|
|
6
6
|
Author: funilrys
|
|
@@ -21,179 +21,179 @@ Classifier: Programming Language :: Python :: 3
|
|
|
21
21
|
Requires-Python: >=3.10, <4
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
License-File: LICENSE
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist: PyMySQL
|
|
24
|
+
Requires-Dist: pyfunceble-process-manager==1.0.10
|
|
26
25
|
Requires-Dist: python-box[all]~=7.3.2
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist: domain2idna~=1.12.0
|
|
26
|
+
Requires-Dist: PyYAML
|
|
29
27
|
Requires-Dist: setuptools>=65.5.1
|
|
30
|
-
Requires-Dist:
|
|
28
|
+
Requires-Dist: alembic
|
|
29
|
+
Requires-Dist: domain2idna~=1.12.0
|
|
31
30
|
Requires-Dist: SQLAlchemy~=2.0
|
|
32
31
|
Requires-Dist: colorama
|
|
33
|
-
Requires-Dist: PyYAML
|
|
34
|
-
Requires-Dist: packaging
|
|
35
|
-
Requires-Dist: pyfunceble-process-manager==1.0.10
|
|
36
32
|
Requires-Dist: shtab
|
|
37
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: PyMySQL
|
|
38
34
|
Requires-Dist: inflection
|
|
35
|
+
Requires-Dist: packaging
|
|
36
|
+
Requires-Dist: requests[socks]<3
|
|
37
|
+
Requires-Dist: dnspython[DOH]~=2.8.0
|
|
38
|
+
Requires-Dist: python-dotenv
|
|
39
39
|
Provides-Extra: docs
|
|
40
|
-
Requires-Dist: mkdocs-
|
|
40
|
+
Requires-Dist: mkdocs-material~=9.5; extra == "docs"
|
|
41
41
|
Requires-Dist: mkdocs-section-index~=0.3; extra == "docs"
|
|
42
|
-
Requires-Dist: mkdocs-
|
|
43
|
-
Requires-Dist: zipp>=3.19.1; extra == "docs"
|
|
42
|
+
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "docs"
|
|
44
43
|
Requires-Dist: mkdocs-gen-files~=0.5; extra == "docs"
|
|
45
44
|
Requires-Dist: mkdocs~=1.5; extra == "docs"
|
|
46
|
-
Requires-Dist:
|
|
47
|
-
Requires-Dist:
|
|
45
|
+
Requires-Dist: zipp>=3.19.1; extra == "docs"
|
|
46
|
+
Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "docs"
|
|
48
47
|
Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "docs"
|
|
49
48
|
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "docs"
|
|
50
|
-
Requires-Dist:
|
|
49
|
+
Requires-Dist: mkdocstrings[python]~=1.0; extra == "docs"
|
|
50
|
+
Requires-Dist: pymdown-extensions~=10.9; extra == "docs"
|
|
51
51
|
Provides-Extra: dev
|
|
52
|
-
Requires-Dist: flake8; extra == "dev"
|
|
53
|
-
Requires-Dist: isort; extra == "dev"
|
|
54
52
|
Requires-Dist: black; extra == "dev"
|
|
55
53
|
Requires-Dist: pylint; extra == "dev"
|
|
54
|
+
Requires-Dist: flake8; extra == "dev"
|
|
56
55
|
Requires-Dist: bandit; extra == "dev"
|
|
56
|
+
Requires-Dist: isort; extra == "dev"
|
|
57
57
|
Provides-Extra: test
|
|
58
|
-
Requires-Dist: coverage; extra == "test"
|
|
59
58
|
Requires-Dist: tox; extra == "test"
|
|
59
|
+
Requires-Dist: coverage; extra == "test"
|
|
60
60
|
Provides-Extra: psql
|
|
61
|
-
Requires-Dist:
|
|
62
|
-
Requires-Dist: PyMySQL; extra == "psql"
|
|
61
|
+
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "psql"
|
|
63
62
|
Requires-Dist: python-box[all]~=7.3.2; extra == "psql"
|
|
64
|
-
Requires-Dist:
|
|
65
|
-
Requires-Dist: domain2idna~=1.12.0; extra == "psql"
|
|
63
|
+
Requires-Dist: PyYAML; extra == "psql"
|
|
66
64
|
Requires-Dist: setuptools>=65.5.1; extra == "psql"
|
|
67
|
-
Requires-Dist:
|
|
65
|
+
Requires-Dist: psycopg2; extra == "psql"
|
|
66
|
+
Requires-Dist: alembic; extra == "psql"
|
|
67
|
+
Requires-Dist: domain2idna~=1.12.0; extra == "psql"
|
|
68
68
|
Requires-Dist: SQLAlchemy~=2.0; extra == "psql"
|
|
69
69
|
Requires-Dist: colorama; extra == "psql"
|
|
70
|
-
Requires-Dist: PyYAML; extra == "psql"
|
|
71
|
-
Requires-Dist: psycopg2; extra == "psql"
|
|
72
|
-
Requires-Dist: packaging; extra == "psql"
|
|
73
|
-
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "psql"
|
|
74
70
|
Requires-Dist: shtab; extra == "psql"
|
|
75
|
-
Requires-Dist:
|
|
71
|
+
Requires-Dist: PyMySQL; extra == "psql"
|
|
76
72
|
Requires-Dist: inflection; extra == "psql"
|
|
73
|
+
Requires-Dist: packaging; extra == "psql"
|
|
74
|
+
Requires-Dist: requests[socks]<3; extra == "psql"
|
|
75
|
+
Requires-Dist: dnspython[DOH]~=2.8.0; extra == "psql"
|
|
76
|
+
Requires-Dist: python-dotenv; extra == "psql"
|
|
77
77
|
Provides-Extra: psql-binary
|
|
78
|
-
Requires-Dist:
|
|
79
|
-
Requires-Dist: psycopg2-binary; extra == "psql-binary"
|
|
80
|
-
Requires-Dist: PyMySQL; extra == "psql-binary"
|
|
78
|
+
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "psql-binary"
|
|
81
79
|
Requires-Dist: python-box[all]~=7.3.2; extra == "psql-binary"
|
|
82
|
-
Requires-Dist:
|
|
83
|
-
Requires-Dist: domain2idna~=1.12.0; extra == "psql-binary"
|
|
80
|
+
Requires-Dist: PyYAML; extra == "psql-binary"
|
|
84
81
|
Requires-Dist: setuptools>=65.5.1; extra == "psql-binary"
|
|
85
|
-
Requires-Dist:
|
|
82
|
+
Requires-Dist: alembic; extra == "psql-binary"
|
|
83
|
+
Requires-Dist: domain2idna~=1.12.0; extra == "psql-binary"
|
|
86
84
|
Requires-Dist: SQLAlchemy~=2.0; extra == "psql-binary"
|
|
87
85
|
Requires-Dist: colorama; extra == "psql-binary"
|
|
88
|
-
Requires-Dist: PyYAML; extra == "psql-binary"
|
|
89
|
-
Requires-Dist: packaging; extra == "psql-binary"
|
|
90
|
-
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "psql-binary"
|
|
91
86
|
Requires-Dist: shtab; extra == "psql-binary"
|
|
92
|
-
Requires-Dist:
|
|
87
|
+
Requires-Dist: PyMySQL; extra == "psql-binary"
|
|
93
88
|
Requires-Dist: inflection; extra == "psql-binary"
|
|
89
|
+
Requires-Dist: psycopg2-binary; extra == "psql-binary"
|
|
90
|
+
Requires-Dist: packaging; extra == "psql-binary"
|
|
91
|
+
Requires-Dist: requests[socks]<3; extra == "psql-binary"
|
|
92
|
+
Requires-Dist: dnspython[DOH]~=2.8.0; extra == "psql-binary"
|
|
93
|
+
Requires-Dist: python-dotenv; extra == "psql-binary"
|
|
94
94
|
Provides-Extra: postgresql
|
|
95
|
-
Requires-Dist:
|
|
96
|
-
Requires-Dist: PyMySQL; extra == "postgresql"
|
|
95
|
+
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "postgresql"
|
|
97
96
|
Requires-Dist: python-box[all]~=7.3.2; extra == "postgresql"
|
|
98
|
-
Requires-Dist:
|
|
99
|
-
Requires-Dist: domain2idna~=1.12.0; extra == "postgresql"
|
|
97
|
+
Requires-Dist: PyYAML; extra == "postgresql"
|
|
100
98
|
Requires-Dist: setuptools>=65.5.1; extra == "postgresql"
|
|
101
|
-
Requires-Dist:
|
|
99
|
+
Requires-Dist: psycopg2; extra == "postgresql"
|
|
100
|
+
Requires-Dist: alembic; extra == "postgresql"
|
|
101
|
+
Requires-Dist: domain2idna~=1.12.0; extra == "postgresql"
|
|
102
102
|
Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql"
|
|
103
103
|
Requires-Dist: colorama; extra == "postgresql"
|
|
104
|
-
Requires-Dist: PyYAML; extra == "postgresql"
|
|
105
|
-
Requires-Dist: psycopg2; extra == "postgresql"
|
|
106
|
-
Requires-Dist: packaging; extra == "postgresql"
|
|
107
|
-
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "postgresql"
|
|
108
104
|
Requires-Dist: shtab; extra == "postgresql"
|
|
109
|
-
Requires-Dist:
|
|
105
|
+
Requires-Dist: PyMySQL; extra == "postgresql"
|
|
110
106
|
Requires-Dist: inflection; extra == "postgresql"
|
|
107
|
+
Requires-Dist: packaging; extra == "postgresql"
|
|
108
|
+
Requires-Dist: requests[socks]<3; extra == "postgresql"
|
|
109
|
+
Requires-Dist: dnspython[DOH]~=2.8.0; extra == "postgresql"
|
|
110
|
+
Requires-Dist: python-dotenv; extra == "postgresql"
|
|
111
111
|
Provides-Extra: postgresql-binary
|
|
112
|
-
Requires-Dist:
|
|
113
|
-
Requires-Dist: psycopg2-binary; extra == "postgresql-binary"
|
|
114
|
-
Requires-Dist: PyMySQL; extra == "postgresql-binary"
|
|
112
|
+
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "postgresql-binary"
|
|
115
113
|
Requires-Dist: python-box[all]~=7.3.2; extra == "postgresql-binary"
|
|
116
|
-
Requires-Dist:
|
|
117
|
-
Requires-Dist: domain2idna~=1.12.0; extra == "postgresql-binary"
|
|
114
|
+
Requires-Dist: PyYAML; extra == "postgresql-binary"
|
|
118
115
|
Requires-Dist: setuptools>=65.5.1; extra == "postgresql-binary"
|
|
119
|
-
Requires-Dist:
|
|
116
|
+
Requires-Dist: alembic; extra == "postgresql-binary"
|
|
117
|
+
Requires-Dist: domain2idna~=1.12.0; extra == "postgresql-binary"
|
|
120
118
|
Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql-binary"
|
|
121
119
|
Requires-Dist: colorama; extra == "postgresql-binary"
|
|
122
|
-
Requires-Dist: PyYAML; extra == "postgresql-binary"
|
|
123
|
-
Requires-Dist: packaging; extra == "postgresql-binary"
|
|
124
|
-
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "postgresql-binary"
|
|
125
120
|
Requires-Dist: shtab; extra == "postgresql-binary"
|
|
126
|
-
Requires-Dist:
|
|
121
|
+
Requires-Dist: PyMySQL; extra == "postgresql-binary"
|
|
127
122
|
Requires-Dist: inflection; extra == "postgresql-binary"
|
|
123
|
+
Requires-Dist: psycopg2-binary; extra == "postgresql-binary"
|
|
124
|
+
Requires-Dist: packaging; extra == "postgresql-binary"
|
|
125
|
+
Requires-Dist: requests[socks]<3; extra == "postgresql-binary"
|
|
126
|
+
Requires-Dist: dnspython[DOH]~=2.8.0; extra == "postgresql-binary"
|
|
127
|
+
Requires-Dist: python-dotenv; extra == "postgresql-binary"
|
|
128
128
|
Provides-Extra: full
|
|
129
|
-
Requires-Dist:
|
|
130
|
-
Requires-Dist: flake8; extra == "full"
|
|
131
|
-
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "full"
|
|
132
|
-
Requires-Dist: domain2idna~=1.12.0; extra == "full"
|
|
133
|
-
Requires-Dist: tox; extra == "full"
|
|
134
|
-
Requires-Dist: SQLAlchemy~=2.0; extra == "full"
|
|
135
|
-
Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "full"
|
|
129
|
+
Requires-Dist: PyYAML; extra == "full"
|
|
136
130
|
Requires-Dist: mkdocs-gen-files~=0.5; extra == "full"
|
|
131
|
+
Requires-Dist: shtab; extra == "full"
|
|
132
|
+
Requires-Dist: PyMySQL; extra == "full"
|
|
133
|
+
Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "full"
|
|
134
|
+
Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "full"
|
|
135
|
+
Requires-Dist: tox; extra == "full"
|
|
136
|
+
Requires-Dist: bandit; extra == "full"
|
|
137
137
|
Requires-Dist: isort; extra == "full"
|
|
138
|
+
Requires-Dist: mkdocs-material~=9.5; extra == "full"
|
|
139
|
+
Requires-Dist: mkdocs-section-index~=0.3; extra == "full"
|
|
140
|
+
Requires-Dist: mkdocs~=1.5; extra == "full"
|
|
141
|
+
Requires-Dist: SQLAlchemy~=2.0; extra == "full"
|
|
138
142
|
Requires-Dist: coverage; extra == "full"
|
|
139
|
-
Requires-Dist: mkdocstrings[python]~=1.0; extra == "full"
|
|
140
|
-
Requires-Dist: alembic; extra == "full"
|
|
141
143
|
Requires-Dist: inflection; extra == "full"
|
|
142
144
|
Requires-Dist: dnspython[DOH]~=2.8.0; extra == "full"
|
|
143
|
-
Requires-Dist:
|
|
144
|
-
Requires-Dist:
|
|
145
|
+
Requires-Dist: pymdown-extensions~=10.9; extra == "full"
|
|
146
|
+
Requires-Dist: python-box[all]~=7.3.2; extra == "full"
|
|
147
|
+
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "full"
|
|
148
|
+
Requires-Dist: alembic; extra == "full"
|
|
145
149
|
Requires-Dist: colorama; extra == "full"
|
|
146
|
-
Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "full"
|
|
147
|
-
Requires-Dist: zipp>=3.19.1; extra == "full"
|
|
148
|
-
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "full"
|
|
149
|
-
Requires-Dist: mkdocs~=1.5; extra == "full"
|
|
150
|
-
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "full"
|
|
151
|
-
Requires-Dist: setuptools>=65.5.1; extra == "full"
|
|
152
|
-
Requires-Dist: python-dotenv; extra == "full"
|
|
153
|
-
Requires-Dist: mkdocs-section-index~=0.3; extra == "full"
|
|
154
|
-
Requires-Dist: PyYAML; extra == "full"
|
|
155
150
|
Requires-Dist: packaging; extra == "full"
|
|
156
|
-
Requires-Dist: pymdown-extensions~=10.9; extra == "full"
|
|
157
|
-
Requires-Dist: pylint; extra == "full"
|
|
158
151
|
Requires-Dist: requests[socks]<3; extra == "full"
|
|
159
|
-
Requires-Dist:
|
|
152
|
+
Requires-Dist: python-dotenv; extra == "full"
|
|
153
|
+
Requires-Dist: mkdocstrings[python]~=1.0; extra == "full"
|
|
154
|
+
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "full"
|
|
160
155
|
Requires-Dist: black; extra == "full"
|
|
161
|
-
Requires-Dist:
|
|
156
|
+
Requires-Dist: setuptools>=65.5.1; extra == "full"
|
|
157
|
+
Requires-Dist: domain2idna~=1.12.0; extra == "full"
|
|
158
|
+
Requires-Dist: zipp>=3.19.1; extra == "full"
|
|
159
|
+
Requires-Dist: flake8; extra == "full"
|
|
160
|
+
Requires-Dist: pylint; extra == "full"
|
|
161
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "full"
|
|
162
162
|
Provides-Extra: all
|
|
163
|
-
Requires-Dist:
|
|
164
|
-
Requires-Dist: python-box[all]~=7.3.2; extra == "all"
|
|
165
|
-
Requires-Dist: flake8; extra == "all"
|
|
166
|
-
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "all"
|
|
167
|
-
Requires-Dist: domain2idna~=1.12.0; extra == "all"
|
|
168
|
-
Requires-Dist: tox; extra == "all"
|
|
169
|
-
Requires-Dist: SQLAlchemy~=2.0; extra == "all"
|
|
170
|
-
Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "all"
|
|
163
|
+
Requires-Dist: PyYAML; extra == "all"
|
|
171
164
|
Requires-Dist: mkdocs-gen-files~=0.5; extra == "all"
|
|
165
|
+
Requires-Dist: shtab; extra == "all"
|
|
166
|
+
Requires-Dist: PyMySQL; extra == "all"
|
|
167
|
+
Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "all"
|
|
168
|
+
Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "all"
|
|
169
|
+
Requires-Dist: tox; extra == "all"
|
|
170
|
+
Requires-Dist: bandit; extra == "all"
|
|
172
171
|
Requires-Dist: isort; extra == "all"
|
|
172
|
+
Requires-Dist: mkdocs-material~=9.5; extra == "all"
|
|
173
|
+
Requires-Dist: mkdocs-section-index~=0.3; extra == "all"
|
|
174
|
+
Requires-Dist: mkdocs~=1.5; extra == "all"
|
|
175
|
+
Requires-Dist: SQLAlchemy~=2.0; extra == "all"
|
|
173
176
|
Requires-Dist: coverage; extra == "all"
|
|
174
|
-
Requires-Dist: mkdocstrings[python]~=1.0; extra == "all"
|
|
175
|
-
Requires-Dist: alembic; extra == "all"
|
|
176
177
|
Requires-Dist: inflection; extra == "all"
|
|
177
178
|
Requires-Dist: dnspython[DOH]~=2.8.0; extra == "all"
|
|
178
|
-
Requires-Dist:
|
|
179
|
-
Requires-Dist:
|
|
179
|
+
Requires-Dist: pymdown-extensions~=10.9; extra == "all"
|
|
180
|
+
Requires-Dist: python-box[all]~=7.3.2; extra == "all"
|
|
181
|
+
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "all"
|
|
182
|
+
Requires-Dist: alembic; extra == "all"
|
|
180
183
|
Requires-Dist: colorama; extra == "all"
|
|
181
|
-
Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "all"
|
|
182
|
-
Requires-Dist: zipp>=3.19.1; extra == "all"
|
|
183
|
-
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "all"
|
|
184
|
-
Requires-Dist: mkdocs~=1.5; extra == "all"
|
|
185
|
-
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "all"
|
|
186
|
-
Requires-Dist: setuptools>=65.5.1; extra == "all"
|
|
187
|
-
Requires-Dist: python-dotenv; extra == "all"
|
|
188
|
-
Requires-Dist: mkdocs-section-index~=0.3; extra == "all"
|
|
189
|
-
Requires-Dist: PyYAML; extra == "all"
|
|
190
184
|
Requires-Dist: packaging; extra == "all"
|
|
191
|
-
Requires-Dist: pymdown-extensions~=10.9; extra == "all"
|
|
192
|
-
Requires-Dist: pylint; extra == "all"
|
|
193
185
|
Requires-Dist: requests[socks]<3; extra == "all"
|
|
194
|
-
Requires-Dist:
|
|
186
|
+
Requires-Dist: python-dotenv; extra == "all"
|
|
187
|
+
Requires-Dist: mkdocstrings[python]~=1.0; extra == "all"
|
|
188
|
+
Requires-Dist: pyfunceble-process-manager==1.0.10; extra == "all"
|
|
195
189
|
Requires-Dist: black; extra == "all"
|
|
196
|
-
Requires-Dist:
|
|
190
|
+
Requires-Dist: setuptools>=65.5.1; extra == "all"
|
|
191
|
+
Requires-Dist: domain2idna~=1.12.0; extra == "all"
|
|
192
|
+
Requires-Dist: zipp>=3.19.1; extra == "all"
|
|
193
|
+
Requires-Dist: flake8; extra == "all"
|
|
194
|
+
Requires-Dist: pylint; extra == "all"
|
|
195
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "all"
|
|
196
|
+
Requires-Dist: psycopg2-binary; extra == "all"
|
|
197
197
|
Dynamic: author
|
|
198
198
|
Dynamic: author-email
|
|
199
199
|
Dynamic: classifier
|
|
@@ -4,17 +4,17 @@ PyFunceble/facility.py,sha256=GXjY78VPTh7eBHccpesohjJH7K5jSM6efJcZGk7gulQ,2664
|
|
|
4
4
|
PyFunceble/factory.py,sha256=-tJEHJhX_yhfp0fOl7np2OCaxSdfKuWj5ioa57MoB48,2614
|
|
5
5
|
PyFunceble/logger.py,sha256=ATiCxdpzH3ht5NHHQCY87-_8vHSe6tZ7P6y2QwAgn6g,17617
|
|
6
6
|
PyFunceble/sessions.py,sha256=5zgaUjY_QiGSSH9IeMI8fP_g9Ypcn_1_-Cif623elK0,2574
|
|
7
|
-
PyFunceble/storage.py,sha256=
|
|
7
|
+
PyFunceble/storage.py,sha256=s_F1ZDvGG17rTFXYcuZU-3ahbe5NTW9JvTS1Thw82EY,5376
|
|
8
8
|
PyFunceble/storage_facility.py,sha256=hK7eoCtFdBaMFcGsEMEU-mNGxr0kqneyVJSuSgB4CuM,4825
|
|
9
9
|
PyFunceble/checker/__init__.py,sha256=jv0IWODVKAOBFq9hK8ZUMXMUV7JN_6CKUSzKCH-MOD8,2436
|
|
10
|
-
PyFunceble/checker/base.py,sha256=
|
|
10
|
+
PyFunceble/checker/base.py,sha256=nS2IGjb_UFY9vFfOeL0wxLj7YYl-Rk2hv3qammV8V_k,14228
|
|
11
11
|
PyFunceble/checker/complex_json_encoder.py,sha256=zDDKTFB2R5kB-QoTFAdQJ09dXp3DUWGBWwFFoQxjVUk,3196
|
|
12
12
|
PyFunceble/checker/params_base.py,sha256=IJqWVtsD0nRDzwJ1SpxbCTpsBam8id0CUZEvVArT85g,3287
|
|
13
13
|
PyFunceble/checker/status_base.py,sha256=7ujpDw9lnqIe_2WVSNfRYFuKdslKr3Dw2HSW35JrODM,3590
|
|
14
14
|
PyFunceble/checker/availability/__init__.py,sha256=ZhJytBKoC0js52SADxNJkYvgXCKG9-OLpmZ6lfHuMas,2481
|
|
15
|
-
PyFunceble/checker/availability/base.py,sha256=
|
|
16
|
-
PyFunceble/checker/availability/domain.py,sha256=
|
|
17
|
-
PyFunceble/checker/availability/domain_and_ip.py,sha256=
|
|
15
|
+
PyFunceble/checker/availability/base.py,sha256=w6uUumrU0-LGqJqNoJrPYNmGZocXYxrcCY_53hOyL-c,40120
|
|
16
|
+
PyFunceble/checker/availability/domain.py,sha256=jcQmg_ZqrpRma6Hk1PytJ7C8uEfVHPh9xH8OWd-1LG0,8092
|
|
17
|
+
PyFunceble/checker/availability/domain_and_ip.py,sha256=z8gjPFyWibVIRO6RdVLZC9hfsXqYfYBXGyMUjnJ2j7o,6675
|
|
18
18
|
PyFunceble/checker/availability/ip.py,sha256=_A-vCoxTShR9xjpRJuKdWyXdggSQzrsxE9LuwMlW4YQ,7627
|
|
19
19
|
PyFunceble/checker/availability/params.py,sha256=7dvDTvB1NlI3eTFr1yIX1v0NU_SzTgmh3rzDjiOEQfU,3210
|
|
20
20
|
PyFunceble/checker/availability/status.py,sha256=dlIQ8rcGNyBCiWJfrCCKiHpea0XZ3Y2sS4iCoL4RcS4,5400
|
|
@@ -28,7 +28,7 @@ PyFunceble/checker/availability/extras/parked.py,sha256=r_ylA8efXj8ASb_EXmKaLrKU
|
|
|
28
28
|
PyFunceble/checker/availability/extras/rules.py,sha256=PZp79hsl2A7RY0Y0IO_ymqLShLM0NTFTvR0X6TzNpcQ,11546
|
|
29
29
|
PyFunceble/checker/availability/extras/subject_switch.py,sha256=j1f_nAC9NkJvWiXKP1nfqIm5a58iHx5Y0cBBRjUHPAs,5842
|
|
30
30
|
PyFunceble/checker/reputation/__init__.py,sha256=iS_hjva8eKqdgyyOzDoR5agcsZgEduCsh9eUDsQk-BU,2480
|
|
31
|
-
PyFunceble/checker/reputation/base.py,sha256=
|
|
31
|
+
PyFunceble/checker/reputation/base.py,sha256=JmWFMPkLGrC7C7oIxtadw-6DxZvkdL9Y-Nlc7rj7vIg,12628
|
|
32
32
|
PyFunceble/checker/reputation/domain.py,sha256=rJ5aIgNH_byy4IqqZKZLbuZUCpF-fJEbRKtG9NKPu6k,3460
|
|
33
33
|
PyFunceble/checker/reputation/domain_and_ip.py,sha256=pQRGS7a-IFf_DdjP7TXL27n90VUg6Dt_PXSl3ENpiB4,4164
|
|
34
34
|
PyFunceble/checker/reputation/ip.py,sha256=nasmBs9doJvi8EWghqFDQAXsb5PuhmSPvLU4LvT2SVU,3779
|
|
@@ -36,7 +36,7 @@ PyFunceble/checker/reputation/params.py,sha256=4EVikg27BDx2sDCzFi6KPlM0SIxPT0v_w
|
|
|
36
36
|
PyFunceble/checker/reputation/status.py,sha256=vn4NSoUTMZN_N__65-NSs_aXc-NbqEgt-fWt3f-koB8,4059
|
|
37
37
|
PyFunceble/checker/reputation/url.py,sha256=2vgamJA02MxlgvWAvFBlCBnJ_PW2hzLcGdH0l4M0bOs,4548
|
|
38
38
|
PyFunceble/checker/syntax/__init__.py,sha256=U9g1-TJ3W91F_aE80LCPokXmEdNFzYCbBgyE_BVzths,2476
|
|
39
|
-
PyFunceble/checker/syntax/base.py,sha256=
|
|
39
|
+
PyFunceble/checker/syntax/base.py,sha256=1uMmtFw-2n-xY1MVB_abTq92d2juCWySIssHOo_YlqI,4650
|
|
40
40
|
PyFunceble/checker/syntax/domain.py,sha256=wnJzv8R82nsyNDtTy4GIMUtyH-i6-loBoC3V8SB-z9M,4943
|
|
41
41
|
PyFunceble/checker/syntax/domain_and_ip.py,sha256=a7zokxjNWY3ToAGn8HYg27lS-2vo2xaRAyVGzgzD08c,3656
|
|
42
42
|
PyFunceble/checker/syntax/domain_base.py,sha256=n5EHw2iRgDsVO3VcfyZCRqB1R3gVNamFdhO1wAM2Mxk,6899
|
|
@@ -49,7 +49,7 @@ PyFunceble/checker/syntax/status.py,sha256=MW4f3T8EDeKL-SpF4IHEeWxQhH__A4FSCDKqg
|
|
|
49
49
|
PyFunceble/checker/syntax/subdomain.py,sha256=LV38_53Zk3KbPeLpNfP7f_6qTfXFybBHMe4WstdoLX0,4260
|
|
50
50
|
PyFunceble/checker/syntax/url.py,sha256=6b3CEW7JoUuW3U5EZ2fpOshETUPRMDPUOXlIzxUwRGM,4513
|
|
51
51
|
PyFunceble/checker/utils/__init__.py,sha256=H3XMmhfP8oWzwhXZrtUAzkcVoQ7eaBT-v168PzP7B1g,2462
|
|
52
|
-
PyFunceble/checker/utils/whois.py,sha256=
|
|
52
|
+
PyFunceble/checker/utils/whois.py,sha256=jaYlFPw4M1Z_xAljWD3Zo-C-BX1jhdEzTejjNiqNwW8,4241
|
|
53
53
|
PyFunceble/cli/__init__.py,sha256=aJSPStzK8t9XjrmFRx0gixMjvJwZBcB7V0Qm9gZ9GAM,2459
|
|
54
54
|
PyFunceble/cli/credential_loader.py,sha256=hNYzmnhneOX-RW-ISUIPOZR6BtHFoMfamwoop0Isnnw,10557
|
|
55
55
|
PyFunceble/cli/execution_time.py,sha256=NXvS5rBFH8Qplt4A70fMa69PZZihVRxaPqjsCbkvCPo,7223
|
|
@@ -112,7 +112,7 @@ PyFunceble/cli/migrators/mariadb/base.py,sha256=_FIR7bEav0T6zbIGm9JcnyzgbiZ4-vJU
|
|
|
112
112
|
PyFunceble/cli/migrators/mariadb/file_and_status.py,sha256=cFor7GAcCmn_vm8GXeI8_ZjhTTQcjRREb16QQVqcZHQ,7314
|
|
113
113
|
PyFunceble/cli/migrators/mariadb/whois_record_idna_subject.py,sha256=vp8T1MPb9lLSq40nz5PGfBBQ8FHeEoGRlM_Ph75iBjc,4385
|
|
114
114
|
PyFunceble/cli/processes/__init__.py,sha256=7fatRX9WDgzEZVrmiaio5-A0izU1RMTi41p6TpBvGRs,2652
|
|
115
|
-
PyFunceble/cli/processes/base.py,sha256=
|
|
115
|
+
PyFunceble/cli/processes/base.py,sha256=wRxl32EOyeOhOT1sScgS-unjirExoB5ZMyYH81ID0SQ,3036
|
|
116
116
|
PyFunceble/cli/processes/chancy_producer.py,sha256=vPvdrIKqkl2p0g5hvO5FQmDV4Hvt8Yd_Z37lbmcmQhs,3111
|
|
117
117
|
PyFunceble/cli/processes/chancy_tester.py,sha256=ZCrkX7QOSJZ23VZPg3s0DVqJjxJ-QT-QJr5K3n9DuxY,3095
|
|
118
118
|
PyFunceble/cli/processes/dir_files_sorter.py,sha256=J14pRoTxMOINdkFv70BL6AovRmwJ05VR_dtAiqBEoi4,2851
|
|
@@ -130,8 +130,8 @@ PyFunceble/cli/processes/workers/file_sorter.py,sha256=TRYcbdRbC22laJ3Wju3zCOuN2
|
|
|
130
130
|
PyFunceble/cli/processes/workers/file_sorter_base.py,sha256=giMqirqjxvGNdAyIDl1E0QfWjR0hlx28LzQfKk1DSyo,8008
|
|
131
131
|
PyFunceble/cli/processes/workers/migrator.py,sha256=aXGPxW_cZcaMxwfmXFPoqeYi4Y-K4sFWq6pwtN3qi6g,3473
|
|
132
132
|
PyFunceble/cli/processes/workers/miner.py,sha256=olP3Z-oe-nvUl2NJaEjTEjQlByFSdFmsgZL7ukXiCpY,7085
|
|
133
|
-
PyFunceble/cli/processes/workers/producer.py,sha256=
|
|
134
|
-
PyFunceble/cli/processes/workers/tester.py,sha256=
|
|
133
|
+
PyFunceble/cli/processes/workers/producer.py,sha256=ttmS0U2J_LYXo6VzjNefUOXqeCKA3xzVzVlIu_6xZdU,18129
|
|
134
|
+
PyFunceble/cli/processes/workers/tester.py,sha256=RCPwu6stKOu6fpuBuGtSifi39ZsWBgRCpFsGk5pE588,11697
|
|
135
135
|
PyFunceble/cli/scripts/__init__.py,sha256=p1aKZKkngIZiexgTByBOhn0CqkDI_OQWbZwoNvbFVH4,2443
|
|
136
136
|
PyFunceble/cli/scripts/iana.py,sha256=BN9dngD3rfQ0KeDx_scpWd8U2XAv6duIKE1ybq2MPXI,10538
|
|
137
137
|
PyFunceble/cli/scripts/production.py,sha256=FTFe7zheoDNv61gxcLlJvsDeag_yhuGMrD_FBhdrt2I,16626
|
|
@@ -139,12 +139,12 @@ PyFunceble/cli/scripts/public_suffix.py,sha256=BY0eTJbZ5NIebbz89q9V1NoULFvetWjVy
|
|
|
139
139
|
PyFunceble/cli/system/__init__.py,sha256=wBriuC2hLkzZzx9xH2Su2K-4pRaXDSv4Y-soVT10cdc,2514
|
|
140
140
|
PyFunceble/cli/system/base.py,sha256=MIrGkm8YvE0oBk3bWSs_7oVkAXAOBlm1vy7m4eWL1S4,4881
|
|
141
141
|
PyFunceble/cli/system/integrator.py,sha256=U-yEWX-1cDB2-N-mTT-3f2Q9q9RE6rVRPaBZ0UalTT4,12338
|
|
142
|
-
PyFunceble/cli/system/launcher.py,sha256=
|
|
142
|
+
PyFunceble/cli/system/launcher.py,sha256=q_zAK587y8ElfZWBfHEOuJRMkc-Dz7SlRFaZUD98yNs,49068
|
|
143
143
|
PyFunceble/cli/utils/__init__.py,sha256=yu_2nPAZ-16yYYnUIoS0bbMwscMgH0i5dB2CdcxRU_I,2457
|
|
144
144
|
PyFunceble/cli/utils/ascii_logo.py,sha256=sTtpa8OxRkGgAy_gMB8ubINyZ3ExkDna7WuN4fpa3EI,4228
|
|
145
145
|
PyFunceble/cli/utils/sort.py,sha256=fPaVucMT6xzGq27EvMtgTYHA7wC3WVez3mBQuH-NwyE,4367
|
|
146
146
|
PyFunceble/cli/utils/stdout.py,sha256=4JmrfX8sgrdarJUAlrzMG5FGU8maJBc8bHii7JcBvlM,5631
|
|
147
|
-
PyFunceble/cli/utils/testing.py,sha256=
|
|
147
|
+
PyFunceble/cli/utils/testing.py,sha256=7omJfxclbQS5ceyaTF9QKcGuUT8EjuigvJ1o6AGdLQg,9999
|
|
148
148
|
PyFunceble/cli/utils/version.py,sha256=dk4xImLNBvDM3PMhqg3h7LVDBDMUdatmEsr4o5dSM6s,13921
|
|
149
149
|
PyFunceble/config/__init__.py,sha256=RZVudb1KuB_KZ_QIKg7EyHXMDm8ULPwT63ZcOkbC9Js,2460
|
|
150
150
|
PyFunceble/config/compare.py,sha256=Ut1y-gFz2cNyYB7Z5J4Pt3jk5fHhn2YhxD03g2fkLq8,13737
|
|
@@ -204,17 +204,17 @@ PyFunceble/database/sqlalchemy/__init__.py,sha256=Cu-8bn3igMOtsRr3Eh2Op7Df4nm4s3
|
|
|
204
204
|
PyFunceble/database/sqlalchemy/all_schemas.py,sha256=2gLbvH_4bC1jHU0aC08z5IpNawwxlLfBhdkisYZGZBI,2661
|
|
205
205
|
PyFunceble/database/sqlalchemy/base_schema.py,sha256=SABdemDiteFv0l8Je0GMG8CDYwkVksGWPHORQ7XBcTc,3593
|
|
206
206
|
PyFunceble/dataset/__init__.py,sha256=xS4Kfv_pQFwTGRB0sf9M8Wta4HfDURhdvw2XXov9pjs,2461
|
|
207
|
-
PyFunceble/dataset/base.py,sha256=
|
|
208
|
-
PyFunceble/dataset/csv_base.py,sha256=
|
|
209
|
-
PyFunceble/dataset/db_base.py,sha256=
|
|
210
|
-
PyFunceble/dataset/iana.py,sha256=
|
|
211
|
-
PyFunceble/dataset/ipv4_reputation.py,sha256=
|
|
212
|
-
PyFunceble/dataset/public_suffix.py,sha256=
|
|
207
|
+
PyFunceble/dataset/base.py,sha256=m5Z6IpoMZKBpWZ7tKm4CKw1Pv48kNls2i4RA4dq6pS4,6174
|
|
208
|
+
PyFunceble/dataset/csv_base.py,sha256=yeJhK43ugzypJwpgrpVIu_PTQ2mDZC9G6PzKuuVUTtE,9926
|
|
209
|
+
PyFunceble/dataset/db_base.py,sha256=rWfEQ_s92AQEvid03P6LbZYHG3Q2j4e0CGhoTNNHJbw,11061
|
|
210
|
+
PyFunceble/dataset/iana.py,sha256=kN1mddYMyHMb-zX-0Wnkg7qbGQWd3i1wVrQr93bbJ-Y,4214
|
|
211
|
+
PyFunceble/dataset/ipv4_reputation.py,sha256=XRsj0ZUJ3FS4-n47yu4cyLuvptdUSwr4hTbC9gbOcb0,4196
|
|
212
|
+
PyFunceble/dataset/public_suffix.py,sha256=CUGLYnxPphNjy4IQni-gSaapisy8gc2_3BsLVErz2rA,4278
|
|
213
213
|
PyFunceble/dataset/sql_base.py,sha256=UQVcHFq7fPyTQu5clOeAnOah_fwfMlWxuhQqDYHc6qA,10576
|
|
214
|
-
PyFunceble/dataset/user_agent.py,sha256=
|
|
214
|
+
PyFunceble/dataset/user_agent.py,sha256=xLnpykaXEIfClGedy-maixEbYin6ZtykawpnxDecu70,9197
|
|
215
215
|
PyFunceble/dataset/autocontinue/__init__.py,sha256=3wGegJYhcs5DpJnl0hR2Z8u03iGz0Qp1PrHJ1zk-HhU,2467
|
|
216
216
|
PyFunceble/dataset/autocontinue/base.py,sha256=XBvkPIEnHCFDrkvL6Ox91ohF6IxJT14XetW6qjlbOeY,3505
|
|
217
|
-
PyFunceble/dataset/autocontinue/csv.py,sha256=
|
|
217
|
+
PyFunceble/dataset/autocontinue/csv.py,sha256=5cQBif8-zTCupaIUBx5DlRwXc1GrezhA1PYXzVKxaSI,6869
|
|
218
218
|
PyFunceble/dataset/autocontinue/sql.py,sha256=NLMenhfk2Rdvd3FMF7T1zncK8vEnGP3CrT8D0kInfzw,4277
|
|
219
219
|
PyFunceble/dataset/inactive/__init__.py,sha256=TYGknHk2j-dP6N8_WK1ESFfWG3CSyD7c0VfNydJpYmI,2476
|
|
220
220
|
PyFunceble/dataset/inactive/base.py,sha256=NmSGwiR1wJXTWKiVNYHno3V5WiSsGObUow3ptCIulmI,3248
|
|
@@ -276,9 +276,9 @@ PyFunceble/utils/__init__.py,sha256=AmqnVKTnt-IjOH2yhJzB6rrQbCy9oGSymXXk447rLd0,
|
|
|
276
276
|
PyFunceble/utils/platform.py,sha256=OSXmgySSiHJNOaFK5yvLJFB5QARWI45iqQARZx9F1D4,3912
|
|
277
277
|
PyFunceble/utils/profile.py,sha256=gk4wSFjwt6nj2ytvE2EtJJy16W7NsJwNu1HudRDngEw,4558
|
|
278
278
|
PyFunceble/utils/version.py,sha256=WEQhJcfsvhoUStFK63cLVTlTtAMW1-EZUnfH5N4AkOc,8377
|
|
279
|
-
pyfunceble_dev-4.
|
|
280
|
-
pyfunceble_dev-4.
|
|
281
|
-
pyfunceble_dev-4.
|
|
282
|
-
pyfunceble_dev-4.
|
|
283
|
-
pyfunceble_dev-4.
|
|
284
|
-
pyfunceble_dev-4.
|
|
279
|
+
pyfunceble_dev-4.4.0.dist-info/licenses/LICENSE,sha256=rE8fp-5WWAbUGya8mg2fMTIkcw3fPA1PNG86URxH3U4,10802
|
|
280
|
+
pyfunceble_dev-4.4.0.dist-info/METADATA,sha256=Rst02xbb0ESu_6Bay5KhWv5WqeOmyx66V8wLhaNiSuE,47752
|
|
281
|
+
pyfunceble_dev-4.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
282
|
+
pyfunceble_dev-4.4.0.dist-info/entry_points.txt,sha256=Ic1suwopOi_XTgiQi2ErtpY5xT3R8EFMI6B_ONDuR9E,201
|
|
283
|
+
pyfunceble_dev-4.4.0.dist-info/top_level.txt,sha256=J7GBKIiNYv93m1AxLy8_gr6ExXyZbMmCVXHMQBTUq2Y,11
|
|
284
|
+
pyfunceble_dev-4.4.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|