PyFunceble-dev 4.3.0a10__py3-none-any.whl → 4.3.0a12__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.
@@ -103,6 +103,9 @@ def get_configured_value(
103
103
  else:
104
104
  result = PyFunceble.facility.ConfigLoader.get_configured_value(entry)
105
105
 
106
+ if isinstance(result, str) and "%" in result:
107
+ result = result.replace("%", "%%")
108
+
106
109
  if negate:
107
110
  result = not result
108
111
 
@@ -587,6 +590,18 @@ def get_test_control_group_data() -> List[Tuple[List[str], dict]]:
587
590
  "get the latest (automatically) for you.",
588
591
  },
589
592
  ),
593
+ (
594
+ [
595
+ "--user-agent-reference",
596
+ ],
597
+ {
598
+ "dest": "user_agent.reference",
599
+ "type": str,
600
+ "help": "Sets the reference to append to the user agent.\n\n"
601
+ "This is useful when you want to add a reference to the "
602
+ "user agent. %s" % get_configured_value("user_agent.reference"),
603
+ },
604
+ ),
590
605
  (
591
606
  [
592
607
  "-vsc",
@@ -833,6 +848,16 @@ def get_output_control_group_data() -> List[Tuple[List[str], dict]]:
833
848
  "default": "all",
834
849
  },
835
850
  ),
851
+ (
852
+ ["--display-datetime-fmt"],
853
+ {
854
+ "dest": "cli_testing.display_mode.datetime_format",
855
+ "type": str,
856
+ "help": "Sets the datetime format to use when displaying the\n"
857
+ "datetime of the test. %s"
858
+ % get_configured_value("cli_testing.display_mode.datetime_format"),
859
+ },
860
+ ),
836
861
  (
837
862
  [
838
863
  "--dots",
@@ -53,7 +53,7 @@ License:
53
53
  import copy
54
54
  import functools
55
55
  import string
56
- from typing import Dict, List, Optional
56
+ from typing import Any, Callable, Dict, List, Optional
57
57
 
58
58
 
59
59
  class PrinterBase:
@@ -81,14 +81,15 @@ class PrinterBase:
81
81
  "minutes": 2,
82
82
  "seconds": 6,
83
83
  "registrar": 30,
84
+ "tested_at": 19,
84
85
  }
85
86
 
86
87
  TEMPLATES: Dict[str, string.Template] = {
87
88
  "all": string.Template(
88
89
  "$idna_subject $status $status_source $expiration_date $registrar "
89
- "$http_status_code $checker_type"
90
+ "$http_status_code $checker_type $tested_at"
90
91
  ),
91
- "less": string.Template("$idna_subject $status $status_source"),
92
+ "less": string.Template("$idna_subject $status $status_source $tested_at"),
92
93
  "simple": string.Template("$idna_subject $status"),
93
94
  "percentage": string.Template("$status $percentage $amount"),
94
95
  "hosts": string.Template("$ip $idna_subject"),
@@ -114,8 +115,11 @@ class PrinterBase:
114
115
  "minutes": "Minutes",
115
116
  "seconds": "Seconds",
116
117
  "registrar": "Registrar",
118
+ "tested_at": "Tested At",
117
119
  }
118
120
 
121
+ extra_formatters: Dict[str, Callable[..., Any]] = {}
122
+
119
123
  _template_to_use: Optional[str] = None
120
124
  _dataset: Optional[Dict[str, str]] = None
121
125
  _skip_column: Optional[List[str]] = []
@@ -126,6 +130,7 @@ class PrinterBase:
126
130
  *,
127
131
  dataset: Optional[Dict[str, str]] = None,
128
132
  skip_column: Optional[List[str]] = None,
133
+ extra_formatters: Optional[Dict[str, Callable[..., Any]]] = None,
129
134
  ) -> None:
130
135
  if template_to_use is not None:
131
136
  self.template_to_use = template_to_use
@@ -136,6 +141,9 @@ class PrinterBase:
136
141
  if skip_column is not None:
137
142
  self.skip_column = skip_column
138
143
 
144
+ if extra_formatters is not None:
145
+ self.extra_formatters.update(extra_formatters)
146
+
139
147
  def ensure_template_to_use_is_given(func): # pylint: disable=no-self-argument
140
148
  """
141
149
  Ensures that the template to use is given before launching the
@@ -315,9 +323,11 @@ class PrinterBase:
315
323
  continue
316
324
 
317
325
  if key in self.skip_column:
318
- self.TEMPLATES[self.template_to_use].template = self.TEMPLATES[
319
- self.template_to_use
320
- ].template.replace(f"${key} ", "")
326
+ self.TEMPLATES[self.template_to_use].template = (
327
+ self.TEMPLATES[self.template_to_use]
328
+ .template.replace(f"${key} ", "")
329
+ .replace(f" ${key}", "")
330
+ )
321
331
  continue
322
332
 
323
333
  to_print_data[0][key] = f"{value:<{self.STD_LENGTH[key]}}"
@@ -354,6 +364,9 @@ class PrinterBase:
354
364
  if not value and value != 0:
355
365
  value = self.STD_UNKNOWN
356
366
 
367
+ if key in self.extra_formatters:
368
+ value = self.extra_formatters[key](value)
369
+
357
370
  if self.template_to_use not in ignore_length:
358
371
  to_print[key] = f"{value:<{self.STD_LENGTH[key]}}"
359
372
  else:
@@ -106,12 +106,25 @@ class ProducerWorker(WorkerBase):
106
106
 
107
107
  def __post_init__(self) -> None:
108
108
  skip_columns = []
109
+ extra_formatters = {}
109
110
 
110
111
  if not PyFunceble.storage.CONFIGURATION.cli_testing.display_mode.registrar:
111
112
  skip_columns.append("registrar")
112
113
 
113
- self.stdout_printer = StdoutPrinter(skip_column=skip_columns)
114
- self.file_printer = FilePrinter(skip_column=skip_columns)
114
+ if not PyFunceble.storage.CONFIGURATION.cli_testing.display_mode.datetime:
115
+ skip_columns.append("tested_at")
116
+ else:
117
+ # pylint: disable=line-too-long
118
+ extra_formatters["tested_at"] = lambda x: x.strftime(
119
+ PyFunceble.storage.CONFIGURATION.cli_testing.display_mode.datetime_format
120
+ )
121
+
122
+ self.stdout_printer = StdoutPrinter(
123
+ skip_column=skip_columns, extra_formatters=extra_formatters
124
+ )
125
+ self.file_printer = FilePrinter(
126
+ skip_column=skip_columns, extra_formatters=extra_formatters
127
+ )
115
128
  self.whois_dataset = get_whois_dataset_object(db_session=self.db_session)
116
129
  self.inactive_dataset = get_inactive_dataset_object(db_session=self.db_session)
117
130
  self.continue_dataset = get_continue_databaset_object(
@@ -377,6 +377,20 @@ cli_testing:
377
377
  # CLI Argument: --max-registrar
378
378
  max_registrar: 15
379
379
 
380
+ # Enable/Disable the printing of the datetime of the test.
381
+ #
382
+ # CLI Argument: --display-datetime
383
+ datetime: no
384
+
385
+ # The format to use when displaying the datetime of the test.
386
+ #
387
+ # WARNING:
388
+ # This parameter is only taken into consideration when `datetime` is set
389
+ # to `yes`.
390
+ #
391
+ # CLI Argument: --display-datetime-fmt
392
+ datetime_format: "%Y-%m-%d %H:%M:%S"
393
+
380
394
  testing_mode:
381
395
  # Provides and select the testing mode.
382
396
  #
@@ -615,6 +629,17 @@ user_agent:
615
629
  # CLI Argument: -ua | --user-agent
616
630
  custom: null
617
631
 
632
+ # Set the reference to add to the User-Agent.
633
+ # This is useful when you want to add a reference (e.g. a link) to the User-Agent.
634
+ #
635
+ # The reference will be added at the end of the User-Agent in the following format:
636
+ # {user_agent}; +{reference}
637
+ #
638
+ # When set to `null`, no reference will be added.
639
+ #
640
+ # CLI Argument: --user-agent-reference
641
+ reference: null
642
+
618
643
  proxy:
619
644
  # Provides everything related to the proxy usage and configuration.
620
645
  #
@@ -196,6 +196,30 @@ class UserAgentDataset(DatasetBase):
196
196
  and bool(self[browser_short_name.lower()][platform.lower()])
197
197
  )
198
198
 
199
+ def format_user_agent(
200
+ self, user_agent: str, *, reference: Optional[str] = None
201
+ ) -> str:
202
+ """
203
+ Given a user agent and a reference, it returns the formatted user agent
204
+ that we have to use.
205
+
206
+ :param user_agent:
207
+ The user agent to format.
208
+ :param reference:
209
+ The reference to append to the user agent.
210
+
211
+ :return:
212
+ The formatted user agent.
213
+ """
214
+
215
+ user_agent = user_agent.strip()
216
+
217
+ if reference:
218
+ if user_agent.endswith(";"):
219
+ return f"{user_agent} +{reference}"
220
+ return f"{user_agent}; +{reference}"
221
+ return user_agent
222
+
199
223
  def get_latest(self) -> str:
200
224
  """
201
225
  Provides the latest user agent for the given platform.
@@ -205,12 +229,19 @@ class UserAgentDataset(DatasetBase):
205
229
  (if exists).
206
230
  """
207
231
 
232
+ reference = None
233
+
208
234
  if PyFunceble.storage.CONFIGURATION:
235
+ reference = PyFunceble.storage.CONFIGURATION.user_agent.reference
236
+
209
237
  if (
210
238
  PyFunceble.storage.CONFIGURATION.user_agent
211
239
  and PyFunceble.storage.CONFIGURATION.user_agent.custom
212
240
  ):
213
- return PyFunceble.storage.CONFIGURATION.user_agent.custom
241
+ return self.format_user_agent(
242
+ PyFunceble.storage.CONFIGURATION.user_agent.custom,
243
+ reference=reference,
244
+ )
214
245
 
215
246
  self.set_preferred(
216
247
  PyFunceble.storage.CONFIGURATION.user_agent.browser,
@@ -220,6 +251,9 @@ class UserAgentDataset(DatasetBase):
220
251
  result = self[self.preferred_browser][self.preferred_platform]
221
252
 
222
253
  if isinstance(result, (list, tuple)):
223
- return secrets.choice(result)
254
+ return self.format_user_agent(
255
+ secrets.choice(result),
256
+ reference=reference,
257
+ )
224
258
 
225
- return result
259
+ return self.format_user_agent(result, reference=reference)
PyFunceble/storage.py CHANGED
@@ -60,7 +60,7 @@ from dotenv import load_dotenv
60
60
  from PyFunceble.storage_facility import get_config_directory
61
61
 
62
62
  PROJECT_NAME: str = "PyFunceble"
63
- PROJECT_VERSION: str = "4.3.0a10.dev (Blue Duckling: Tulip)"
63
+ PROJECT_VERSION: str = "4.3.0a12.dev (Blue Duckling: Tulip)"
64
64
 
65
65
  DISTRIBUTED_CONFIGURATION_FILENAME: str = ".PyFunceble_production.yaml"
66
66
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyFunceble-dev
3
- Version: 4.3.0a10
3
+ Version: 4.3.0a12
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,169 +22,169 @@ Classifier: License :: OSI Approved
22
22
  Requires-Python: >=3.9, <4
23
23
  Description-Content-Type: text/markdown
24
24
  License-File: LICENSE
25
- Requires-Dist: python-box[all]~=6.0.0
26
- Requires-Dist: colorama
27
- Requires-Dist: requests[socks]<3
28
- Requires-Dist: setuptools>=65.5.1
29
25
  Requires-Dist: dnspython[DOH]~=2.6.0
30
- Requires-Dist: alembic
31
26
  Requires-Dist: packaging
27
+ Requires-Dist: python-box[all]~=6.0.0
28
+ Requires-Dist: PyYAML
32
29
  Requires-Dist: python-dotenv
30
+ Requires-Dist: PyMySQL
33
31
  Requires-Dist: SQLAlchemy~=2.0
32
+ Requires-Dist: alembic
33
+ Requires-Dist: domain2idna~=1.12.0
34
+ Requires-Dist: colorama
34
35
  Requires-Dist: inflection
36
+ Requires-Dist: requests[socks]<3
35
37
  Requires-Dist: shtab
36
- Requires-Dist: domain2idna~=1.12.0
37
- Requires-Dist: PyYAML
38
- Requires-Dist: PyMySQL
38
+ Requires-Dist: setuptools>=65.5.1
39
39
  Provides-Extra: docs
40
- Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "docs"
41
- Requires-Dist: mkdocstrings[python]~=0.26; extra == "docs"
42
- Requires-Dist: pymdown-extensions~=10.9; extra == "docs"
43
- Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "docs"
40
+ Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "docs"
41
+ Requires-Dist: mkdocs-literate-nav~=0.6; extra == "docs"
44
42
  Requires-Dist: mkdocs-gen-files~=0.5; extra == "docs"
45
- Requires-Dist: mkdocs-material~=9.5; extra == "docs"
43
+ Requires-Dist: pymdown-extensions~=10.9; extra == "docs"
44
+ Requires-Dist: zipp>=3.19.1; extra == "docs"
46
45
  Requires-Dist: mkdocs-section-index~=0.3; extra == "docs"
46
+ Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "docs"
47
+ Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "docs"
48
+ Requires-Dist: mkdocstrings[python]~=0.26; extra == "docs"
47
49
  Requires-Dist: mkdocs~=1.5; extra == "docs"
48
- Requires-Dist: mkdocs-literate-nav~=0.6; extra == "docs"
49
- Requires-Dist: zipp>=3.19.1; extra == "docs"
50
- Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "docs"
50
+ Requires-Dist: mkdocs-material~=9.5; extra == "docs"
51
51
  Provides-Extra: dev
52
- Requires-Dist: black; extra == "dev"
53
52
  Requires-Dist: flake8; extra == "dev"
53
+ Requires-Dist: black; extra == "dev"
54
54
  Requires-Dist: pylint; extra == "dev"
55
55
  Requires-Dist: isort; extra == "dev"
56
56
  Provides-Extra: test
57
- Requires-Dist: tox; extra == "test"
58
57
  Requires-Dist: coverage; extra == "test"
58
+ Requires-Dist: tox; extra == "test"
59
59
  Provides-Extra: psql
60
- Requires-Dist: python-box[all]~=6.0.0; extra == "psql"
61
- Requires-Dist: psycopg2; extra == "psql"
62
- Requires-Dist: colorama; extra == "psql"
63
- Requires-Dist: requests[socks]<3; extra == "psql"
64
- Requires-Dist: setuptools>=65.5.1; extra == "psql"
65
60
  Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql"
66
- Requires-Dist: alembic; extra == "psql"
67
61
  Requires-Dist: packaging; extra == "psql"
62
+ Requires-Dist: python-box[all]~=6.0.0; extra == "psql"
63
+ Requires-Dist: PyYAML; extra == "psql"
68
64
  Requires-Dist: python-dotenv; extra == "psql"
65
+ Requires-Dist: psycopg2; extra == "psql"
66
+ Requires-Dist: PyMySQL; extra == "psql"
69
67
  Requires-Dist: SQLAlchemy~=2.0; extra == "psql"
68
+ Requires-Dist: alembic; extra == "psql"
69
+ Requires-Dist: domain2idna~=1.12.0; extra == "psql"
70
+ Requires-Dist: colorama; extra == "psql"
70
71
  Requires-Dist: inflection; extra == "psql"
72
+ Requires-Dist: requests[socks]<3; extra == "psql"
71
73
  Requires-Dist: shtab; extra == "psql"
72
- Requires-Dist: domain2idna~=1.12.0; extra == "psql"
73
- Requires-Dist: PyYAML; extra == "psql"
74
- Requires-Dist: PyMySQL; extra == "psql"
74
+ Requires-Dist: setuptools>=65.5.1; extra == "psql"
75
75
  Provides-Extra: psql-binary
76
- Requires-Dist: python-box[all]~=6.0.0; extra == "psql-binary"
77
- Requires-Dist: colorama; extra == "psql-binary"
78
- Requires-Dist: requests[socks]<3; extra == "psql-binary"
79
- Requires-Dist: setuptools>=65.5.1; extra == "psql-binary"
80
76
  Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql-binary"
81
- Requires-Dist: alembic; extra == "psql-binary"
82
77
  Requires-Dist: packaging; extra == "psql-binary"
78
+ Requires-Dist: python-box[all]~=6.0.0; extra == "psql-binary"
79
+ Requires-Dist: PyYAML; extra == "psql-binary"
83
80
  Requires-Dist: python-dotenv; extra == "psql-binary"
84
- Requires-Dist: psycopg2-binary; extra == "psql-binary"
81
+ Requires-Dist: PyMySQL; extra == "psql-binary"
85
82
  Requires-Dist: SQLAlchemy~=2.0; extra == "psql-binary"
83
+ Requires-Dist: alembic; extra == "psql-binary"
84
+ Requires-Dist: psycopg2-binary; extra == "psql-binary"
85
+ Requires-Dist: domain2idna~=1.12.0; extra == "psql-binary"
86
+ Requires-Dist: colorama; extra == "psql-binary"
86
87
  Requires-Dist: inflection; extra == "psql-binary"
88
+ Requires-Dist: requests[socks]<3; extra == "psql-binary"
87
89
  Requires-Dist: shtab; extra == "psql-binary"
88
- Requires-Dist: domain2idna~=1.12.0; extra == "psql-binary"
89
- Requires-Dist: PyYAML; extra == "psql-binary"
90
- Requires-Dist: PyMySQL; extra == "psql-binary"
90
+ Requires-Dist: setuptools>=65.5.1; extra == "psql-binary"
91
91
  Provides-Extra: postgresql
92
- Requires-Dist: python-box[all]~=6.0.0; extra == "postgresql"
93
- Requires-Dist: psycopg2; extra == "postgresql"
94
- Requires-Dist: colorama; extra == "postgresql"
95
- Requires-Dist: requests[socks]<3; extra == "postgresql"
96
- Requires-Dist: setuptools>=65.5.1; extra == "postgresql"
97
92
  Requires-Dist: dnspython[DOH]~=2.6.0; extra == "postgresql"
98
- Requires-Dist: alembic; extra == "postgresql"
99
93
  Requires-Dist: packaging; extra == "postgresql"
94
+ Requires-Dist: python-box[all]~=6.0.0; extra == "postgresql"
95
+ Requires-Dist: PyYAML; extra == "postgresql"
100
96
  Requires-Dist: python-dotenv; extra == "postgresql"
97
+ Requires-Dist: psycopg2; extra == "postgresql"
98
+ Requires-Dist: PyMySQL; extra == "postgresql"
101
99
  Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql"
100
+ Requires-Dist: alembic; extra == "postgresql"
101
+ Requires-Dist: domain2idna~=1.12.0; extra == "postgresql"
102
+ Requires-Dist: colorama; extra == "postgresql"
102
103
  Requires-Dist: inflection; extra == "postgresql"
104
+ Requires-Dist: requests[socks]<3; extra == "postgresql"
103
105
  Requires-Dist: shtab; extra == "postgresql"
104
- Requires-Dist: domain2idna~=1.12.0; extra == "postgresql"
105
- Requires-Dist: PyYAML; extra == "postgresql"
106
- Requires-Dist: PyMySQL; extra == "postgresql"
106
+ Requires-Dist: setuptools>=65.5.1; extra == "postgresql"
107
107
  Provides-Extra: postgresql-binary
108
- Requires-Dist: python-box[all]~=6.0.0; extra == "postgresql-binary"
109
- Requires-Dist: colorama; extra == "postgresql-binary"
110
- Requires-Dist: requests[socks]<3; extra == "postgresql-binary"
111
- Requires-Dist: setuptools>=65.5.1; extra == "postgresql-binary"
112
108
  Requires-Dist: dnspython[DOH]~=2.6.0; extra == "postgresql-binary"
113
- Requires-Dist: alembic; extra == "postgresql-binary"
114
109
  Requires-Dist: packaging; extra == "postgresql-binary"
110
+ Requires-Dist: python-box[all]~=6.0.0; extra == "postgresql-binary"
111
+ Requires-Dist: PyYAML; extra == "postgresql-binary"
115
112
  Requires-Dist: python-dotenv; extra == "postgresql-binary"
116
- Requires-Dist: psycopg2-binary; extra == "postgresql-binary"
113
+ Requires-Dist: PyMySQL; extra == "postgresql-binary"
117
114
  Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql-binary"
115
+ Requires-Dist: alembic; extra == "postgresql-binary"
116
+ Requires-Dist: psycopg2-binary; extra == "postgresql-binary"
117
+ Requires-Dist: domain2idna~=1.12.0; extra == "postgresql-binary"
118
+ Requires-Dist: colorama; extra == "postgresql-binary"
118
119
  Requires-Dist: inflection; extra == "postgresql-binary"
120
+ Requires-Dist: requests[socks]<3; extra == "postgresql-binary"
119
121
  Requires-Dist: shtab; extra == "postgresql-binary"
120
- Requires-Dist: domain2idna~=1.12.0; extra == "postgresql-binary"
121
- Requires-Dist: PyYAML; extra == "postgresql-binary"
122
- Requires-Dist: PyMySQL; extra == "postgresql-binary"
122
+ Requires-Dist: setuptools>=65.5.1; extra == "postgresql-binary"
123
123
  Provides-Extra: full
124
- Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "full"
125
- Requires-Dist: mkdocstrings[python]~=0.26; extra == "full"
126
- Requires-Dist: isort; extra == "full"
127
- Requires-Dist: packaging; extra == "full"
128
- Requires-Dist: shtab; extra == "full"
129
- Requires-Dist: requests[socks]<3; extra == "full"
130
- Requires-Dist: tox; extra == "full"
131
- Requires-Dist: mkdocs-gen-files~=0.5; extra == "full"
132
- Requires-Dist: mkdocs-section-index~=0.3; extra == "full"
133
- Requires-Dist: alembic; extra == "full"
134
- Requires-Dist: mkdocs-literate-nav~=0.6; extra == "full"
135
- Requires-Dist: python-box[all]~=6.0.0; extra == "full"
124
+ Requires-Dist: PyMySQL; extra == "full"
136
125
  Requires-Dist: black; extra == "full"
137
- Requires-Dist: domain2idna~=1.12.0; extra == "full"
138
- Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "full"
139
126
  Requires-Dist: colorama; extra == "full"
140
- Requires-Dist: python-dotenv; extra == "full"
127
+ Requires-Dist: tox; extra == "full"
128
+ Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "full"
129
+ Requires-Dist: setuptools>=65.5.1; extra == "full"
130
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "full"
131
+ Requires-Dist: mkdocs-material~=9.5; extra == "full"
132
+ Requires-Dist: mkdocs-literate-nav~=0.6; extra == "full"
141
133
  Requires-Dist: SQLAlchemy~=2.0; extra == "full"
142
- Requires-Dist: zipp>=3.19.1; extra == "full"
134
+ Requires-Dist: pylint; extra == "full"
135
+ Requires-Dist: mkdocs~=1.5; extra == "full"
136
+ Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "full"
137
+ Requires-Dist: packaging; extra == "full"
143
138
  Requires-Dist: PyYAML; extra == "full"
144
139
  Requires-Dist: coverage; extra == "full"
140
+ Requires-Dist: mkdocs-gen-files~=0.5; extra == "full"
145
141
  Requires-Dist: pymdown-extensions~=10.9; extra == "full"
146
- Requires-Dist: mkdocs-material~=9.5; extra == "full"
147
- Requires-Dist: setuptools>=65.5.1; extra == "full"
148
- Requires-Dist: dnspython[DOH]~=2.6.0; extra == "full"
149
- Requires-Dist: flake8; extra == "full"
150
- Requires-Dist: mkdocs~=1.5; extra == "full"
151
- Requires-Dist: pylint; extra == "full"
152
142
  Requires-Dist: inflection; extra == "full"
143
+ Requires-Dist: flake8; extra == "full"
144
+ Requires-Dist: requests[socks]<3; extra == "full"
145
+ Requires-Dist: mkdocstrings[python]~=0.26; extra == "full"
146
+ Requires-Dist: python-box[all]~=6.0.0; extra == "full"
153
147
  Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "full"
154
- Requires-Dist: PyMySQL; extra == "full"
148
+ Requires-Dist: python-dotenv; extra == "full"
149
+ Requires-Dist: alembic; extra == "full"
150
+ Requires-Dist: domain2idna~=1.12.0; extra == "full"
151
+ Requires-Dist: zipp>=3.19.1; extra == "full"
152
+ Requires-Dist: mkdocs-section-index~=0.3; extra == "full"
153
+ Requires-Dist: shtab; extra == "full"
154
+ Requires-Dist: isort; extra == "full"
155
155
  Provides-Extra: all
156
- Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "all"
157
- Requires-Dist: mkdocstrings[python]~=0.26; extra == "all"
158
- Requires-Dist: isort; extra == "all"
159
- Requires-Dist: packaging; extra == "all"
160
- Requires-Dist: shtab; extra == "all"
161
- Requires-Dist: requests[socks]<3; extra == "all"
162
- Requires-Dist: tox; extra == "all"
163
- Requires-Dist: mkdocs-gen-files~=0.5; extra == "all"
164
- Requires-Dist: mkdocs-section-index~=0.3; extra == "all"
165
- Requires-Dist: alembic; extra == "all"
166
- Requires-Dist: mkdocs-literate-nav~=0.6; extra == "all"
167
- Requires-Dist: python-box[all]~=6.0.0; extra == "all"
156
+ Requires-Dist: PyMySQL; extra == "all"
168
157
  Requires-Dist: black; extra == "all"
169
- Requires-Dist: domain2idna~=1.12.0; extra == "all"
170
- Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "all"
171
158
  Requires-Dist: colorama; extra == "all"
172
- Requires-Dist: python-dotenv; extra == "all"
159
+ Requires-Dist: tox; extra == "all"
160
+ Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "all"
161
+ Requires-Dist: setuptools>=65.5.1; extra == "all"
162
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "all"
163
+ Requires-Dist: mkdocs-material~=9.5; extra == "all"
164
+ Requires-Dist: mkdocs-literate-nav~=0.6; extra == "all"
173
165
  Requires-Dist: SQLAlchemy~=2.0; extra == "all"
174
- Requires-Dist: zipp>=3.19.1; extra == "all"
166
+ Requires-Dist: pylint; extra == "all"
167
+ Requires-Dist: mkdocs~=1.5; extra == "all"
168
+ Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "all"
169
+ Requires-Dist: packaging; extra == "all"
175
170
  Requires-Dist: PyYAML; extra == "all"
176
171
  Requires-Dist: coverage; extra == "all"
177
- Requires-Dist: pymdown-extensions~=10.9; extra == "all"
178
- Requires-Dist: mkdocs-material~=9.5; extra == "all"
179
- Requires-Dist: setuptools>=65.5.1; extra == "all"
180
- Requires-Dist: dnspython[DOH]~=2.6.0; extra == "all"
181
172
  Requires-Dist: psycopg2-binary; extra == "all"
182
- Requires-Dist: flake8; extra == "all"
183
- Requires-Dist: mkdocs~=1.5; extra == "all"
184
- Requires-Dist: pylint; extra == "all"
173
+ Requires-Dist: mkdocs-gen-files~=0.5; extra == "all"
174
+ Requires-Dist: pymdown-extensions~=10.9; extra == "all"
185
175
  Requires-Dist: inflection; extra == "all"
176
+ Requires-Dist: flake8; extra == "all"
177
+ Requires-Dist: requests[socks]<3; extra == "all"
178
+ Requires-Dist: mkdocstrings[python]~=0.26; extra == "all"
179
+ Requires-Dist: python-box[all]~=6.0.0; extra == "all"
186
180
  Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "all"
187
- Requires-Dist: PyMySQL; extra == "all"
181
+ Requires-Dist: python-dotenv; extra == "all"
182
+ Requires-Dist: alembic; extra == "all"
183
+ Requires-Dist: domain2idna~=1.12.0; extra == "all"
184
+ Requires-Dist: zipp>=3.19.1; extra == "all"
185
+ Requires-Dist: mkdocs-section-index~=0.3; extra == "all"
186
+ Requires-Dist: shtab; extra == "all"
187
+ Requires-Dist: isort; extra == "all"
188
188
 
189
189
  ![image](https://raw.githubusercontent.com/PyFunceble/logo/dev/Green/HD/RM.png)
190
190
 
@@ -4,7 +4,7 @@ PyFunceble/facility.py,sha256=hyEzCCTOgtAS0x88uEtv9xNwIXnDCDvgq5RHcPNDE-A,2626
4
4
  PyFunceble/factory.py,sha256=ETvTe1Ss3VaIhSBOj-ro80XFAYiknsGG9B5oKpubr2s,2576
5
5
  PyFunceble/logger.py,sha256=pmValhdu0XB34FrK1rSgOAhr4spQ8a3QbqQ26jpJHa0,16815
6
6
  PyFunceble/sessions.py,sha256=juHBKHSuVd-tAEIMRj3RXyGyUhZQLEBmeMssd_5qo1U,2568
7
- PyFunceble/storage.py,sha256=X35auX_MMppw97ZumraS9xS9LbAsKWRZY4X144QqZi8,5349
7
+ PyFunceble/storage.py,sha256=l-irElCfBaHqwf9f8nPprRKrBhGx-FCacEtYY8WMFO0,5349
8
8
  PyFunceble/storage_facility.py,sha256=uvW91dOTxF7-2nXxIp2xGI5sDRABBoGMA7D9xfemfGk,4819
9
9
  PyFunceble/checker/__init__.py,sha256=jSCfY25VNBrxLECSgNwU6kTGSl0bM1_JLl_UKvtKP6w,2430
10
10
  PyFunceble/checker/base.py,sha256=WP9Rjl6rvsq69oCaG4a5WDhoWofMpyxfa4K-WY27Gxw,13615
@@ -73,7 +73,7 @@ PyFunceble/cli/entry_points/production.py,sha256=dURFC6pq3cPmdECFea-q8KtJtuH2SoD
73
73
  PyFunceble/cli/entry_points/public_suffix.py,sha256=ES0r2xEhr197fasJlBtqO78RLAXgVVB58L6wIlSC1q0,4332
74
74
  PyFunceble/cli/entry_points/pyfunceble/__init__.py,sha256=RQ_anWOFdIlU2AVC7i_iKcj_Tq-qttbNwHe0HWVBCms,2485
75
75
  PyFunceble/cli/entry_points/pyfunceble/argsparser.py,sha256=FY3H6IcvHcKs2hIbXQBcjslPALc4AYhRwqvCdpU1Gd4,4748
76
- PyFunceble/cli/entry_points/pyfunceble/cli.py,sha256=oW9QT3r8I8HzRVNN4gjNz9kbizNF7AOSJW56KnbTz7c,48335
76
+ PyFunceble/cli/entry_points/pyfunceble/cli.py,sha256=tQcQiwQ3N6bo9X8seB5afCIc9sZy4rhAMabOYEoLnvE,49254
77
77
  PyFunceble/cli/filesystem/__init__.py,sha256=eIS11poQbnYOC9PhQJ2cRuh4_qiPLJdS9O4RkiJD3HA,2483
78
78
  PyFunceble/cli/filesystem/cleanup.py,sha256=4Q04KAfHlkp0NiHmDN_BVuv2QBRN-D_5vJybE7Ohw2E,4813
79
79
  PyFunceble/cli/filesystem/counter.py,sha256=Fp1Tp81hw5T6gY6NBW9hNL7U1vweotNt8plWRwbXtfM,6963
@@ -86,7 +86,7 @@ PyFunceble/cli/filesystem/dir_structure/backup.py,sha256=IomFlcp6XMPbvFrGiqSreo8
86
86
  PyFunceble/cli/filesystem/dir_structure/base.py,sha256=5hYk53WMjQ9glZhYXYLulEPF57EpWBtCPK2QtLywk-4,5314
87
87
  PyFunceble/cli/filesystem/dir_structure/restore.py,sha256=WxERB43nqD4o0LjpdKJl3nenKaFc1KXed8C_gkaQouw,5869
88
88
  PyFunceble/cli/filesystem/printer/__init__.py,sha256=7f7CgyOD7Rr2E5IGw99XiO1b_VSH_Nb6T6klH3gDJfM,2484
89
- PyFunceble/cli/filesystem/printer/base.py,sha256=9SG2gSB6eRJyyQPlpX8qTX7QtFVKb39m5idsJC8v6Oo,12251
89
+ PyFunceble/cli/filesystem/printer/base.py,sha256=ZEFxTFvcn2hdKtwvdZ6GbXsUIwlK0VHL1NyHKBitBEE,12760
90
90
  PyFunceble/cli/filesystem/printer/file.py,sha256=YqUXB1-Bw7INYhX7RdQgmRc7LDxDLdEEnq77ALifoOY,6858
91
91
  PyFunceble/cli/filesystem/printer/stdout.py,sha256=eWAKQf1bUANLZwQDvEibw6MmDLo-nM3iy7YAv70iu8c,7695
92
92
  PyFunceble/cli/migrators/__init__.py,sha256=SNg9YIhkG_Uv5E6GtGnmD2hjeAD6Pno5U7-clQdWo0g,2438
@@ -129,7 +129,7 @@ PyFunceble/cli/processes/workers/file_sorter.py,sha256=OEAsOFBUyM1mFt9AEFfN8-_mQ
129
129
  PyFunceble/cli/processes/workers/file_sorter_base.py,sha256=KodJbkydFNRb3_2t1OcQ9qx5ersi3N-SG8uxFMjsYpg,8002
130
130
  PyFunceble/cli/processes/workers/migrator.py,sha256=9G7uAkXNdIqSoQAcbW1LjznmPoTKh0Hg6703HZH4w98,3477
131
131
  PyFunceble/cli/processes/workers/miner.py,sha256=Xxr3lSAinfpNfL-S1DPWjWoYqDzFC_DM8kh1L2UGx9o,6991
132
- PyFunceble/cli/processes/workers/producer.py,sha256=wXMyR8TIlPqW4dLZAifMRb77H41bjcCRZv7UJL4D0ow,17352
132
+ PyFunceble/cli/processes/workers/producer.py,sha256=aqMimnzbyV4Ue88R69lOOowNEcN6IJ71XZIccBvzylM,17853
133
133
  PyFunceble/cli/processes/workers/tester.py,sha256=WRRYbWWckww1LuF_5wJTUPKVRpNMMZpdne90_cclpwo,11598
134
134
  PyFunceble/cli/scripts/__init__.py,sha256=iAXtKOkDEGrBa-zuzvVjGKH1PgjcxnGujMZzZqWj7T0,2437
135
135
  PyFunceble/cli/scripts/iana.py,sha256=VLZiLhvLx-LFpAiS0FIq4KGqsgYAM59e1EMPFR6x-Us,10346
@@ -184,7 +184,7 @@ PyFunceble/data/alembic/postgresql/env.py,sha256=UfJff9bY99TTC0z9bQgsm17NqsGnLmz
184
184
  PyFunceble/data/alembic/postgresql/script.py.mako,sha256=8_xgA-gm_OhehnO7CiIijWgnm00ZlszEHtIHrAYFJl0,494
185
185
  PyFunceble/data/alembic/postgresql/versions/__init__.py,sha256=5E57ZZeUcnx4sgc3LJh6e6bjgeaQhS4W-f2UVuUYsrs,2452
186
186
  PyFunceble/data/alembic/postgresql/versions/a32ac5d66eee_initial_version.py,sha256=xJdnoCnHAG1vmt-nBeomuIEDRwUK1Upv1mtkUt1txQM,2487
187
- PyFunceble/data/infrastructure/.PyFunceble_production.yaml,sha256=gw0EUuaANnTMZ7xJAeevZXodJXBnB9lVMbJ81uhCADY,24636
187
+ PyFunceble/data/infrastructure/.PyFunceble_production.yaml,sha256=Mpz5HKewJvZNhyOV0W4WLURgoOVtPC7bQJ2-yh3StE4,25411
188
188
  PyFunceble/data/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
189
  PyFunceble/data/infrastructure/dir_structure_production.json,sha256=XpWin49SkoWu3pvnsoNlbNh6j9MlTGVKkvTmX99jZkM,5722
190
190
  PyFunceble/database/__init__.py,sha256=r8zmExtTZguf07GzlaYW5hz11DCC1C6qeU3XvkSQXSU,2492
@@ -210,7 +210,7 @@ PyFunceble/dataset/iana.py,sha256=oMSx8p2PQV0tsHejqqqyacos9AzksEOq6YucDAFncBw,40
210
210
  PyFunceble/dataset/ipv4_reputation.py,sha256=a0KjYvXpaNCKOsK9yIgre-3YP2m3w_jO0_yk9b2mdOI,3977
211
211
  PyFunceble/dataset/public_suffix.py,sha256=q3cUQwHP9_WxAykH45M4EhDOXxUJifpJafAAcOhg51Q,4085
212
212
  PyFunceble/dataset/sql_base.py,sha256=bkUd-1iC_D_uhSfmZ4LGLMaZS3BJqzLOlVjhXqJWORk,10545
213
- PyFunceble/dataset/user_agent.py,sha256=uQyFEnAW35y488T9zYkqoZ1bpl7xv-W74MiXAOnZGF4,7982
213
+ PyFunceble/dataset/user_agent.py,sha256=sj4SLbvxltcNAyz_sBvzZ_ynwKPkLJP31s7Q8CPWx_I,9004
214
214
  PyFunceble/dataset/autocontinue/__init__.py,sha256=GyRntA6zAcd2CBm1fEO1PLYKxi8jbAJei5J88CS315w,2461
215
215
  PyFunceble/dataset/autocontinue/base.py,sha256=46yPQEUtonojqKm8Q0DQjuIaOIKRvO9DlQ-K_79flwQ,3499
216
216
  PyFunceble/dataset/autocontinue/csv.py,sha256=PRcn9xAZp2htb7mao3EgUFOpIcSi5TBOpEIwcb0dDyE,6275
@@ -275,9 +275,9 @@ PyFunceble/utils/__init__.py,sha256=Vnhd0wNrWJulWwUUK-vlv5VWBiKfSnXtI2XH_FyYkBA,
275
275
  PyFunceble/utils/platform.py,sha256=JA6rc6Uyx6czNWR9917HGB-EZyMjMK17kUVagMtEEjs,3906
276
276
  PyFunceble/utils/profile.py,sha256=f9FsKuiN3ScftqqrZ3yGpcIFqGSf616dPT_QvBduqxw,4552
277
277
  PyFunceble/utils/version.py,sha256=LvSiIrQWztuQ1qT7ekiDvh5TateyVRGMFRui73O4wFQ,8371
278
- PyFunceble_dev-4.3.0a10.dist-info/LICENSE,sha256=JBG6UfPnf3940AtwZB6vwAK6YH82Eo6nzMVnjGqopF0,10796
279
- PyFunceble_dev-4.3.0a10.dist-info/METADATA,sha256=h3h6u3_sSbsHwFX9jO5OnDb2Ba2JUUx1QkliDqX_7SI,46666
280
- PyFunceble_dev-4.3.0a10.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
281
- PyFunceble_dev-4.3.0a10.dist-info/entry_points.txt,sha256=Ic1suwopOi_XTgiQi2ErtpY5xT3R8EFMI6B_ONDuR9E,201
282
- PyFunceble_dev-4.3.0a10.dist-info/top_level.txt,sha256=J7GBKIiNYv93m1AxLy8_gr6ExXyZbMmCVXHMQBTUq2Y,11
283
- PyFunceble_dev-4.3.0a10.dist-info/RECORD,,
278
+ PyFunceble_dev-4.3.0a12.dist-info/LICENSE,sha256=JBG6UfPnf3940AtwZB6vwAK6YH82Eo6nzMVnjGqopF0,10796
279
+ PyFunceble_dev-4.3.0a12.dist-info/METADATA,sha256=GpLyEPEnZkt_glJF6_X5EiUPX3DT0M1xLuhUdI6SyTs,46666
280
+ PyFunceble_dev-4.3.0a12.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
281
+ PyFunceble_dev-4.3.0a12.dist-info/entry_points.txt,sha256=Ic1suwopOi_XTgiQi2ErtpY5xT3R8EFMI6B_ONDuR9E,201
282
+ PyFunceble_dev-4.3.0a12.dist-info/top_level.txt,sha256=J7GBKIiNYv93m1AxLy8_gr6ExXyZbMmCVXHMQBTUq2Y,11
283
+ PyFunceble_dev-4.3.0a12.dist-info/RECORD,,