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.
@@ -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 * 5
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
- query_tool = CollectionQueryTool()
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":
@@ -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.
@@ -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
- STD_URL_BASE: str = "http://localhost:8001"
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.14.dev (Blue Duckling: Ixora)"
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.14
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: shtab
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: sphinx-rtd-theme ; extra == 'docs'
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: cryptography ~=42.0 ; extra == 'full'
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: pylint ; extra == 'full'
56
- Requires-Dist: Pygments >=2.0 ; extra == 'full'
57
- Requires-Dist: isort ; extra == 'full'
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: python-box[all] ~=6.0.0 ; extra == 'full'
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: requests[socks] <3 ; extra == 'full'
65
- Requires-Dist: python-dotenv ; extra == 'full'
66
- Requires-Dist: colorama ; extra == 'full'
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: tox ; extra == 'full'
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: shtab ; extra == 'psql'
82
- Requires-Dist: PyYAML ; extra == 'psql'
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=jyf5MfFrEbbJEsXP_4ZdYsOe_2sodpHHCyTFGU561ZE,6299
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=f63sSKXFu2ZZklA8FRq_IfDXGpd78CcZlvyEeLe8Csk,47640
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=zPi7EcOZsdY437H6qcBffoU4LNTK2tg8En10dahogpw,9257
140
- PyFunceble/cli/system/launcher.py,sha256=k592db_pf_u2Fjt-soRXs9JPwVh-mT8Lq6FH8fjY8iM,44933
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=ztMwE9wsHMUw1waGZhuHTmeBezkY-ktBQMUQ0EpbuDk,13047
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=_nZfi3jBmUGdzmDnUnNWVsGhLgGdlkMiaPDeLno2oJY,11582
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=uuWzeK1D28UMMoctuo0L0OTlY3bWcwqaNQkY_WKsUpU,26199
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.14.dist-info/LICENSE,sha256=JBG6UfPnf3940AtwZB6vwAK6YH82Eo6nzMVnjGqopF0,10796
278
- PyFunceble_dev-4.2.14.dist-info/METADATA,sha256=MDrwi83J2EtSyeor9SM5Tt7w26jpM42we1was1nnwMc,15119
279
- PyFunceble_dev-4.2.14.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
280
- PyFunceble_dev-4.2.14.dist-info/entry_points.txt,sha256=Ic1suwopOi_XTgiQi2ErtpY5xT3R8EFMI6B_ONDuR9E,201
281
- PyFunceble_dev-4.2.14.dist-info/top_level.txt,sha256=J7GBKIiNYv93m1AxLy8_gr6ExXyZbMmCVXHMQBTUq2Y,11
282
- PyFunceble_dev-4.2.14.dist-info/RECORD,,
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,,