PyFunceble-dev 4.2.7__py3-none-any.whl → 4.2.9__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.
Files changed (46) hide show
  1. PyFunceble/checker/availability/base.py +1 -7
  2. PyFunceble/checker/availability/domain.py +0 -1
  3. PyFunceble/checker/availability/extras/base.py +1 -2
  4. PyFunceble/checker/availability/extras/rules.py +1 -1
  5. PyFunceble/checker/availability/ip.py +0 -1
  6. PyFunceble/checker/availability/url.py +0 -1
  7. PyFunceble/checker/reputation/base.py +0 -1
  8. PyFunceble/checker/reputation/domain.py +0 -1
  9. PyFunceble/checker/reputation/ip.py +0 -1
  10. PyFunceble/checker/reputation/url.py +0 -1
  11. PyFunceble/checker/syntax/second_lvl_domain.py +6 -2
  12. PyFunceble/checker/syntax/status.py +1 -0
  13. PyFunceble/checker/syntax/subdomain.py +3 -1
  14. PyFunceble/checker/syntax/url.py +0 -1
  15. PyFunceble/cli/credential_loader.py +3 -3
  16. PyFunceble/cli/file_preloader.py +3 -3
  17. PyFunceble/cli/migrators/base.py +0 -1
  18. PyFunceble/cli/processes/workers/base.py +3 -3
  19. PyFunceble/cli/scripts/production.py +3 -4
  20. PyFunceble/cli/storage.py +5 -3
  21. PyFunceble/cli/utils/testing.py +1 -3
  22. PyFunceble/data/alembic/mysql/versions/35c79626ecb9_fix_some_columns.py +1 -0
  23. PyFunceble/data/alembic/mysql/versions/3a4c55a9320d_add_continue_table.py +1 -0
  24. PyFunceble/data/alembic/mysql/versions/3d6f4a33cdb2_add_inactive_table.py +1 -0
  25. PyFunceble/data/alembic/mysql/versions/45713fea8097_deletion_uneeded_columns_from_whois_.py +1 -0
  26. PyFunceble/data/alembic/mysql/versions/459a0d7b8f09_add_idna_subject_column_into_whois.py +1 -0
  27. PyFunceble/data/alembic/mysql/versions/6f4729deaf03_delete_inactive_source_column.py +1 -0
  28. PyFunceble/data/alembic/mysql/versions/7bcf7fa64ba1_rename_created_to_created_at_and.py +1 -0
  29. PyFunceble/data/alembic/mysql/versions/83ada95132bf_delete_the_file_table.py +1 -0
  30. PyFunceble/data/alembic/mysql/versions/912bbcb77a6c_add_registrar_column.py +1 -0
  31. PyFunceble/data/alembic/mysql/versions/95dc17ddd729_introduction_of_the_session_id_column.py +1 -0
  32. PyFunceble/data/alembic/mysql/versions/ade87195b0a0_base.py +1 -0
  33. PyFunceble/data/alembic/mysql/versions/bef7bcaac3f2_make_id_a_bigint.py +1 -0
  34. PyFunceble/data/alembic/mysql/versions/d8893cd406db_allow_whois_record_to_be_empty_null.py +1 -0
  35. PyFunceble/data/alembic/mysql/versions/e04e8301d1a2_deletion_of_the_mined_table.py +1 -0
  36. PyFunceble/data/alembic/postgresql/versions/a32ac5d66eee_initial_version.py +1 -0
  37. PyFunceble/query/collection.py +97 -7
  38. PyFunceble/query/requests/adapter/https.py +6 -6
  39. PyFunceble/query/whois/converter/digit2digits.py +1 -0
  40. PyFunceble/storage.py +4 -2
  41. {PyFunceble_dev-4.2.7.dist-info → PyFunceble_dev-4.2.9.dist-info}/METADATA +45 -45
  42. {PyFunceble_dev-4.2.7.dist-info → PyFunceble_dev-4.2.9.dist-info}/RECORD +46 -46
  43. {PyFunceble_dev-4.2.7.dist-info → PyFunceble_dev-4.2.9.dist-info}/WHEEL +1 -1
  44. {PyFunceble_dev-4.2.7.dist-info → PyFunceble_dev-4.2.9.dist-info}/LICENSE +0 -0
  45. {PyFunceble_dev-4.2.7.dist-info → PyFunceble_dev-4.2.9.dist-info}/entry_points.txt +0 -0
  46. {PyFunceble_dev-4.2.7.dist-info → PyFunceble_dev-4.2.9.dist-info}/top_level.txt +0 -0
@@ -76,7 +76,6 @@ from PyFunceble.checker.syntax.domain import DomainSyntaxChecker
76
76
  from PyFunceble.checker.syntax.ip import IPSyntaxChecker
77
77
  from PyFunceble.checker.syntax.url import URLSyntaxChecker
78
78
  from PyFunceble.converter.url2netloc import Url2Netloc
79
- from PyFunceble.helpers.regex import RegexHelper
80
79
  from PyFunceble.query.dns.query_tool import DNSQueryTool
81
80
  from PyFunceble.query.http_status_code import HTTPStatusCode
82
81
  from PyFunceble.query.netinfo.address import AddressInfo
@@ -919,12 +918,7 @@ class AvailabilityCheckerBase(CheckerBase):
919
918
  if from_domain_test and self.status.url_syntax:
920
919
  return self
921
920
 
922
- if not self.status.url_syntax and not RegexHelper("[^a-z0-9._]").match(
923
- self.idna_subject, return_match=False
924
- ):
925
- # The regex is there because while testing for domain, sometime we
926
- # may see something like mailto:xxx@yyy.de
927
-
921
+ if not self.status.url_syntax and not self.idna_subject.startswith("http"):
928
922
  self.http_status_code_query_tool.set_subject(
929
923
  f"http://{self.idna_subject}:80"
930
924
  )
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  import PyFunceble.facility
55
54
  import PyFunceble.factory
56
55
  import PyFunceble.storage
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  import functools
55
54
  import socket
56
55
  from typing import Callable, Dict, List, Optional, Union
@@ -423,7 +422,7 @@ class ExtraRuleHandlerBase:
423
422
  of the given one.
424
423
  """
425
424
 
426
- if not isinstance(status_code, (list, tuple)):
425
+ if not isinstance(status_code, (list, tuple, set)):
427
426
  status_code = [status_code]
428
427
 
429
428
  if any(self.status.http_status_code == x for x in status_code):
@@ -78,7 +78,7 @@ class ExtraRulesHandler(ExtraRuleHandlerBase):
78
78
  def __init__(self, status: Optional[AvailabilityCheckerStatus] = None) -> None:
79
79
  self.regex_active2inactive = {
80
80
  r"\.000webhostapp\.com": [
81
- (self.switch_to_down_if_status_code, 410),
81
+ (self.switch_to_down_if_status_code, {410, 424}),
82
82
  ],
83
83
  r"\.24\.eu$": [(self.switch_to_down_if_status_code, 503)],
84
84
  r"\.altervista\.org$": [(self.switch_to_down_if_status_code, 403)],
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  import PyFunceble.facility
55
54
  import PyFunceble.factory
56
55
  import PyFunceble.storage
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  import PyFunceble.facility
55
54
  import PyFunceble.factory
56
55
  import PyFunceble.storage
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  from typing import List, Optional
55
54
 
56
55
  from sqlalchemy.orm import Session
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  from typing import List, Optional
55
54
 
56
55
  from PyFunceble.checker.reputation.base import ReputationCheckerBase
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  from typing import List, Optional
55
54
 
56
55
  from PyFunceble.checker.reputation.base import ReputationCheckerBase
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  from typing import List, Optional
55
54
 
56
55
  from PyFunceble.checker.reputation.base import ReputationCheckerBase
@@ -65,8 +65,12 @@ class SecondLvlDomainSyntaxChecker(DomainSyntaxCheckerBase):
65
65
  """
66
66
 
67
67
  # pylint: disable=line-too-long
68
- REGEX_VALID_DOMAIN: str = r"^(?=.{0,253}$)(([a-z0-9][a-z0-9-]{0,61}[a-z0-9]|[a-z0-9])\.)+((?=.*[^0-9])([a-z0-9][a-z0-9-]{0,61}[a-z0-9](?:\.)?|[a-z0-9](?:\.)?))$"
69
- REGEX_VALID_RELAXED_DOMAIN: str = r"^(?=.{0,253}$)(([a-z0-9][a-z0-9_-]{0,61}[a-z0-9_-]|[a-z0-9])\.)+((?=.*[^0-9])([a-z0-9][a-z0-9-]{0,61}[a-z0-9](?:\.)?|[a-z0-9](?:\.)?))$"
68
+ REGEX_VALID_DOMAIN: str = (
69
+ r"^(?=.{0,253}$)(([a-z0-9][a-z0-9-]{0,61}[a-z0-9]|[a-z0-9])\.)+((?=.*[^0-9])([a-z0-9][a-z0-9-]{0,61}[a-z0-9](?:\.)?|[a-z0-9](?:\.)?))$"
70
+ )
71
+ REGEX_VALID_RELAXED_DOMAIN: str = (
72
+ r"^(?=.{0,253}$)(([a-z0-9][a-z0-9_-]{0,61}[a-z0-9_-]|[a-z0-9])\.)+((?=.*[^0-9])([a-z0-9][a-z0-9-]{0,61}[a-z0-9](?:\.)?|[a-z0-9](?:\.)?))$"
73
+ )
70
74
 
71
75
  last_point_index: Optional[int] = None
72
76
  """
@@ -50,6 +50,7 @@ License:
50
50
  See the License for the specific language governing permissions and
51
51
  limitations under the License.
52
52
  """
53
+
53
54
  import dataclasses
54
55
  from typing import Optional
55
56
 
@@ -63,7 +63,9 @@ class SubDomainSyntaxChecker(DomainSyntaxCheckerBase):
63
63
  """
64
64
 
65
65
  # pylint: disable=line-too-long
66
- REGEX_VALID_SUBDOMAIN: str = r"^(?=.{0,253}$)(([a-z0-9_][a-z0-9-_]{0,61}[a-z0-9_-]|[a-z0-9])\.)+((?=.*)([a-z0-9][a-z0-9-]{0,61}[a-z0-9](?:\.)?|[a-z0-9](?:\.)?))$"
66
+ REGEX_VALID_SUBDOMAIN: str = (
67
+ r"^(?=.{0,253}$)(([a-z0-9_][a-z0-9-_]{0,61}[a-z0-9_-]|[a-z0-9])\.)+((?=.*)([a-z0-9][a-z0-9-]{0,61}[a-z0-9](?:\.)?|[a-z0-9](?:\.)?))$"
68
+ )
67
69
 
68
70
  @DomainSyntaxCheckerBase.ensure_subject_is_given
69
71
  def is_valid(self) -> bool:
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  import urllib.parse
55
54
  from typing import Optional
56
55
 
@@ -266,9 +266,9 @@ class CredentialLoader:
266
266
  # We directly share the credential object into the DBSession object.
267
267
  # This will let us use the DBSession without having to think about
268
268
  # any other headache.
269
- self.credential = (
270
- PyFunceble.cli.factory.DBSession.credential
271
- ) = self.DB_TYPE2OBJ[self.db_type]()
269
+ self.credential = PyFunceble.cli.factory.DBSession.credential = (
270
+ self.DB_TYPE2OBJ[self.db_type]()
271
+ )
272
272
 
273
273
  env_var_helper = EnvironmentVariableHelper(
274
274
  env_file_path=self.credential.get_dot_env_file()
@@ -481,9 +481,9 @@ class FilePreloader:
481
481
  raise exception
482
482
 
483
483
  if not broken:
484
- self.__description[self.__matching_index][
485
- "previous_hash"
486
- ] = self.__description[self.__matching_index]["hash"]
484
+ self.__description[self.__matching_index]["previous_hash"] = (
485
+ self.__description[self.__matching_index]["hash"]
486
+ )
487
487
 
488
488
  self.__save_description()
489
489
 
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  from typing import Optional
55
54
 
56
55
  from sqlalchemy.orm import Session
@@ -115,9 +115,9 @@ class WorkerBase(multiprocessing.Process):
115
115
  self.input_queue = self._params["input_queue"] = input_queue
116
116
  self.output_queue = self._params["output_queue"] = output_queue
117
117
 
118
- self.continuous_integration = self._params[
119
- "continuous_integration"
120
- ] = continuous_integration
118
+ self.continuous_integration = self._params["continuous_integration"] = (
119
+ continuous_integration
120
+ )
121
121
 
122
122
  self.global_exit_event = self._params["global_exit_event"] = global_exit_event
123
123
  self.exit_it = multiprocessing.Event()
@@ -50,7 +50,6 @@ License:
50
50
  limitations under the License.
51
51
  """
52
52
 
53
-
54
53
  import copy
55
54
  import functools
56
55
  import os
@@ -516,9 +515,9 @@ class ProductionPrep:
516
515
  if to_append not in self.version_file_content["deprecated"]:
517
516
  self.version_file_content["deprecated"].append(to_append)
518
517
 
519
- self.version_file_content[
520
- "current_version"
521
- ] = PyFunceble.storage.PROJECT_VERSION
518
+ self.version_file_content["current_version"] = (
519
+ PyFunceble.storage.PROJECT_VERSION
520
+ )
522
521
 
523
522
  self.dict_helper.set_subject(self.version_file_content).to_yaml_file(
524
523
  self.VERSION_FILE_PATH
PyFunceble/cli/storage.py CHANGED
@@ -253,9 +253,11 @@ UNIVERSAL_OUTPUTS: dict = {
253
253
  }
254
254
 
255
255
  OUTPUTS: Optional[Box] = Box(
256
- Merge(UNIX_OUTPUTS).into(UNIVERSAL_OUTPUTS)
257
- if PlatformUtility.is_unix()
258
- else Merge(WIN_OUTPUTS).into(UNIVERSAL_OUTPUTS),
256
+ (
257
+ Merge(UNIX_OUTPUTS).into(UNIVERSAL_OUTPUTS)
258
+ if PlatformUtility.is_unix()
259
+ else Merge(WIN_OUTPUTS).into(UNIVERSAL_OUTPUTS)
260
+ ),
259
261
  frozen_box=True,
260
262
  )
261
263
 
@@ -232,9 +232,7 @@ def get_subjects_from_line(
232
232
  if cidr2subject is None:
233
233
  cidr2subject = CIDR2Subject()
234
234
 
235
- adblock_inputline2subject.aggressive = (
236
- wildcard2subject.aggressive
237
- ) = (
235
+ adblock_inputline2subject.aggressive = wildcard2subject.aggressive = (
238
236
  rpz_inputline2subject.aggressive
239
237
  ) = inputline2subject.aggressive = url2netloc.aggressive = bool(
240
238
  PyFunceble.storage.CONFIGURATION.cli_decoding.aggressive
@@ -5,6 +5,7 @@ Revises: ade87195b0a0
5
5
  Create Date: 2020-08-21 11:42:07.044762
6
6
 
7
7
  """
8
+
8
9
  from alembic import op
9
10
  from sqlalchemy.exc import OperationalError
10
11
 
@@ -5,6 +5,7 @@ Revises: 3d6f4a33cdb2
5
5
  Create Date: 2020-12-13 22:52:56.968513
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -5,6 +5,7 @@ Revises: 7bcf7fa64ba1
5
5
  Create Date: 2020-12-13 19:45:41.893657
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -5,6 +5,7 @@ Revises: e04e8301d1a2
5
5
  Create Date: 2020-12-07 12:36:04.818466
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import mysql
@@ -5,6 +5,7 @@ Revises: 45713fea8097
5
5
  Create Date: 2020-12-07 12:37:52.018637
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -5,6 +5,7 @@ Revises: 95dc17ddd729
5
5
  Create Date: 2021-02-13 12:21:00.493002
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import mysql
@@ -5,6 +5,7 @@ Revises: 83ada95132bf
5
5
  Create Date: 2020-12-08 17:34:59.349943
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import mysql
@@ -5,6 +5,7 @@ Revises: 459a0d7b8f09
5
5
  Create Date: 2020-12-07 12:49:48.797794
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import mysql
@@ -5,6 +5,7 @@ Revises: 6f4729deaf03
5
5
  Create Date: 2021-12-04 23:52:11.861732
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -5,6 +5,7 @@ Revises: bef7bcaac3f2
5
5
  Create Date: 2020-12-23 02:26:21.647125
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -5,6 +5,7 @@ Revises:
5
5
  Create Date: 2020-08-15 20:12:26.768419
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -5,6 +5,7 @@ Revises: 3a4c55a9320d
5
5
  Create Date: 2020-12-16 19:09:41.212679
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import mysql
@@ -5,6 +5,7 @@ Revises: 35c79626ecb9
5
5
  Create Date: 2020-08-22 17:27:52.087506
6
6
 
7
7
  """
8
+
8
9
  from alembic import op
9
10
  from sqlalchemy.dialects import mysql
10
11
 
@@ -5,6 +5,7 @@ Revises: d8893cd406db
5
5
  Create Date: 2020-12-07 12:33:43.650514
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import mysql
@@ -5,6 +5,7 @@ Revises:
5
5
  Create Date: 2022-12-28 07:20:50.310072
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -88,6 +88,7 @@ class CollectionQueryTool:
88
88
 
89
89
  STD_URL_BASE: str = "http://localhost:8001"
90
90
  STD_PREFERRED_STATUS_ORIGIN: str = "frequent"
91
+ STD_TIMEOUT: float = 5.0
91
92
 
92
93
  _token: Optional[str] = None
93
94
  """
@@ -109,6 +110,11 @@ class CollectionQueryTool:
109
110
  Whether we are working with the modern or legacy API.
110
111
  """
111
112
 
113
+ _timeout: float = 5.0
114
+ """
115
+ The timeout to use while communicating with the API.
116
+ """
117
+
112
118
  session: Optional[requests.Session] = None
113
119
 
114
120
  def __init__(
@@ -117,6 +123,7 @@ class CollectionQueryTool:
117
123
  token: Optional[str] = None,
118
124
  url_base: Optional[str] = None,
119
125
  preferred_status_origin: Optional[str] = None,
126
+ timeout: Optional[float] = None,
120
127
  ) -> None:
121
128
  if token is not None:
122
129
  self.token = token
@@ -135,6 +142,11 @@ class CollectionQueryTool:
135
142
  else:
136
143
  self.guess_and_set_preferred_status_origin()
137
144
 
145
+ if timeout is not None:
146
+ self.timeout = timeout
147
+ else:
148
+ self.guess_and_set_timeout()
149
+
138
150
  self.session = requests.Session()
139
151
  self.session.headers.update(
140
152
  {
@@ -283,6 +295,43 @@ class CollectionQueryTool:
283
295
 
284
296
  return self
285
297
 
298
+ @property
299
+ def timeout(self) -> float:
300
+ """
301
+ Provides the value of the :code:`_timeout` attribute.
302
+ """
303
+
304
+ return self._timeout
305
+
306
+ @timeout.setter
307
+ def timeout(self, value: float) -> None:
308
+ """
309
+ Sets the value of the :code:`_timeout` attribute.
310
+
311
+ :param value:
312
+ The value to set.
313
+
314
+ :raise TypeError:
315
+ When the given :code:`value` is not a :py:class:`float`.
316
+ """
317
+
318
+ if not isinstance(value, (int, float)):
319
+ raise TypeError(f"<value> should be {float}, {type(value)} given.")
320
+
321
+ self._timeout = value
322
+
323
+ def set_timeout(self, value: float) -> "CollectionQueryTool":
324
+ """
325
+ Sets the value of the :code:`_timeout` attribute.
326
+
327
+ :param value:
328
+ The value to set.
329
+ """
330
+
331
+ self.timeout = value
332
+
333
+ return self
334
+
286
335
  def guess_and_set_url_base(self) -> "CollectionQueryTool":
287
336
  """
288
337
  Try to guess the URL base to work with.
@@ -307,16 +356,22 @@ class CollectionQueryTool:
307
356
  Try to guess if we are working with a legacy version.
308
357
  """
309
358
 
310
- try:
311
- response = self.session.get(
312
- f"{self.url_base}/v1/stats/subject",
313
- )
359
+ if self.token:
360
+ try:
361
+ response = self.session.get(
362
+ f"{self.url_base}/v1/stats/subject",
363
+ timeout=self.timeout,
364
+ )
314
365
 
315
- response.raise_for_status()
366
+ response.raise_for_status()
316
367
 
368
+ self.is_modern_api = False
369
+ except (requests.RequestException, json.decoder.JSONDecodeError):
370
+ self.is_modern_api = True
371
+ else:
317
372
  self.is_modern_api = False
318
- except (requests.RequestException, json.decoder.JSONDecodeError):
319
- self.is_modern_api = True
373
+
374
+ return self
320
375
 
321
376
  @property
322
377
  def preferred_status_origin(self) -> Optional[str]:
@@ -380,6 +435,18 @@ class CollectionQueryTool:
380
435
 
381
436
  return self
382
437
 
438
+ def guess_and_set_timeout(self) -> "CollectionQueryTool":
439
+ """
440
+ Try to guess the timeout to use.
441
+ """
442
+
443
+ if PyFunceble.facility.ConfigLoader.is_already_loaded():
444
+ self.timeout = PyFunceble.storage.CONFIGURATION.lookup.timeout
445
+ else:
446
+ self.timeout = self.STD_TIMEOUT
447
+
448
+ return self
449
+
383
450
  def ensure_is_modern_api_is_set(func): # pylint: disable=no-self-argument
384
451
  """
385
452
  Ensures that the :code:`is_modern_api` attribute is set before running
@@ -426,6 +493,7 @@ class CollectionQueryTool:
426
493
  response = self.session.post(
427
494
  url,
428
495
  json={"subject": subject},
496
+ timeout=self.timeout,
429
497
  )
430
498
 
431
499
  response_json = response.json()
@@ -574,11 +642,26 @@ class CollectionQueryTool:
574
642
  response = self.session.post(
575
643
  url,
576
644
  json=data,
645
+ timeout=self.timeout,
646
+ )
647
+ elif isinstance(
648
+ data,
649
+ (
650
+ AvailabilityCheckerStatus,
651
+ SyntaxCheckerStatus,
652
+ ReputationCheckerStatus,
653
+ ),
654
+ ):
655
+ response = self.session.post(
656
+ url,
657
+ json=data.to_dict(),
658
+ timeout=self.timeout,
577
659
  )
578
660
  else:
579
661
  response = self.session.post(
580
662
  url,
581
663
  data=data,
664
+ timeout=self.timeout,
582
665
  )
583
666
 
584
667
  response_json = response.json()
@@ -622,6 +705,12 @@ class CollectionQueryTool:
622
705
  if not self.token:
623
706
  return None
624
707
 
708
+ if isinstance(
709
+ data,
710
+ (AvailabilityCheckerStatus, SyntaxCheckerStatus, ReputationCheckerStatus),
711
+ ):
712
+ data = data.to_dict()
713
+
625
714
  if not isinstance(data, dict): # pragma: no cover ## Should never happen
626
715
  raise TypeError(f"<data> should be {dict}, {type(data)} given.")
627
716
 
@@ -633,6 +722,7 @@ class CollectionQueryTool:
633
722
  response = self.session.post(
634
723
  url,
635
724
  json=data,
725
+ timeout=self.timeout,
636
726
  )
637
727
 
638
728
  response_json = response.json()
@@ -113,12 +113,12 @@ class RequestHTTPSAdapter(RequestAdapterBase):
113
113
  )
114
114
 
115
115
  if parsed_url.scheme == "https":
116
- self.poolmanager.connection_pool_kw[
117
- "server_hostname"
118
- ] = parsed_url.hostname
119
- self.poolmanager.connection_pool_kw[
120
- "assert_hostname"
121
- ] = parsed_url.hostname
116
+ self.poolmanager.connection_pool_kw["server_hostname"] = (
117
+ parsed_url.hostname
118
+ )
119
+ self.poolmanager.connection_pool_kw["assert_hostname"] = (
120
+ parsed_url.hostname
121
+ )
122
122
 
123
123
  # Ensure that the Hosts header is present. Otherwise, connection might
124
124
  # not work.
@@ -49,6 +49,7 @@ License:
49
49
  See the License for the specific language governing permissions and
50
50
  limitations under the License.
51
51
  """
52
+
52
53
  # pylint: enable=line-too-long
53
54
 
54
55
  from typing import Any
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.7.dev (Blue Duckling: Ixora)"
64
+ PROJECT_VERSION: str = "4.2.9.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"
@@ -79,7 +79,9 @@ IPV4_REPUTATION_FILENAME: str = "ipv4_reputation.data"
79
79
  IANA_DUMP_LINK: str = (
80
80
  "https://raw.githubusercontent.com/PyFunceble/iana/master/iana-domains-db.json"
81
81
  )
82
- PUBLIC_SUFFIX_DUMP_LINK: str = "https://raw.githubusercontent.com/PyFunceble/public-suffix/master/public-suffix.json"
82
+ PUBLIC_SUFFIX_DUMP_LINK: str = (
83
+ "https://raw.githubusercontent.com/PyFunceble/public-suffix/master/public-suffix.json"
84
+ )
83
85
  USER_AGENT_DUMP_LINK: str = (
84
86
  "https://raw.githubusercontent.com/PyFunceble/user_agents/master/user_agents.json"
85
87
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyFunceble-dev
3
- Version: 4.2.7
3
+ Version: 4.2.9
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
@@ -22,73 +22,73 @@ Classifier: License :: OSI Approved
22
22
  Requires-Python: >=3.8, <4
23
23
  License-File: LICENSE
24
24
  Requires-Dist: inflection
25
+ Requires-Dist: setuptools >=65.5.1
26
+ Requires-Dist: dnspython[doh] ~=2.6.0
27
+ Requires-Dist: PyYAML
28
+ Requires-Dist: SQLAlchemy ~=2.0
29
+ Requires-Dist: cryptography ~=42.0
25
30
  Requires-Dist: domain2idna ~=1.12.0
26
- Requires-Dist: python-dotenv
27
- Requires-Dist: dnspython[doh] ~=2.0.0
28
- Requires-Dist: PyMySQL
29
- Requires-Dist: python-box[all] ~=6.0.0
30
- Requires-Dist: requests[socks] <3
31
- Requires-Dist: cryptography >=3.3.2
32
31
  Requires-Dist: packaging
33
- Requires-Dist: PyYAML
32
+ Requires-Dist: python-box[all] ~=6.0.0
33
+ Requires-Dist: colorama
34
+ Requires-Dist: python-dotenv
34
35
  Requires-Dist: shtab
36
+ Requires-Dist: requests[socks] <3
37
+ Requires-Dist: PyMySQL
35
38
  Requires-Dist: alembic
36
- Requires-Dist: setuptools >=65.5.1
37
- Requires-Dist: SQLAlchemy ~=2.0
38
- Requires-Dist: colorama
39
39
  Provides-Extra: dev
40
- Requires-Dist: flake8 ; extra == 'dev'
41
- Requires-Dist: isort ; extra == 'dev'
42
40
  Requires-Dist: pylint ; extra == 'dev'
43
41
  Requires-Dist: black ; extra == 'dev'
42
+ Requires-Dist: flake8 ; extra == 'dev'
43
+ Requires-Dist: isort ; extra == 'dev'
44
44
  Provides-Extra: docs
45
- Requires-Dist: alabaster <0.8,>=0.7 ; extra == 'docs'
46
- Requires-Dist: sphinx >=3.4.3 ; extra == 'docs'
47
- Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
48
45
  Requires-Dist: Pygments >=2.0 ; extra == 'docs'
46
+ Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
47
+ Requires-Dist: sphinx >=3.4.3 ; extra == 'docs'
48
+ Requires-Dist: alabaster <0.8,>=0.7 ; extra == 'docs'
49
49
  Provides-Extra: full
50
- Requires-Dist: alembic ; extra == 'full'
51
- Requires-Dist: PyMySQL ; extra == 'full'
52
- Requires-Dist: sphinx-rtd-theme ; extra == 'full'
53
- Requires-Dist: isort ; extra == 'full'
54
- Requires-Dist: black ; extra == 'full'
55
- Requires-Dist: flake8 ; extra == 'full'
56
- Requires-Dist: tox ; extra == 'full'
57
- Requires-Dist: dnspython[doh] ~=2.0.0 ; extra == 'full'
58
- Requires-Dist: python-box[all] ~=6.0.0 ; extra == 'full'
59
- Requires-Dist: cryptography >=3.3.2 ; extra == 'full'
50
+ Requires-Dist: inflection ; extra == 'full'
51
+ Requires-Dist: domain2idna ~=1.12.0 ; extra == 'full'
60
52
  Requires-Dist: packaging ; extra == 'full'
61
- Requires-Dist: coverage ; extra == 'full'
62
- Requires-Dist: setuptools >=65.5.1 ; extra == 'full'
63
- Requires-Dist: alabaster <0.8,>=0.7 ; extra == 'full'
64
53
  Requires-Dist: colorama ; extra == 'full'
54
+ Requires-Dist: alabaster <0.8,>=0.7 ; extra == 'full'
65
55
  Requires-Dist: pylint ; extra == 'full'
66
- Requires-Dist: domain2idna ~=1.12.0 ; extra == 'full'
67
- Requires-Dist: python-dotenv ; extra == 'full'
56
+ Requires-Dist: sphinx >=3.4.3 ; extra == 'full'
57
+ Requires-Dist: cryptography ~=42.0 ; extra == 'full'
68
58
  Requires-Dist: requests[socks] <3 ; extra == 'full'
59
+ Requires-Dist: PyMySQL ; extra == 'full'
60
+ Requires-Dist: alembic ; extra == 'full'
61
+ Requires-Dist: isort ; extra == 'full'
62
+ Requires-Dist: setuptools >=65.5.1 ; extra == 'full'
63
+ Requires-Dist: PyYAML ; extra == 'full'
69
64
  Requires-Dist: SQLAlchemy ~=2.0 ; extra == 'full'
70
- Requires-Dist: sphinx >=3.4.3 ; extra == 'full'
65
+ Requires-Dist: black ; extra == 'full'
66
+ Requires-Dist: sphinx-rtd-theme ; extra == 'full'
71
67
  Requires-Dist: Pygments >=2.0 ; extra == 'full'
72
- Requires-Dist: inflection ; extra == 'full'
68
+ Requires-Dist: coverage ; extra == 'full'
69
+ Requires-Dist: dnspython[doh] ~=2.6.0 ; extra == 'full'
70
+ Requires-Dist: tox ; extra == 'full'
71
+ Requires-Dist: flake8 ; extra == 'full'
72
+ Requires-Dist: python-box[all] ~=6.0.0 ; extra == 'full'
73
+ Requires-Dist: python-dotenv ; extra == 'full'
73
74
  Requires-Dist: shtab ; extra == 'full'
74
- Requires-Dist: PyYAML ; extra == 'full'
75
75
  Provides-Extra: psql
76
76
  Requires-Dist: inflection ; extra == 'psql'
77
- Requires-Dist: domain2idna ~=1.12.0 ; extra == 'psql'
78
- Requires-Dist: python-dotenv ; extra == 'psql'
77
+ Requires-Dist: setuptools >=65.5.1 ; extra == 'psql'
78
+ Requires-Dist: dnspython[doh] ~=2.6.0 ; extra == 'psql'
79
+ Requires-Dist: PyYAML ; extra == 'psql'
79
80
  Requires-Dist: psycopg2 ; extra == 'psql'
80
- Requires-Dist: dnspython[doh] ~=2.0.0 ; extra == 'psql'
81
- Requires-Dist: PyMySQL ; extra == 'psql'
82
- Requires-Dist: python-box[all] ~=6.0.0 ; extra == 'psql'
83
- Requires-Dist: requests[socks] <3 ; extra == 'psql'
84
- Requires-Dist: cryptography >=3.3.2 ; extra == 'psql'
81
+ Requires-Dist: SQLAlchemy ~=2.0 ; extra == 'psql'
82
+ Requires-Dist: cryptography ~=42.0 ; extra == 'psql'
83
+ Requires-Dist: domain2idna ~=1.12.0 ; extra == 'psql'
85
84
  Requires-Dist: packaging ; extra == 'psql'
86
- Requires-Dist: PyYAML ; extra == 'psql'
85
+ Requires-Dist: python-box[all] ~=6.0.0 ; extra == 'psql'
86
+ Requires-Dist: colorama ; extra == 'psql'
87
+ Requires-Dist: python-dotenv ; extra == 'psql'
87
88
  Requires-Dist: shtab ; extra == 'psql'
89
+ Requires-Dist: requests[socks] <3 ; extra == 'psql'
90
+ Requires-Dist: PyMySQL ; extra == 'psql'
88
91
  Requires-Dist: alembic ; extra == 'psql'
89
- Requires-Dist: setuptools >=65.5.1 ; extra == 'psql'
90
- Requires-Dist: SQLAlchemy ~=2.0 ; extra == 'psql'
91
- Requires-Dist: colorama ; extra == 'psql'
92
92
  Provides-Extra: test
93
93
  Requires-Dist: tox ; extra == 'test'
94
94
  Requires-Dist: coverage ; extra == 'test'
@@ -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=_Gzx4ogkma2-OSMBflqx73PpRq7456z9ZShzzesONHM,6290
7
+ PyFunceble/storage.py,sha256=Rerw_MC_YtExRXtCzPU7VehQsZCURoE6NvLr5S7VrD0,6298
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
@@ -12,28 +12,28 @@ PyFunceble/checker/complex_json_encoder.py,sha256=BptyN_NI2d-jeSiP41ZroapOoup5QY
12
12
  PyFunceble/checker/params_base.py,sha256=c1n76_VKSDqL0Oj7yWCz7-KhB3AbdcHqid56dklSBk0,3297
13
13
  PyFunceble/checker/status_base.py,sha256=GmjDp62Ax6uGABaiRkw607DVbc9jDgljcx0JlokBRrA,3598
14
14
  PyFunceble/checker/availability/__init__.py,sha256=OF82eWYPW8u4LxQrcU45Twg8z2pdG-BmSLVmHUWvEos,2489
15
- PyFunceble/checker/availability/base.py,sha256=NF9IIygEeTOFSLLhz3ZhYxbG-_wjMDqyK3Fpno69mBQ,39346
16
- PyFunceble/checker/availability/domain.py,sha256=kfyjRYCsmJOgIe-UMyQuHwd-sxKY6cn6qJPw29WGTpc,7475
15
+ PyFunceble/checker/availability/base.py,sha256=AO4AHsRZOSOOMDk99bEsHD-CQ6HEP7sx_RO0UKdDnyA,39105
16
+ PyFunceble/checker/availability/domain.py,sha256=42at5_HdE3cJXKStJuxoMLWDR3h1Gf30154yL6I3rmI,7474
17
17
  PyFunceble/checker/availability/domain_and_ip.py,sha256=6vNzknSiQ08WYAX_cUrA2EyamcnOsC2-3M1dT0EECLE,6603
18
- PyFunceble/checker/availability/ip.py,sha256=U4hda8RQygR5v2XbPMjrIdyJUWs8Sm8UCzpI2TQCQLU,7066
18
+ PyFunceble/checker/availability/ip.py,sha256=z3kbNPMwOlTPWPFEqZ4NZRhu-2M1OKjO82EdUt022fk,7065
19
19
  PyFunceble/checker/availability/params.py,sha256=BrOdcJqRddlzmQEf-exbKXUByBVzsk_asEF6iqL_liw,3218
20
20
  PyFunceble/checker/availability/status.py,sha256=_bamU51QnvJTYHXszpFBvnNZ4Rj1YTQAlMrvNpmk_34,5242
21
- PyFunceble/checker/availability/url.py,sha256=PXacJm6-KhiSOKKV4OH1cueargeZwAO3HNLM_JAwwe0,11351
21
+ PyFunceble/checker/availability/url.py,sha256=B-iSe62vRHoYvmoZ9vpedFDc7lUEpI_uT6g2kF5XJ2M,11350
22
22
  PyFunceble/checker/availability/extras/__init__.py,sha256=NuepT1O_u6iL2g-FBXuRbRCZ59CBPMAT3mkNFYldb4E,2491
23
- PyFunceble/checker/availability/extras/base.py,sha256=5zLyn_WMhfKUh21ul3P8iG90ieu__QwOv7CXy1z5TrU,15579
23
+ PyFunceble/checker/availability/extras/base.py,sha256=Jc99iCyvCUGjVaiOrzp4UuNYC_x9AwR1UpZpz76LAxk,15583
24
24
  PyFunceble/checker/availability/extras/dns.py,sha256=k1uXDAcc3nB1WgwndoDBbeUt4K6YuPgf_7u2BJG4zRg,6844
25
25
  PyFunceble/checker/availability/extras/etoxic.py,sha256=In043gEMKfHuPsvBghR9tAiOakyuvcx3bqxg86yEhMs,10096
26
26
  PyFunceble/checker/availability/extras/parked.py,sha256=ZQK6ElWhk4sjth-xI9NYhf7vKzqLgOJxro4p8gcJgtU,5312
27
- PyFunceble/checker/availability/extras/rules.py,sha256=T9DKosSM-K6fW6Iey-WXnLyCBiT79u5cKKElNfvmHNI,9859
27
+ PyFunceble/checker/availability/extras/rules.py,sha256=qogfY2cnvDeCGhTBbFyCtsVHli4Sd2ocQDKLLwwab-k,9866
28
28
  PyFunceble/checker/availability/extras/subject_switch.py,sha256=u4dd1bhI-D4XPPa7VGLaVgQ7enJAS8Dg2lMgAx8kOFY,5891
29
29
  PyFunceble/checker/reputation/__init__.py,sha256=R1rEkB6Nk7wapO3093aWChkgUelWPh7HSqDRsa2FxJU,2488
30
- PyFunceble/checker/reputation/base.py,sha256=tL97HvkjhDh083riNAtMDe7Hukv76H23unEc21adkLY,12222
31
- PyFunceble/checker/reputation/domain.py,sha256=x6geaYtaJrLEoUP0hiaEnjIDG-PAz-HOAbqaTAEgAmE,3032
30
+ PyFunceble/checker/reputation/base.py,sha256=leJWhVVpkFlnxW1rBjUcYBl0S1yTzIE2j_JMICxplr0,12221
31
+ PyFunceble/checker/reputation/domain.py,sha256=3LnlkYNuYcjd3MZVrsUfjJnzOh_ceAok793j6k-SrbU,3031
32
32
  PyFunceble/checker/reputation/domain_and_ip.py,sha256=18JGtFgpnQM5Dg1gv1_K1pOgIqVEvIaiSRGe6MXYmUE,4184
33
- PyFunceble/checker/reputation/ip.py,sha256=tLyDQXFOrOk8BmILL5E1D-aWZZLjYWVGOSzAGdeA9Ew,3359
33
+ PyFunceble/checker/reputation/ip.py,sha256=eN0-j6Pi4aCk-0gECpvrVScSsVwLcWRw0g07peNah_w,3358
34
34
  PyFunceble/checker/reputation/params.py,sha256=EYFb51YDMqAdGW59GW1oQkx9hU4IP-WB4EcwaESu8fI,2823
35
35
  PyFunceble/checker/reputation/status.py,sha256=dt-rHP386I0DkkA23b-ayfq10NsOUWtOX0R_pI6Yk6s,4069
36
- PyFunceble/checker/reputation/url.py,sha256=YAzAlkaLKi2a7qRzWxoxT8XnjUiQj_iLvInTirlfS4Y,4120
36
+ PyFunceble/checker/reputation/url.py,sha256=PlhilgMrzaw2S5tOmC3ODxI2Iz87wm42_QmVlKTKStk,4119
37
37
  PyFunceble/checker/syntax/__init__.py,sha256=qmORp_pZqgoKIG3VJGc172zy5M2Yy8HQTjd1R_MLDpo,2484
38
38
  PyFunceble/checker/syntax/base.py,sha256=NxLwI9nn7LEhvAJB3ix18SLznR9cxOel0iUrfHeVtNg,4421
39
39
  PyFunceble/checker/syntax/domain.py,sha256=tOnfrA69bQLPrccSnzEoJtZ6VbgegygC8R25FpDyiSo,4800
@@ -43,19 +43,19 @@ PyFunceble/checker/syntax/ip.py,sha256=I0RPfntENu0uWRjwf-R1ZTBSaJ24FXMTk_OhNChTY
43
43
  PyFunceble/checker/syntax/ipv4.py,sha256=xMedr5zzO2z0G4XE7RWR_fhAKBo49PYKqkYig6j6fCc,8065
44
44
  PyFunceble/checker/syntax/ipv6.py,sha256=guwC4AdI1-HlPV4zFc4op7es_uHiyVUi58900ETIX9o,4402
45
45
  PyFunceble/checker/syntax/params.py,sha256=zGoZFfRLi691mPwMiDPniGin9hwIywCwfGOTmIr9M3M,2815
46
- PyFunceble/checker/syntax/second_lvl_domain.py,sha256=bmffz6KtiC3YRZAVXhAZf6tqcA4QGX-eeWumdbRFjoU,4706
47
- PyFunceble/checker/syntax/status.py,sha256=IBRfneddz5IbWVvBYwMOaGOV2QbyAHJQ6kBm8EWr2Tk,3174
48
- PyFunceble/checker/syntax/subdomain.py,sha256=F3JCQELWSjhZDEgC6_q7UKlLDmnsvtNiijvtFUkdN3I,4253
49
- PyFunceble/checker/syntax/url.py,sha256=8QeNz_JkRwwU4_uHsSM7qcaxrWZhvuwcoHA5lm0AQPE,4298
46
+ PyFunceble/checker/syntax/second_lvl_domain.py,sha256=7lHzpTsE2JSux9rCQEuK1Dtpr9qY769_qeNtyvEbqzs,4738
47
+ PyFunceble/checker/syntax/status.py,sha256=L1o_2RzfxxNCCEWi-PFMqx3Jd5uDGqlfSu4sREkwp0g,3175
48
+ PyFunceble/checker/syntax/subdomain.py,sha256=87lah9vQRAEE0KzA06vwYN2m-7Cl0VnV2Ad_QHNiHR4,4269
49
+ PyFunceble/checker/syntax/url.py,sha256=55ZHJ6cNeCa8rtZD-ECkRvA9TKS90OZ6RkCtUCNIIkA,4297
50
50
  PyFunceble/checker/utils/__init__.py,sha256=q0SL8UhcWzpW-ByRgHXhnnUdhJHvJCvQocqzf5r5vSc,2470
51
51
  PyFunceble/checker/utils/whois.py,sha256=ZCzNRiWbxMUY3PE31uGjzZNbp_vTkjhAjByBjHb4rY4,4071
52
52
  PyFunceble/cli/__init__.py,sha256=5Hh8seAvzio4NSC_zWfWNgdwvecCf9y54xQ6jpygsfo,2467
53
- PyFunceble/cli/credential_loader.py,sha256=cmmt23Wc_0LWFddLUNTU3oBccyrWH4FNGujfGX-SpVw,10606
53
+ PyFunceble/cli/credential_loader.py,sha256=BETg6mtxclRm_IH98S6k-xzVTrlIGD2nx8H-alNjFQo,10606
54
54
  PyFunceble/cli/execution_time.py,sha256=69X6RF1pYH0TM0Woump0xT0Gm4QrFQGspTPXii_-wyw,7197
55
55
  PyFunceble/cli/facility.py,sha256=SV5HsFeddqKQIuAdBKBR3DTiCk2DHmrWqwvA9OmBZTM,2590
56
56
  PyFunceble/cli/factory.py,sha256=iDy_AkL0YOKsBsnhdqYp7u4xjxiKzbnHbWk1MK8w24I,2584
57
- PyFunceble/cli/file_preloader.py,sha256=Giyog044mGtwqFlkjaM_czFIjC21TfpiO2zDGhzm7Vs,18290
58
- PyFunceble/cli/storage.py,sha256=wlne1rbemmhbQEQ1DP-VBi6DaRnXAegqJg12ZUC_3mc,11886
57
+ PyFunceble/cli/file_preloader.py,sha256=-aAFw9n0BWNM2QtEyiYliYMs1h7iHH61_zMAby9FKKE,18292
58
+ PyFunceble/cli/storage.py,sha256=aK3r9-WTgjk-Ks3Q9ESlCm2dIQj9Ol1lCXgopDquhTQ,11910
59
59
  PyFunceble/cli/storage_facility.py,sha256=e5kg74syMhVepblIDMCYJtmSlBCPMrUnemLTqur094A,3170
60
60
  PyFunceble/cli/continuous_integration/__init__.py,sha256=gw-QNJQJ0ExuuqBljnNAj1zj8sWRDZ1dY4BguJ4s1Z0,2515
61
61
  PyFunceble/cli/continuous_integration/base.py,sha256=Y-xOTL01ry1G6GgjIM6KVCy-pvOrky0pyd33h-UK72o,38948
@@ -90,7 +90,7 @@ PyFunceble/cli/filesystem/printer/file.py,sha256=zgrHnqrVDdwJBVSZq7BZFtyqA82yT9O
90
90
  PyFunceble/cli/filesystem/printer/stdout.py,sha256=qNXRzwNyN9thwR8709e-FcvAsLe-LiJN3CBL7kKX6gY,7681
91
91
  PyFunceble/cli/migrators/__init__.py,sha256=8YY6QMam9Bkox-FAMIlrglJQTEUVXhjCWFkJ1rLiRac,2452
92
92
  PyFunceble/cli/migrators/alembic.py,sha256=fVhPeWCfpjrOFtuzA8Xqz11Oz88B1CMR93RU2qSuOgg,7523
93
- PyFunceble/cli/migrators/base.py,sha256=71lyVKNS7tBGFQCSQ6sX0XrF8TlpYdhnMpbbrffjVWs,3297
93
+ PyFunceble/cli/migrators/base.py,sha256=3fjp0p9ojimzy1YhnOx0-RxUfzL1BuRLHbNfDKPceWY,3296
94
94
  PyFunceble/cli/migrators/db_base.py,sha256=BU7rw0fqdFh4zMwpICwUgGItXw-k7ObXLMK2mHe6zho,4118
95
95
  PyFunceble/cli/migrators/csv_file/__init__.py,sha256=S1QFwe8P4vGceghP_wgtWvFu9abFL06ly6sac5uf8UM,2457
96
96
  PyFunceble/cli/migrators/csv_file/base.py,sha256=DwhtsT-MqtrXarXYbmNCGyRFaC1g1NFTYhDy3pIW7Ro,5788
@@ -120,7 +120,7 @@ PyFunceble/cli/processes/miner.py,sha256=-ZdQKzbW3aInAPsLdsKGwWqFpiFBtkdyBdo2zjg
120
120
  PyFunceble/cli/processes/producer.py,sha256=fD5t0Ise6iV9S495v6aDcvroyxtXjsekFxLAuZBP3q8,2741
121
121
  PyFunceble/cli/processes/tester.py,sha256=nUCjUVIz4jXZsVx9WSfPOqi4-OzlqFsVbXupwm8YD-s,2727
122
122
  PyFunceble/cli/processes/workers/__init__.py,sha256=sC7xz1fB399TNYiG5gpDrOCfSSSARqo8sc4CeirUKLA,2458
123
- PyFunceble/cli/processes/workers/base.py,sha256=T2PmayZ9Ewts0EoCWJFTpSVgjgvKHQWDPQe__nrnKIc,13962
123
+ PyFunceble/cli/processes/workers/base.py,sha256=EIhM3YxEGCxdsq1B-Op8c6f2k5OOxmmRmyuzR5qQH5U,13964
124
124
  PyFunceble/cli/processes/workers/chancy_producer.py,sha256=_oDJym-VSs9t8yfsqe28t_sEU76vLsSPAa6OnIgQkmw,4424
125
125
  PyFunceble/cli/processes/workers/chancy_tester.py,sha256=X39S4u9j08KOMfTpw1OD6ZU8MantBXu5FeyD1FNgobY,3640
126
126
  PyFunceble/cli/processes/workers/dir_files_sorter.py,sha256=qbeLcQ6QiSO-eRat2xQF1b038DigSIvzGeux5Aailgg,6012
@@ -132,7 +132,7 @@ PyFunceble/cli/processes/workers/producer.py,sha256=O5KsIgpxGeUNH2uHDEo5-K32FkOT
132
132
  PyFunceble/cli/processes/workers/tester.py,sha256=1VLbhVeAaN4EE0l3fdD0R69Kv4QTL3i9yXvSHiO1SrM,11751
133
133
  PyFunceble/cli/scripts/__init__.py,sha256=jSHEdUgOBxuhESK-n_unZDV7Vts09LNCNRiSJIe9Fno,2451
134
134
  PyFunceble/cli/scripts/iana.py,sha256=IQAu_TKtL-54Lh2q4ymet6T1faqQmiJXg4hME1Md3PU,9991
135
- PyFunceble/cli/scripts/production.py,sha256=XbX8yBP0jB0T4GxOLurSoYVqrCR6UF9C5mU1OeCE8kQ,17919
135
+ PyFunceble/cli/scripts/production.py,sha256=XecxzvXwmSKWxka_6FmVyBKRbuPnH4aHv3wrYk3NyaA,17920
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
@@ -142,7 +142,7 @@ PyFunceble/cli/utils/__init__.py,sha256=69PJomADQHaFLgnfTpS7SFTgVkqZiRdvpUKX41nU
142
142
  PyFunceble/cli/utils/ascii_logo.py,sha256=Zff57bUS-2GkjAzyv6OEpw8THrolr0rhjjvjepsMgR8,4236
143
143
  PyFunceble/cli/utils/sort.py,sha256=Vi2V4S55hbqP9Mrk_OsYxESKAnKIS6DOFZ7nZXEv7u4,4375
144
144
  PyFunceble/cli/utils/stdout.py,sha256=xxZIpNZpEYyI-9V4hDNRWu8vu_l-SBNdS58YPGYXfJk,5638
145
- PyFunceble/cli/utils/testing.py,sha256=TEPCGcAG91Dfe8FMKHIBcJ2HA8OU0hMU9_hEY4FCTHQ,10214
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
148
  PyFunceble/config/compare.py,sha256=ztMwE9wsHMUw1waGZhuHTmeBezkY-ktBQMUQ0EpbuDk,13047
@@ -163,26 +163,26 @@ PyFunceble/data/alembic/__init__.py,sha256=RH6_soNmURAVLi4ywsitVimGqNX02nP8XVo4S
163
163
  PyFunceble/data/alembic/mysql/__init__.py,sha256=RH6_soNmURAVLi4ywsitVimGqNX02nP8XVo4SLjrr64,2454
164
164
  PyFunceble/data/alembic/mysql/env.py,sha256=8UhlaEdFE4dTHEU8JIGovGO2d2e9xclTITv9bWHF9Pc,4723
165
165
  PyFunceble/data/alembic/mysql/script.py.mako,sha256=8_xgA-gm_OhehnO7CiIijWgnm00ZlszEHtIHrAYFJl0,494
166
- PyFunceble/data/alembic/mysql/versions/35c79626ecb9_fix_some_columns.py,sha256=55wv4akQgutwbhNC9iWLTco_EjzXNYngshNJFCpvyQ0,1806
167
- PyFunceble/data/alembic/mysql/versions/3a4c55a9320d_add_continue_table.py,sha256=hrWYgv_-7oGoiAY2-gKn9fav5kCupIg8QlyToFGPiwI,1197
168
- PyFunceble/data/alembic/mysql/versions/3d6f4a33cdb2_add_inactive_table.py,sha256=w9wKwI0wupzhWC7ZawYLKWqnPof6RSsFnFMRb3ksGwc,1198
169
- PyFunceble/data/alembic/mysql/versions/45713fea8097_deletion_uneeded_columns_from_whois_.py,sha256=_5zlmMPATkSnwHniqmdV-3x6H4mfbsMzTGWHeQZEK7E,1294
170
- PyFunceble/data/alembic/mysql/versions/459a0d7b8f09_add_idna_subject_column_into_whois.py,sha256=0OHR7wgiLHCc9OGxThpph3ed2CXxMBtFl4-LPZZTaXY,757
171
- PyFunceble/data/alembic/mysql/versions/6f4729deaf03_delete_inactive_source_column.py,sha256=Lt2DoeQu5aiZuIFTUh0gP4n3Mw1GJR0iy6qvK7L001E,806
172
- PyFunceble/data/alembic/mysql/versions/7bcf7fa64ba1_rename_created_to_created_at_and.py,sha256=y0n85zlU06ZOfLhwpT3eYRVbN1U3w7nwmwux95zyKEM,2799
173
- PyFunceble/data/alembic/mysql/versions/83ada95132bf_delete_the_file_table.py,sha256=5N3qC1iPj4LuWMs7IVe2u_nXlonRBV8NkGiT9DTBRpc,2181
174
- PyFunceble/data/alembic/mysql/versions/912bbcb77a6c_add_registrar_column.py,sha256=ewpTZ85bOo-kmVeswp5VJCrSiHe89KYS2SKZiPnIVNQ,730
175
- PyFunceble/data/alembic/mysql/versions/95dc17ddd729_introduction_of_the_session_id_column.py,sha256=rdSOYXqNl96DXR_xYYa80pPgnud5PLfw-zz7Uej0z9E,741
166
+ PyFunceble/data/alembic/mysql/versions/35c79626ecb9_fix_some_columns.py,sha256=8R9n1wGiCBT1sxg2Zc6Dms_nBQIQEbGLGkKSxMu42h8,1807
167
+ PyFunceble/data/alembic/mysql/versions/3a4c55a9320d_add_continue_table.py,sha256=Ne5dwHekP51S_C2xZM6wtTOTEqWyAVHd77PsSgfWhvY,1198
168
+ PyFunceble/data/alembic/mysql/versions/3d6f4a33cdb2_add_inactive_table.py,sha256=72kAaDywwHVSaqgGRV5r3OT_UN9-JlacxIEIWN9cy3Q,1199
169
+ PyFunceble/data/alembic/mysql/versions/45713fea8097_deletion_uneeded_columns_from_whois_.py,sha256=tjjWS8TOAygCDJ4Zi83BPIP4THiGUMfQ_eJndmg5Eig,1295
170
+ PyFunceble/data/alembic/mysql/versions/459a0d7b8f09_add_idna_subject_column_into_whois.py,sha256=UMZkndVR768uaQjDIhXCm8mwF_B0MBJ2m0HocYuAQPk,758
171
+ PyFunceble/data/alembic/mysql/versions/6f4729deaf03_delete_inactive_source_column.py,sha256=zlSP7kxhn2713OUfhSeCq8yBirPIszuNA3lm-AFHjCk,807
172
+ PyFunceble/data/alembic/mysql/versions/7bcf7fa64ba1_rename_created_to_created_at_and.py,sha256=TAp-osNORf77_7Imot6xOptxO_1_q9tcg8p85eVL3eU,2800
173
+ PyFunceble/data/alembic/mysql/versions/83ada95132bf_delete_the_file_table.py,sha256=dH10S5_KjzLKgFjBt1CyBpFXUzn4cXm2SRa0KuDFH1A,2182
174
+ PyFunceble/data/alembic/mysql/versions/912bbcb77a6c_add_registrar_column.py,sha256=TTyWDmLtwZp1ppIAl3Z8n51O8EXJY_L21hz6boDfnrY,731
175
+ PyFunceble/data/alembic/mysql/versions/95dc17ddd729_introduction_of_the_session_id_column.py,sha256=UaLy3ZVVsGU8Aw-mpsQwR_FeVkXz6G2jijYQK51cvdI,742
176
176
  PyFunceble/data/alembic/mysql/versions/__init__.py,sha256=qDBHGriN6fj02Rczmil26vaSa63sEDeo9j-Nn7zj9dY,2466
177
- PyFunceble/data/alembic/mysql/versions/ade87195b0a0_base.py,sha256=zlkuOT7tpF1xlghF9DQPqw8rL-C25QsgmRBLMZdeaNg,4236
178
- PyFunceble/data/alembic/mysql/versions/bef7bcaac3f2_make_id_a_bigint.py,sha256=6BFuOb8zRIgvuD1hZhvIxA29ovUQF2ZAoGPE53S2CJc,1721
179
- PyFunceble/data/alembic/mysql/versions/d8893cd406db_allow_whois_record_to_be_empty_null.py,sha256=w16SOfBzxyZnH1-ANAIzRAEoJMyXAFfgiXXXF1TmY7o,930
180
- PyFunceble/data/alembic/mysql/versions/e04e8301d1a2_deletion_of_the_mined_table.py,sha256=Hi6CDWBP05Izxi0LunanymCWRunRhG4Grtu0BB1O0mg,2125
177
+ PyFunceble/data/alembic/mysql/versions/ade87195b0a0_base.py,sha256=2Ad3H8lihgk7dZI3DLZSLIOGPOiaBCbvpNXrrQvQeJc,4237
178
+ PyFunceble/data/alembic/mysql/versions/bef7bcaac3f2_make_id_a_bigint.py,sha256=ZIgXf1gC8jVFlwOxwAeXwqbINk2bgbx-eOZCNBc0lKQ,1722
179
+ PyFunceble/data/alembic/mysql/versions/d8893cd406db_allow_whois_record_to_be_empty_null.py,sha256=wYElzqWvfK6yqliamxSH0c-918jQKUddd9uyLMZOzvg,931
180
+ PyFunceble/data/alembic/mysql/versions/e04e8301d1a2_deletion_of_the_mined_table.py,sha256=IopWo7QTHfbXLS4acuIRhEuI716cLvqOcTOMm9KoMLQ,2126
181
181
  PyFunceble/data/alembic/postgresql/__init__.py,sha256=RH6_soNmURAVLi4ywsitVimGqNX02nP8XVo4SLjrr64,2454
182
182
  PyFunceble/data/alembic/postgresql/env.py,sha256=8UhlaEdFE4dTHEU8JIGovGO2d2e9xclTITv9bWHF9Pc,4723
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
- PyFunceble/data/alembic/postgresql/versions/a32ac5d66eee_initial_version.py,sha256=7fiDikMVwEeuADPNXUcfqnCmR_R7QNwb_7gOSsRZGd0,2486
185
+ PyFunceble/data/alembic/postgresql/versions/a32ac5d66eee_initial_version.py,sha256=xJdnoCnHAG1vmt-nBeomuIEDRwUK1Upv1mtkUt1txQM,2487
186
186
  PyFunceble/data/infrastructure/.PyFunceble_production.yaml,sha256=uqUeggBBTmxNKKoV51TuthdHODT8Q2OHQU3g6Rrw-zM,11497
187
187
  PyFunceble/data/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
188
  PyFunceble/data/infrastructure/dir_structure_production.json,sha256=XpWin49SkoWu3pvnsoNlbNh6j9MlTGVKkvTmX99jZkM,5722
@@ -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=-JHovuzVK2yT4hGNbj4_f5wIAxozem0jxOajBI2FdpE,20321
245
+ PyFunceble/query/collection.py,sha256=02z7zXWbhWj3UoMMDlUMZzwFNNOo9Lbhxjen9_5qfHY,22748
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
@@ -261,12 +261,12 @@ PyFunceble/query/requests/requester.py,sha256=eJDylIORVgwA3boq_pSbKMrneNOHNSR6C4
261
261
  PyFunceble/query/requests/adapter/__init__.py,sha256=IgU8Tp-EvHnErmTw57qeOKdbMhooKqAn-KhWwErx4B4,2474
262
262
  PyFunceble/query/requests/adapter/base.py,sha256=n1Ex4OdyFiKnWNyEv24O2fMe1qBccOJmGUYjycoHN6I,9581
263
263
  PyFunceble/query/requests/adapter/http.py,sha256=YDU0KZZPRMxBcNBvktJU1RhMK5XsIBvLZtPoBt3cpOY,5667
264
- PyFunceble/query/requests/adapter/https.py,sha256=Yj6u9LzIKsCuJ1MVfoilEhcPqG1BUeT9nTcwVFTUdDs,6142
264
+ PyFunceble/query/requests/adapter/https.py,sha256=Mv5TG1Jv5vex3g-fWLdjVOCvPTgcbO-_Vf-1a3Gw30o,6146
265
265
  PyFunceble/query/whois/__init__.py,sha256=bQIlZvVsOgqR6gR-JyLOU4nZni2v88knJcEkpT5GFL0,2495
266
266
  PyFunceble/query/whois/query_tool.py,sha256=QgNJrB0knHNYKfgbyay2OyhlaZ7QwLrgzYf_awptl4w,14658
267
267
  PyFunceble/query/whois/converter/__init__.py,sha256=r1N9vYoAFfCYC199gDhbo7zLK61UVrrO8ZM0zkM8Hb0,2487
268
268
  PyFunceble/query/whois/converter/base.py,sha256=s_ez8TSBc7KVg6NbYdjqPNttxkN-xGJTUJzkBa0CrZI,4377
269
- PyFunceble/query/whois/converter/digit2digits.py,sha256=YV0YF8u7GnrAeAeKOtn5Yr0bV6EJg2yKpmSbCl49UEM,3460
269
+ PyFunceble/query/whois/converter/digit2digits.py,sha256=W-Ky5dq9dmvL5LOzr0CgsVRJpNMIRmALutsfrbQtHME,3461
270
270
  PyFunceble/query/whois/converter/expiration_date.py,sha256=K9SQqg46IBr33b6dVPHv9wDwGGZaV91HG4LcG3rk5Wo,13426
271
271
  PyFunceble/query/whois/converter/month2unified.py,sha256=AtLryJpSQ3qoObKS4YdQ36h-WRQq82ojsr7G95NXrCQ,4331
272
272
  PyFunceble/query/whois/converter/registrar.py,sha256=RHhvIwHC4ZkZC2xDVdXkZU8Yjl0iv84j7nArVViEENE,4735
@@ -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.7.dist-info/LICENSE,sha256=JBG6UfPnf3940AtwZB6vwAK6YH82Eo6nzMVnjGqopF0,10796
278
- PyFunceble_dev-4.2.7.dist-info/METADATA,sha256=C7B1jWt3he6qCP1GhEMTLvv3OwypChy__03fdg35X5A,15121
279
- PyFunceble_dev-4.2.7.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
280
- PyFunceble_dev-4.2.7.dist-info/entry_points.txt,sha256=Ic1suwopOi_XTgiQi2ErtpY5xT3R8EFMI6B_ONDuR9E,201
281
- PyFunceble_dev-4.2.7.dist-info/top_level.txt,sha256=J7GBKIiNYv93m1AxLy8_gr6ExXyZbMmCVXHMQBTUq2Y,11
282
- PyFunceble_dev-4.2.7.dist-info/RECORD,,
277
+ PyFunceble_dev-4.2.9.dist-info/LICENSE,sha256=JBG6UfPnf3940AtwZB6vwAK6YH82Eo6nzMVnjGqopF0,10796
278
+ PyFunceble_dev-4.2.9.dist-info/METADATA,sha256=T5-XYPQTthigbCW6LDEf8Z7xqf6708jGb42JqfIfZ_k,15118
279
+ PyFunceble_dev-4.2.9.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
280
+ PyFunceble_dev-4.2.9.dist-info/entry_points.txt,sha256=Ic1suwopOi_XTgiQi2ErtpY5xT3R8EFMI6B_ONDuR9E,201
281
+ PyFunceble_dev-4.2.9.dist-info/top_level.txt,sha256=J7GBKIiNYv93m1AxLy8_gr6ExXyZbMmCVXHMQBTUq2Y,11
282
+ PyFunceble_dev-4.2.9.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5