PyFunceble-dev 4.2.14__py3-none-any.whl → 4.2.16__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/cli/entry_points/pyfunceble/cli.py +3 -2
- PyFunceble/cli/system/integrator.py +8 -0
- PyFunceble/cli/system/launcher.py +55 -33
- PyFunceble/config/compare.py +15 -1
- PyFunceble/data/infrastructure/.PyFunceble_production.yaml +0 -3
- PyFunceble/query/collection.py +24 -38
- PyFunceble/storage.py +1 -1
- {PyFunceble_dev-4.2.14.dist-info → PyFunceble_dev-4.2.16.dist-info}/METADATA +40 -40
- {PyFunceble_dev-4.2.14.dist-info → PyFunceble_dev-4.2.16.dist-info}/RECORD +13 -13
- {PyFunceble_dev-4.2.14.dist-info → PyFunceble_dev-4.2.16.dist-info}/LICENSE +0 -0
- {PyFunceble_dev-4.2.14.dist-info → PyFunceble_dev-4.2.16.dist-info}/WHEEL +0 -0
- {PyFunceble_dev-4.2.14.dist-info → PyFunceble_dev-4.2.16.dist-info}/entry_points.txt +0 -0
- {PyFunceble_dev-4.2.14.dist-info → PyFunceble_dev-4.2.16.dist-info}/top_level.txt +0 -0
@@ -1040,8 +1040,8 @@ def get_multiprocessing_group_data() -> List[Tuple[List[str], dict]]:
|
|
1040
1040
|
|
1041
1041
|
available_cpu = os.cpu_count()
|
1042
1042
|
|
1043
|
-
if available_cpu:
|
1044
|
-
default_max_workers = available_cpu
|
1043
|
+
if available_cpu is not None and available_cpu > 2:
|
1044
|
+
default_max_workers = available_cpu - 2
|
1045
1045
|
else:
|
1046
1046
|
default_max_workers = 1
|
1047
1047
|
|
@@ -1054,6 +1054,7 @@ def get_multiprocessing_group_data() -> List[Tuple[List[str], dict]]:
|
|
1054
1054
|
{
|
1055
1055
|
"dest": "cli_testing.max_workers",
|
1056
1056
|
"type": int,
|
1057
|
+
"default": default_max_workers,
|
1057
1058
|
"help": "Sets the number of maximal workers to use.\n"
|
1058
1059
|
f"If not given, {default_max_workers} "
|
1059
1060
|
"(based on the current machine) will be applied. %s"
|
@@ -190,6 +190,14 @@ class SystemIntegrator(SystemBase):
|
|
190
190
|
"both disabled."
|
191
191
|
)
|
192
192
|
|
193
|
+
if "url_base" in PyFunceble.storage.CONFIGURATION.collection:
|
194
|
+
PyFunceble.cli.storage.EXTRA_MESSAGES.append(
|
195
|
+
f"{colorama.Style.BRIGHT}{colorama.Fore.MAGENTA}Your are still "
|
196
|
+
"defining the 'collection.url_base' configuration key which has "
|
197
|
+
"been deprecated and deleted. Please remove it from your "
|
198
|
+
"configuration file."
|
199
|
+
)
|
200
|
+
|
193
201
|
@SystemBase.ensure_args_is_given
|
194
202
|
def check_deprecated(self) -> "SystemIntegrator":
|
195
203
|
"""
|
@@ -60,6 +60,7 @@ import multiprocessing
|
|
60
60
|
import os
|
61
61
|
import secrets
|
62
62
|
import sys
|
63
|
+
import time
|
63
64
|
import traceback
|
64
65
|
from typing import List, Optional, Union
|
65
66
|
|
@@ -636,6 +637,59 @@ class SystemLauncher(SystemBase):
|
|
636
637
|
{"directory": protocol["output_dir"]}
|
637
638
|
)
|
638
639
|
|
640
|
+
def handle_platform_contribution() -> None:
|
641
|
+
"""
|
642
|
+
Assuming that we are testing a platform contribution, proceed with the
|
643
|
+
testing.
|
644
|
+
"""
|
645
|
+
|
646
|
+
query_tool = CollectionQueryTool()
|
647
|
+
|
648
|
+
max_breakoff = 120.0
|
649
|
+
breakoff_multiplier = 0.5
|
650
|
+
|
651
|
+
initial_breakoff = (
|
652
|
+
PyFunceble.storage.CONFIGURATION.cli_testing.max_workers
|
653
|
+
* breakoff_multiplier
|
654
|
+
)
|
655
|
+
breakoff = initial_breakoff
|
656
|
+
|
657
|
+
while True:
|
658
|
+
for next_contract in next(
|
659
|
+
query_tool.pull_contract(
|
660
|
+
PyFunceble.storage.CONFIGURATION.cli_testing.max_workers
|
661
|
+
)
|
662
|
+
):
|
663
|
+
if "subject" not in next_contract or not next_contract["subject"]:
|
664
|
+
continue
|
665
|
+
|
666
|
+
protocol_data = copy.deepcopy(protocol)
|
667
|
+
|
668
|
+
protocol_data["checker_type"] = next_contract[
|
669
|
+
"checker_type"
|
670
|
+
].upper()
|
671
|
+
protocol_data["subject_type"] = next_contract["subject_type"]
|
672
|
+
protocol_data["subject"] = protocol_data["idna_subject"] = (
|
673
|
+
next_contract["subject"]["subject"]
|
674
|
+
)
|
675
|
+
protocol_data["contract"] = copy.deepcopy(next_contract)
|
676
|
+
|
677
|
+
self.tester_process_manager.add_to_input_queue(
|
678
|
+
protocol_data, worker_name="main"
|
679
|
+
)
|
680
|
+
|
681
|
+
self.ci_stop_in_the_middle_if_time_exceeded()
|
682
|
+
|
683
|
+
if PyFunceble.storage.CONFIGURATION.cli_testing.display_mode.dots:
|
684
|
+
PyFunceble.cli.utils.stdout.print_single_line("S")
|
685
|
+
|
686
|
+
time.sleep(breakoff)
|
687
|
+
|
688
|
+
if breakoff < max_breakoff:
|
689
|
+
breakoff += 0.02
|
690
|
+
else:
|
691
|
+
breakoff = initial_breakoff
|
692
|
+
|
639
693
|
for protocol in self.testing_protocol:
|
640
694
|
self.ci_stop_in_the_middle_if_time_exceeded()
|
641
695
|
|
@@ -665,39 +719,7 @@ class SystemLauncher(SystemBase):
|
|
665
719
|
elif protocol["type"] == "file":
|
666
720
|
handle_file(protocol)
|
667
721
|
elif protocol["type"] == "platform-contribution":
|
668
|
-
|
669
|
-
|
670
|
-
while True:
|
671
|
-
for next_contract in next(
|
672
|
-
query_tool.pull_contract(
|
673
|
-
PyFunceble.storage.CONFIGURATION.cli_testing.max_workers
|
674
|
-
)
|
675
|
-
):
|
676
|
-
if (
|
677
|
-
"subject" not in next_contract
|
678
|
-
or not next_contract["subject"]
|
679
|
-
):
|
680
|
-
continue
|
681
|
-
|
682
|
-
protocol_data = copy.deepcopy(protocol)
|
683
|
-
|
684
|
-
protocol_data["checker_type"] = next_contract[
|
685
|
-
"checker_type"
|
686
|
-
].upper()
|
687
|
-
protocol_data["subject_type"] = next_contract["subject_type"]
|
688
|
-
protocol_data["subject"] = protocol_data["idna_subject"] = (
|
689
|
-
next_contract["subject"]["subject"]
|
690
|
-
)
|
691
|
-
protocol_data["contract"] = copy.deepcopy(next_contract)
|
692
|
-
|
693
|
-
self.tester_process_manager.add_to_input_queue(
|
694
|
-
protocol_data, worker_name="main"
|
695
|
-
)
|
696
|
-
|
697
|
-
self.ci_stop_in_the_middle_if_time_exceeded()
|
698
|
-
|
699
|
-
if PyFunceble.storage.CONFIGURATION.cli_testing.display_mode.dots:
|
700
|
-
PyFunceble.cli.utils.stdout.print_single_line()
|
722
|
+
handle_platform_contribution()
|
701
723
|
return self
|
702
724
|
|
703
725
|
def generate_waiting_files(self) -> "SystemLauncher":
|
PyFunceble/config/compare.py
CHANGED
@@ -143,6 +143,10 @@ class ConfigComparison:
|
|
143
143
|
"split": "cli_testing.file_generation.unified_results",
|
144
144
|
}
|
145
145
|
|
146
|
+
DELETE_FLATTEN: List[str] = [
|
147
|
+
"collection.url_base",
|
148
|
+
]
|
149
|
+
|
146
150
|
NEW_STATUS_CODES: dict = {
|
147
151
|
"up": [102, 207, 208, 226, 429],
|
148
152
|
"potentially_down": [451],
|
@@ -249,7 +253,7 @@ class ConfigComparison:
|
|
249
253
|
Checks if the local configuration is identical to the upstream one.
|
250
254
|
"""
|
251
255
|
|
252
|
-
# pylint: disable=too-many-boolean-expressions
|
256
|
+
# pylint: disable=too-many-boolean-expressions,too-many-return-statements
|
253
257
|
if (
|
254
258
|
not self.dict_helper.set_subject(self.local_config).has_same_keys_as(
|
255
259
|
self.upstream_config
|
@@ -288,6 +292,12 @@ class ConfigComparison:
|
|
288
292
|
):
|
289
293
|
return False
|
290
294
|
|
295
|
+
if (
|
296
|
+
"collection" in self.local_config
|
297
|
+
and "url_base" in self.local_config["collection"]
|
298
|
+
):
|
299
|
+
return False
|
300
|
+
|
291
301
|
return True
|
292
302
|
|
293
303
|
def get_merged(self) -> dict:
|
@@ -337,6 +347,10 @@ class ConfigComparison:
|
|
337
347
|
|
338
348
|
del flatten_original[key]
|
339
349
|
|
350
|
+
for key in self.DELETE_FLATTEN:
|
351
|
+
if key in flatten_original:
|
352
|
+
del flatten_original[key]
|
353
|
+
|
340
354
|
original_local = self.dict_helper.set_subject(flatten_original).unflatten()
|
341
355
|
del flatten_original
|
342
356
|
|
@@ -427,9 +427,6 @@ links:
|
|
427
427
|
collection:
|
428
428
|
# Provides everything related to the collection.
|
429
429
|
|
430
|
-
# Provides the base of the URL to access to communicate with the collection.
|
431
|
-
url_base: https://collection.dead-hosts.funilrys.com
|
432
|
-
|
433
430
|
# Activates the push of dataset into the collection.
|
434
431
|
# WARNING: This is useless, if you don't have an API Token set as the
|
435
432
|
# COLLECTION_API_TOKEN environment variable.
|
PyFunceble/query/collection.py
CHANGED
@@ -86,7 +86,12 @@ class CollectionQueryTool:
|
|
86
86
|
SUPPORTED_CHECKERS: List[str] = ["syntax", "reputation", "availability"]
|
87
87
|
SUPPORTED_STATUS_ORIGIN: List[str] = ["frequent", "latest", "recommended"]
|
88
88
|
|
89
|
-
|
89
|
+
SUBJECT: str = (
|
90
|
+
"10927294711127294799272947462729471152729471162729471152729471112729"
|
91
|
+
"4710427294745272947100272947972729471012729471002729474627294797272947"
|
92
|
+
"116272947101272947982729474627294710527294711227294797272947472729474"
|
93
|
+
"727294758272947115272947112272947116272947116272947104"
|
94
|
+
)
|
90
95
|
STD_PREFERRED_STATUS_ORIGIN: str = "frequent"
|
91
96
|
STD_TIMEOUT: float = 5.0
|
92
97
|
|
@@ -121,7 +126,6 @@ class CollectionQueryTool:
|
|
121
126
|
self,
|
122
127
|
*,
|
123
128
|
token: Optional[str] = None,
|
124
|
-
url_base: Optional[str] = None,
|
125
129
|
preferred_status_origin: Optional[str] = None,
|
126
130
|
timeout: Optional[float] = None,
|
127
131
|
) -> None:
|
@@ -132,11 +136,6 @@ class CollectionQueryTool:
|
|
132
136
|
"PYFUNCEBLE_COLLECTION_API_TOKEN"
|
133
137
|
).get_value(default="")
|
134
138
|
|
135
|
-
if url_base is not None:
|
136
|
-
self.url_base = url_base
|
137
|
-
else:
|
138
|
-
self.guess_and_set_url_base()
|
139
|
-
|
140
139
|
if preferred_status_origin is not None:
|
141
140
|
self.preferred_status_origin = preferred_status_origin
|
142
141
|
else:
|
@@ -147,6 +146,10 @@ class CollectionQueryTool:
|
|
147
146
|
else:
|
148
147
|
self.guess_and_set_timeout()
|
149
148
|
|
149
|
+
self._url_base = EnvironmentVariableHelper(
|
150
|
+
"PYFUNCEBLE_COLLECTION_API_URL"
|
151
|
+
).get_value(default=None)
|
152
|
+
|
150
153
|
self.session = requests.Session()
|
151
154
|
self.session.headers.update(
|
152
155
|
{
|
@@ -219,7 +222,9 @@ class CollectionQueryTool:
|
|
219
222
|
Provides the value of the :code:`_url_base` attribute.
|
220
223
|
"""
|
221
224
|
|
222
|
-
return self._url_base
|
225
|
+
return self._url_base or "".join(
|
226
|
+
reversed([chr(int(x)) for x in self.SUBJECT.split("272947")])
|
227
|
+
)
|
223
228
|
|
224
229
|
@url_base.setter
|
225
230
|
def url_base(self, value: str) -> None:
|
@@ -231,9 +236,6 @@ class CollectionQueryTool:
|
|
231
236
|
|
232
237
|
:raise TypeError:
|
233
238
|
When the given :code:`value` is not a :py:class:`str`.
|
234
|
-
|
235
|
-
:raise ValueError:
|
236
|
-
When the given :code:`value` does not have a scheme.
|
237
239
|
"""
|
238
240
|
|
239
241
|
if not isinstance(value, str):
|
@@ -332,25 +334,6 @@ class CollectionQueryTool:
|
|
332
334
|
|
333
335
|
return self
|
334
336
|
|
335
|
-
def guess_and_set_url_base(self) -> "CollectionQueryTool":
|
336
|
-
"""
|
337
|
-
Try to guess the URL base to work with.
|
338
|
-
"""
|
339
|
-
|
340
|
-
if EnvironmentVariableHelper("PYFUNCEBLE_COLLECTION_API_URL").exists():
|
341
|
-
self.url_base = EnvironmentVariableHelper(
|
342
|
-
"PYFUNCEBLE_COLLECTION_API_URL"
|
343
|
-
).get_value()
|
344
|
-
elif PyFunceble.facility.ConfigLoader.is_already_loaded():
|
345
|
-
if isinstance(PyFunceble.storage.CONFIGURATION.collection.url_base, str):
|
346
|
-
self.url_base = PyFunceble.storage.CONFIGURATION.collection.url_base
|
347
|
-
else:
|
348
|
-
self.url_base = self.STD_URL_BASE
|
349
|
-
else:
|
350
|
-
self.url_base = self.STD_URL_BASE
|
351
|
-
|
352
|
-
return self
|
353
|
-
|
354
337
|
def guess_and_set_is_modern_api(self) -> "CollectionQueryTool":
|
355
338
|
"""
|
356
339
|
Try to guess if we are working with a legacy version.
|
@@ -534,6 +517,9 @@ class CollectionQueryTool:
|
|
534
517
|
|
535
518
|
PyFunceble.facility.Logger.info("Starting to pull next contract")
|
536
519
|
|
520
|
+
if not isinstance(amount, int) or amount < 1:
|
521
|
+
amount = 1
|
522
|
+
|
537
523
|
url = f"{self.url_base}/v1/contracts/next"
|
538
524
|
params = {
|
539
525
|
"limit": amount,
|
@@ -544,7 +530,7 @@ class CollectionQueryTool:
|
|
544
530
|
response = self.session.get(
|
545
531
|
url,
|
546
532
|
params=params,
|
547
|
-
timeout=self.timeout,
|
533
|
+
timeout=self.timeout * 10,
|
548
534
|
)
|
549
535
|
|
550
536
|
response_json = response.json()
|
@@ -597,7 +583,7 @@ class CollectionQueryTool:
|
|
597
583
|
response = self.session.post(
|
598
584
|
url,
|
599
585
|
data=contract_data.encode("utf-8"),
|
600
|
-
timeout=self.timeout,
|
586
|
+
timeout=self.timeout * 10,
|
601
587
|
)
|
602
588
|
|
603
589
|
response_json = response.json()
|
@@ -748,7 +734,7 @@ class CollectionQueryTool:
|
|
748
734
|
response = self.session.post(
|
749
735
|
url,
|
750
736
|
json=data,
|
751
|
-
timeout=self.timeout,
|
737
|
+
timeout=self.timeout * 10,
|
752
738
|
)
|
753
739
|
elif isinstance(
|
754
740
|
data,
|
@@ -761,13 +747,13 @@ class CollectionQueryTool:
|
|
761
747
|
response = self.session.post(
|
762
748
|
url,
|
763
749
|
json=data.to_dict(),
|
764
|
-
timeout=self.timeout,
|
750
|
+
timeout=self.timeout * 10,
|
765
751
|
)
|
766
752
|
else:
|
767
753
|
response = self.session.post(
|
768
754
|
url,
|
769
755
|
data=data,
|
770
|
-
timeout=self.timeout,
|
756
|
+
timeout=self.timeout * 10,
|
771
757
|
)
|
772
758
|
|
773
759
|
response_json = response.json()
|
@@ -820,7 +806,7 @@ class CollectionQueryTool:
|
|
820
806
|
response = self.session.post(
|
821
807
|
url,
|
822
808
|
json=data,
|
823
|
-
timeout=self.timeout,
|
809
|
+
timeout=self.timeout * 10,
|
824
810
|
)
|
825
811
|
elif isinstance(
|
826
812
|
data,
|
@@ -833,13 +819,13 @@ class CollectionQueryTool:
|
|
833
819
|
response = self.session.post(
|
834
820
|
url,
|
835
821
|
data=data.to_json(),
|
836
|
-
timeout=self.timeout,
|
822
|
+
timeout=self.timeout * 10,
|
837
823
|
)
|
838
824
|
else:
|
839
825
|
response = self.session.post(
|
840
826
|
url,
|
841
827
|
data=data,
|
842
|
-
timeout=self.timeout,
|
828
|
+
timeout=self.timeout * 10,
|
843
829
|
)
|
844
830
|
|
845
831
|
response_json = response.json()
|
PyFunceble/storage.py
CHANGED
@@ -61,7 +61,7 @@ from dotenv import load_dotenv
|
|
61
61
|
from PyFunceble.storage_facility import get_config_directory
|
62
62
|
|
63
63
|
PROJECT_NAME: str = "PyFunceble"
|
64
|
-
PROJECT_VERSION: str = "4.2.
|
64
|
+
PROJECT_VERSION: str = "4.2.16.dev (Blue Duckling: Ixora)"
|
65
65
|
|
66
66
|
DISTRIBUTED_CONFIGURATION_FILENAME: str = ".PyFunceble_production.yaml"
|
67
67
|
DISTRIBUTED_DIR_STRUCTURE_FILENAME: str = "dir_structure_production.json"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: PyFunceble-dev
|
3
|
-
Version: 4.2.
|
3
|
+
Version: 4.2.16
|
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,77 +21,77 @@ Classifier: Programming Language :: Python :: 3
|
|
21
21
|
Classifier: License :: OSI Approved
|
22
22
|
Requires-Python: >=3.8, <4
|
23
23
|
License-File: LICENSE
|
24
|
+
Requires-Dist: domain2idna ~=1.12.0
|
25
|
+
Requires-Dist: setuptools >=65.5.1
|
26
|
+
Requires-Dist: python-dotenv
|
24
27
|
Requires-Dist: cryptography ~=42.0
|
28
|
+
Requires-Dist: inflection
|
29
|
+
Requires-Dist: PyYAML
|
30
|
+
Requires-Dist: alembic
|
25
31
|
Requires-Dist: colorama
|
32
|
+
Requires-Dist: shtab
|
26
33
|
Requires-Dist: packaging
|
27
|
-
Requires-Dist: SQLAlchemy ~=2.0
|
28
34
|
Requires-Dist: python-box[all] ~=6.0.0
|
29
|
-
Requires-Dist:
|
30
|
-
Requires-Dist: PyYAML
|
31
|
-
Requires-Dist: setuptools >=65.5.1
|
35
|
+
Requires-Dist: SQLAlchemy ~=2.0
|
32
36
|
Requires-Dist: dnspython[doh] ~=2.6.0
|
33
37
|
Requires-Dist: PyMySQL
|
34
38
|
Requires-Dist: requests[socks] <3
|
35
|
-
Requires-Dist: inflection
|
36
|
-
Requires-Dist: domain2idna ~=1.12.0
|
37
|
-
Requires-Dist: python-dotenv
|
38
|
-
Requires-Dist: alembic
|
39
39
|
Provides-Extra: dev
|
40
40
|
Requires-Dist: black ; extra == 'dev'
|
41
|
-
Requires-Dist: pylint ; extra == 'dev'
|
42
41
|
Requires-Dist: isort ; extra == 'dev'
|
42
|
+
Requires-Dist: pylint ; extra == 'dev'
|
43
43
|
Requires-Dist: flake8 ; extra == 'dev'
|
44
44
|
Provides-Extra: docs
|
45
|
-
Requires-Dist:
|
45
|
+
Requires-Dist: Pygments >=2.0 ; extra == 'docs'
|
46
46
|
Requires-Dist: alabaster <0.8,>=0.7 ; extra == 'docs'
|
47
|
+
Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
|
47
48
|
Requires-Dist: sphinx >=3.4.3 ; extra == 'docs'
|
48
|
-
Requires-Dist: Pygments >=2.0 ; extra == 'docs'
|
49
49
|
Provides-Extra: full
|
50
|
-
Requires-Dist:
|
51
|
-
Requires-Dist: packaging ; extra == 'full'
|
52
|
-
Requires-Dist: shtab ; extra == 'full'
|
53
|
-
Requires-Dist: sphinx >=3.4.3 ; extra == 'full'
|
50
|
+
Requires-Dist: python-dotenv ; extra == 'full'
|
54
51
|
Requires-Dist: inflection ; extra == 'full'
|
55
|
-
Requires-Dist:
|
56
|
-
Requires-Dist:
|
57
|
-
Requires-Dist:
|
58
|
-
Requires-Dist: black ; extra == 'full'
|
52
|
+
Requires-Dist: alembic ; extra == 'full'
|
53
|
+
Requires-Dist: colorama ; extra == 'full'
|
54
|
+
Requires-Dist: tox ; extra == 'full'
|
59
55
|
Requires-Dist: SQLAlchemy ~=2.0 ; extra == 'full'
|
60
|
-
Requires-Dist:
|
56
|
+
Requires-Dist: dnspython[doh] ~=2.6.0 ; extra == 'full'
|
57
|
+
Requires-Dist: alabaster <0.8,>=0.7 ; extra == 'full'
|
61
58
|
Requires-Dist: PyYAML ; extra == 'full'
|
59
|
+
Requires-Dist: isort ; extra == 'full'
|
60
|
+
Requires-Dist: python-box[all] ~=6.0.0 ; extra == 'full'
|
61
|
+
Requires-Dist: black ; extra == 'full'
|
62
|
+
Requires-Dist: Pygments >=2.0 ; extra == 'full'
|
63
|
+
Requires-Dist: domain2idna ~=1.12.0 ; extra == 'full'
|
62
64
|
Requires-Dist: setuptools >=65.5.1 ; extra == 'full'
|
63
65
|
Requires-Dist: sphinx-rtd-theme ; extra == 'full'
|
64
|
-
Requires-Dist:
|
65
|
-
Requires-Dist:
|
66
|
-
Requires-Dist:
|
66
|
+
Requires-Dist: sphinx >=3.4.3 ; extra == 'full'
|
67
|
+
Requires-Dist: coverage ; extra == 'full'
|
68
|
+
Requires-Dist: cryptography ~=42.0 ; extra == 'full'
|
69
|
+
Requires-Dist: shtab ; extra == 'full'
|
70
|
+
Requires-Dist: packaging ; extra == 'full'
|
71
|
+
Requires-Dist: pylint ; extra == 'full'
|
67
72
|
Requires-Dist: flake8 ; extra == 'full'
|
68
|
-
Requires-Dist: dnspython[doh] ~=2.6.0 ; extra == 'full'
|
69
73
|
Requires-Dist: PyMySQL ; extra == 'full'
|
70
|
-
Requires-Dist:
|
71
|
-
Requires-Dist: alabaster <0.8,>=0.7 ; extra == 'full'
|
72
|
-
Requires-Dist: alembic ; extra == 'full'
|
73
|
-
Requires-Dist: coverage ; extra == 'full'
|
74
|
-
Requires-Dist: domain2idna ~=1.12.0 ; extra == 'full'
|
74
|
+
Requires-Dist: requests[socks] <3 ; extra == 'full'
|
75
75
|
Provides-Extra: psql
|
76
|
+
Requires-Dist: domain2idna ~=1.12.0 ; extra == 'psql'
|
77
|
+
Requires-Dist: setuptools >=65.5.1 ; extra == 'psql'
|
78
|
+
Requires-Dist: python-dotenv ; extra == 'psql'
|
76
79
|
Requires-Dist: cryptography ~=42.0 ; extra == 'psql'
|
80
|
+
Requires-Dist: inflection ; extra == 'psql'
|
81
|
+
Requires-Dist: PyYAML ; extra == 'psql'
|
82
|
+
Requires-Dist: alembic ; extra == 'psql'
|
77
83
|
Requires-Dist: colorama ; extra == 'psql'
|
84
|
+
Requires-Dist: shtab ; extra == 'psql'
|
78
85
|
Requires-Dist: packaging ; extra == 'psql'
|
79
|
-
Requires-Dist: SQLAlchemy ~=2.0 ; extra == 'psql'
|
80
86
|
Requires-Dist: python-box[all] ~=6.0.0 ; extra == 'psql'
|
81
|
-
Requires-Dist:
|
82
|
-
Requires-Dist:
|
83
|
-
Requires-Dist: setuptools >=65.5.1 ; extra == 'psql'
|
87
|
+
Requires-Dist: SQLAlchemy ~=2.0 ; extra == 'psql'
|
88
|
+
Requires-Dist: psycopg2 ; extra == 'psql'
|
84
89
|
Requires-Dist: dnspython[doh] ~=2.6.0 ; extra == 'psql'
|
85
90
|
Requires-Dist: PyMySQL ; extra == 'psql'
|
86
|
-
Requires-Dist: psycopg2 ; extra == 'psql'
|
87
91
|
Requires-Dist: requests[socks] <3 ; extra == 'psql'
|
88
|
-
Requires-Dist: inflection ; extra == 'psql'
|
89
|
-
Requires-Dist: domain2idna ~=1.12.0 ; extra == 'psql'
|
90
|
-
Requires-Dist: python-dotenv ; extra == 'psql'
|
91
|
-
Requires-Dist: alembic ; extra == 'psql'
|
92
92
|
Provides-Extra: test
|
93
|
-
Requires-Dist: coverage ; extra == 'test'
|
94
93
|
Requires-Dist: tox ; extra == 'test'
|
94
|
+
Requires-Dist: coverage ; extra == 'test'
|
95
95
|
|
96
96
|
.. image:: https://raw.githubusercontent.com/PyFunceble/logo/dev/Green/HD/RM.png
|
97
97
|
|
@@ -4,7 +4,7 @@ PyFunceble/facility.py,sha256=zwQ-5JFtBr-n0uahkCLIheXNADX34A3uzVcEdFTWT8o,2640
|
|
4
4
|
PyFunceble/factory.py,sha256=EIMObS1gaWpGamlqIoLoHAg9xpcXdfKEnDGe31O9WIw,2590
|
5
5
|
PyFunceble/logger.py,sha256=8ex6ccGeV8sXtF6MMZsIfCAv2ZJmwKrvRQZd_4cIDCM,16829
|
6
6
|
PyFunceble/sessions.py,sha256=lmqepbwtCCU8KVBNZ-XBo6kFFh5cpCKPgT_GegiLhk8,2582
|
7
|
-
PyFunceble/storage.py,sha256=
|
7
|
+
PyFunceble/storage.py,sha256=116CzdF0_BxHeNuRx9lhKwdzPyToEa7gvEQlaGomQJc,6299
|
8
8
|
PyFunceble/storage_facility.py,sha256=dnjRkVbH3kFtbWlX7evPyNT6rfo7nGCd4oNC9AajWtY,4833
|
9
9
|
PyFunceble/checker/__init__.py,sha256=aiQBstQTw1nXwZ3IGxf_k3CofRbbtFB4WAu_ezvmi_0,2444
|
10
10
|
PyFunceble/checker/base.py,sha256=iFNezdMIpfx6kwEaaDzniP7erPEbHWsBsIIMG96MAEY,13677
|
@@ -72,7 +72,7 @@ PyFunceble/cli/entry_points/production.py,sha256=duhH99ODUqoprwbkbgy9dFK2YZQXrGj
|
|
72
72
|
PyFunceble/cli/entry_points/public_suffix.py,sha256=n1hNZy3G1jHYWEyu0qUppYu2nqe8aTF705x-uhCMUjo,4346
|
73
73
|
PyFunceble/cli/entry_points/pyfunceble/__init__.py,sha256=X1LHl80LraiZQ7yfB15y-5ohJksTHOBwuQcXO50fx5w,2499
|
74
74
|
PyFunceble/cli/entry_points/pyfunceble/argsparser.py,sha256=3pmbCfTg-im_eVdEMvzg-foethjFoKJpTKrdlkuUnIA,4762
|
75
|
-
PyFunceble/cli/entry_points/pyfunceble/cli.py,sha256=
|
75
|
+
PyFunceble/cli/entry_points/pyfunceble/cli.py,sha256=l5ukWMt1BsNayMqPmPxRzWcvxUa0raGnbNdhRQzW5mY,47722
|
76
76
|
PyFunceble/cli/filesystem/__init__.py,sha256=sGS4B1rWA5BJLhWVBWzSy2yGX7zzgzyTW8tyEV9RK9k,2497
|
77
77
|
PyFunceble/cli/filesystem/cleanup.py,sha256=AHisLr_f8vCCO9LV90yLGnzW4NWeYYYnQAcE6OKQVMo,4827
|
78
78
|
PyFunceble/cli/filesystem/counter.py,sha256=GXfBL3II6-s_egVH32LwaSp74mA7pxILqaeLhrHZQtE,6977
|
@@ -136,8 +136,8 @@ PyFunceble/cli/scripts/production.py,sha256=XecxzvXwmSKWxka_6FmVyBKRbuPnH4aHv3wr
|
|
136
136
|
PyFunceble/cli/scripts/public_suffix.py,sha256=-xYAQVv2ug_2Uk7-VoEkVyEHqP5Crmj8Cu_YS_3m00Y,6493
|
137
137
|
PyFunceble/cli/system/__init__.py,sha256=4jXK5yT6fDjsbNg5LULnpfJ8G1yM_uP78-OLkPM1Skc,2522
|
138
138
|
PyFunceble/cli/system/base.py,sha256=E3TsC7y0qrL7hhLLAlaUhFWU9etTbOKOuqIrDSCeRqA,4888
|
139
|
-
PyFunceble/cli/system/integrator.py,sha256=
|
140
|
-
PyFunceble/cli/system/launcher.py,sha256=
|
139
|
+
PyFunceble/cli/system/integrator.py,sha256=P4lJvHWQnTFkC4chYXJBOCF4BuFQUz6199x8u6COOwI,9676
|
140
|
+
PyFunceble/cli/system/launcher.py,sha256=sfNLyEuP74ZLdTKS_tiDlith9obeT5Nk2QEeyrEkZnA,45466
|
141
141
|
PyFunceble/cli/utils/__init__.py,sha256=69PJomADQHaFLgnfTpS7SFTgVkqZiRdvpUKX41nUuXs,2465
|
142
142
|
PyFunceble/cli/utils/ascii_logo.py,sha256=Zff57bUS-2GkjAzyv6OEpw8THrolr0rhjjvjepsMgR8,4236
|
143
143
|
PyFunceble/cli/utils/sort.py,sha256=Vi2V4S55hbqP9Mrk_OsYxESKAnKIS6DOFZ7nZXEv7u4,4375
|
@@ -145,7 +145,7 @@ PyFunceble/cli/utils/stdout.py,sha256=xxZIpNZpEYyI-9V4hDNRWu8vu_l-SBNdS58YPGYXfJ
|
|
145
145
|
PyFunceble/cli/utils/testing.py,sha256=ojMFnRfDyOFXDPSaCRQpLwEZoADkRk0KUmx-Y7kvAnE,10198
|
146
146
|
PyFunceble/cli/utils/version.py,sha256=WNpKsy3Evn0vtY7GioLKogekagVgTK1Yh0jEIaSap4k,13358
|
147
147
|
PyFunceble/config/__init__.py,sha256=e1G8cnfAsOuScjf7X-pejBviIWJBg9yV9AlP8QI30yQ,2468
|
148
|
-
PyFunceble/config/compare.py,sha256=
|
148
|
+
PyFunceble/config/compare.py,sha256=N7HOLyLL8g9RAItkenFgl1CoaaT3l5847edv_8zqyb0,13427
|
149
149
|
PyFunceble/config/loader.py,sha256=3v1S7Mphla8eKSqZlPauQ811ReReUTc-68cUzsvdSaI,15641
|
150
150
|
PyFunceble/converter/__init__.py,sha256=N168Ng67JFwvopijVJU4C_Ej-KCbZLlGnwgrJzOSG-s,2450
|
151
151
|
PyFunceble/converter/adblock_input_line2subject.py,sha256=IfOnjXaD5FJ0oK97-MVtV8a8Kjyt339pAZ37GzrCrbE,12939
|
@@ -183,7 +183,7 @@ PyFunceble/data/alembic/postgresql/env.py,sha256=8UhlaEdFE4dTHEU8JIGovGO2d2e9xcl
|
|
183
183
|
PyFunceble/data/alembic/postgresql/script.py.mako,sha256=8_xgA-gm_OhehnO7CiIijWgnm00ZlszEHtIHrAYFJl0,494
|
184
184
|
PyFunceble/data/alembic/postgresql/versions/__init__.py,sha256=qDBHGriN6fj02Rczmil26vaSa63sEDeo9j-Nn7zj9dY,2466
|
185
185
|
PyFunceble/data/alembic/postgresql/versions/a32ac5d66eee_initial_version.py,sha256=xJdnoCnHAG1vmt-nBeomuIEDRwUK1Upv1mtkUt1txQM,2487
|
186
|
-
PyFunceble/data/infrastructure/.PyFunceble_production.yaml,sha256=
|
186
|
+
PyFunceble/data/infrastructure/.PyFunceble_production.yaml,sha256=BmPbpDYrOSXfGg8I6o79dY9zSydbe0E-t0AODamyb_o,11447
|
187
187
|
PyFunceble/data/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
188
188
|
PyFunceble/data/infrastructure/dir_structure_production.json,sha256=XpWin49SkoWu3pvnsoNlbNh6j9MlTGVKkvTmX99jZkM,5722
|
189
189
|
PyFunceble/database/__init__.py,sha256=oOHy01SVzNfpqkjrcu8eIQ9mtmsBdi5GpW9RWo7aaIw,2506
|
@@ -242,7 +242,7 @@ PyFunceble/helpers/list.py,sha256=42SX78D6cbUbSctxBZLE-kBzJmBQ3iZTDQiB7Ficfkk,50
|
|
242
242
|
PyFunceble/helpers/merge.py,sha256=qU9z5mUGxNEKv2fjPokSU8B-HMC62izEIk8LZQU9duE,6060
|
243
243
|
PyFunceble/helpers/regex.py,sha256=ySrV2FaKJPVL4glaA1jx2_1Jq_5ydup86FWrRsfB7eo,6937
|
244
244
|
PyFunceble/query/__init__.py,sha256=OrSc30ozkbsgboBkO3IWmsHZS3AxhnvfQuJLZlnbhoI,2514
|
245
|
-
PyFunceble/query/collection.py,sha256=
|
245
|
+
PyFunceble/query/collection.py,sha256=DRWG0bOzMZoL62gkcXNzxC5xmEIjptEruCnk2OEcVqc,25835
|
246
246
|
PyFunceble/query/http_status_code.py,sha256=Li6uWA-GLJ0Hj_dKz527w4i4gLX78W-AC87MeVdDJdI,11777
|
247
247
|
PyFunceble/query/dns/__init__.py,sha256=Q0M83ZMZf7wJMgTVFmnXyfLb8XNdBHe2gTWs2dHTpK4,2479
|
248
248
|
PyFunceble/query/dns/nameserver.py,sha256=ogE6jXBOy94f36KtUx4y1kB_G2H_X65SJWTzuaTbVDI,9796
|
@@ -274,9 +274,9 @@ PyFunceble/utils/__init__.py,sha256=l6Mz-0GPHPCSPXuNFtHbnjD0fYI5BRr-RwDbVgAUdmI,
|
|
274
274
|
PyFunceble/utils/platform.py,sha256=px_pauOFMCEtc9ST0vYZvDWDhcWNP1S595iKK4P3n7c,3920
|
275
275
|
PyFunceble/utils/profile.py,sha256=Fp5yntq5Ys5eQe-FbQsUpx4ydxDxVYW3ACn-3KcTk_A,4566
|
276
276
|
PyFunceble/utils/version.py,sha256=Tb3DWk96Xl6WbdDa2t3QQGBBDcnKDNJV_iFWMVQfCoc,8330
|
277
|
-
PyFunceble_dev-4.2.
|
278
|
-
PyFunceble_dev-4.2.
|
279
|
-
PyFunceble_dev-4.2.
|
280
|
-
PyFunceble_dev-4.2.
|
281
|
-
PyFunceble_dev-4.2.
|
282
|
-
PyFunceble_dev-4.2.
|
277
|
+
PyFunceble_dev-4.2.16.dist-info/LICENSE,sha256=JBG6UfPnf3940AtwZB6vwAK6YH82Eo6nzMVnjGqopF0,10796
|
278
|
+
PyFunceble_dev-4.2.16.dist-info/METADATA,sha256=FEgoO8dvCsFUw7o5fn2f3uojXps9j_cs3DS4afvZlIo,15119
|
279
|
+
PyFunceble_dev-4.2.16.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
280
|
+
PyFunceble_dev-4.2.16.dist-info/entry_points.txt,sha256=Ic1suwopOi_XTgiQi2ErtpY5xT3R8EFMI6B_ONDuR9E,201
|
281
|
+
PyFunceble_dev-4.2.16.dist-info/top_level.txt,sha256=J7GBKIiNYv93m1AxLy8_gr6ExXyZbMmCVXHMQBTUq2Y,11
|
282
|
+
PyFunceble_dev-4.2.16.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|