PyFunceble-dev 4.3.0a5__py3-none-any.whl → 4.3.0a10__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 (41) hide show
  1. PyFunceble/checker/availability/base.py +0 -1
  2. PyFunceble/checker/availability/domain.py +0 -1
  3. PyFunceble/checker/availability/extras/base.py +18 -18
  4. PyFunceble/checker/availability/extras/etoxic.py +0 -1
  5. PyFunceble/checker/availability/extras/parked.py +1 -2
  6. PyFunceble/checker/availability/extras/rules.py +64 -5
  7. PyFunceble/checker/availability/extras/subject_switch.py +1 -1
  8. PyFunceble/checker/availability/ip.py +0 -1
  9. PyFunceble/checker/availability/url.py +0 -1
  10. PyFunceble/checker/reputation/base.py +0 -1
  11. PyFunceble/cli/processes/migrator.py +0 -1
  12. PyFunceble/cli/processes/workers/base.py +5 -3
  13. PyFunceble/cli/processes/workers/dir_files_sorter.py +0 -1
  14. PyFunceble/cli/processes/workers/file_sorter.py +0 -1
  15. PyFunceble/cli/processes/workers/file_sorter_base.py +0 -1
  16. PyFunceble/cli/processes/workers/migrator.py +0 -1
  17. PyFunceble/cli/processes/workers/miner.py +7 -9
  18. PyFunceble/cli/processes/workers/tester.py +2 -6
  19. PyFunceble/cli/scripts/iana.py +11 -1
  20. PyFunceble/cli/scripts/public_suffix.py +14 -1
  21. PyFunceble/cli/system/launcher.py +27 -14
  22. PyFunceble/cli/utils/version.py +27 -15
  23. PyFunceble/config/loader.py +43 -12
  24. PyFunceble/downloader/base.py +13 -3
  25. PyFunceble/helpers/download.py +147 -20
  26. PyFunceble/helpers/hash.py +10 -18
  27. PyFunceble/query/dns/nameserver.py +12 -6
  28. PyFunceble/query/dns/query_tool.py +3 -1
  29. PyFunceble/query/http_status_code.py +9 -7
  30. PyFunceble/query/platform.py +7 -8
  31. PyFunceble/query/requests/adapter/base.py +36 -4
  32. PyFunceble/query/requests/adapter/http.py +2 -3
  33. PyFunceble/query/requests/adapter/https.py +2 -2
  34. PyFunceble/query/requests/requester.py +70 -41
  35. PyFunceble/storage.py +1 -4
  36. {PyFunceble_dev-4.3.0a5.dist-info → PyFunceble_dev-4.3.0a10.dist-info}/METADATA +173 -68
  37. {PyFunceble_dev-4.3.0a5.dist-info → PyFunceble_dev-4.3.0a10.dist-info}/RECORD +41 -41
  38. {PyFunceble_dev-4.3.0a5.dist-info → PyFunceble_dev-4.3.0a10.dist-info}/WHEEL +1 -1
  39. {PyFunceble_dev-4.3.0a5.dist-info → PyFunceble_dev-4.3.0a10.dist-info}/LICENSE +0 -0
  40. {PyFunceble_dev-4.3.0a5.dist-info → PyFunceble_dev-4.3.0a10.dist-info}/entry_points.txt +0 -0
  41. {PyFunceble_dev-4.3.0a5.dist-info → PyFunceble_dev-4.3.0a10.dist-info}/top_level.txt +0 -0
@@ -55,7 +55,6 @@ import urllib.parse
55
55
  import requests
56
56
 
57
57
  import PyFunceble.facility
58
- import PyFunceble.storage
59
58
  from PyFunceble.query.requests.adapter.base import RequestAdapterBase
60
59
 
61
60
 
@@ -117,10 +116,10 @@ class RequestHTTPAdapter(RequestAdapterBase):
117
116
  request.headers["Host"] = parsed_url.hostname
118
117
  else:
119
118
  self.poolmanager.connection_pool_kw.pop(
120
- "server_hostname", PyFunceble.storage.NOT_RESOLVED_STD_HOSTNAME
119
+ "server_hostname", self.NOT_RESOLVED_STD_HOSTNAME
121
120
  )
122
121
  self.poolmanager.connection_pool_kw.pop(
123
- "assert_hostname", PyFunceble.storage.NOT_RESOLVED_STD_HOSTNAME
122
+ "assert_hostname", self.NOT_RESOLVED_STD_HOSTNAME
124
123
  )
125
124
 
126
125
  return self.fake_response()
@@ -125,10 +125,10 @@ class RequestHTTPSAdapter(RequestAdapterBase):
125
125
  request.headers["Host"] = parsed_url.hostname
126
126
  else:
127
127
  self.poolmanager.connection_pool_kw.pop(
128
- "server_hostname", PyFunceble.storage.NOT_RESOLVED_STD_HOSTNAME
128
+ "server_hostname", self.NOT_RESOLVED_STD_HOSTNAME
129
129
  )
130
130
  self.poolmanager.connection_pool_kw.pop(
131
- "assert_hostname", PyFunceble.storage.NOT_RESOLVED_STD_HOSTNAME
131
+ "assert_hostname", self.NOT_RESOLVED_STD_HOSTNAME
132
132
  )
133
133
 
134
134
  self.poolmanager.connection_pool_kw.pop(
@@ -58,8 +58,8 @@ from typing import Optional, Union
58
58
  import requests
59
59
  import requests.exceptions
60
60
  import urllib3.exceptions
61
+ from box import Box
61
62
 
62
- import PyFunceble.facility
63
63
  import PyFunceble.storage
64
64
  from PyFunceble.dataset.user_agent import UserAgentDataset
65
65
  from PyFunceble.query.dns.query_tool import DNSQueryTool
@@ -132,6 +132,8 @@ class Requester:
132
132
  _max_redirects: int = 60
133
133
  _proxy_pattern: dict = {}
134
134
 
135
+ config: Optional[Box] = None
136
+
135
137
  session: Optional[requests.Session] = None
136
138
  dns_query_tool: Optional[DNSQueryTool] = None
137
139
 
@@ -144,7 +146,13 @@ class Requester:
144
146
  max_redirects: Optional[int] = None,
145
147
  dns_query_tool: Optional[DNSQueryTool] = None,
146
148
  proxy_pattern: Optional[dict] = None,
149
+ config: Optional[Box] = None,
147
150
  ) -> None:
151
+ if config is not None:
152
+ self.config = config
153
+ else:
154
+ self.config = Box({}, default_box=True)
155
+
148
156
  if max_retries is not None:
149
157
  self.max_retries = max_retries
150
158
  else:
@@ -207,27 +215,45 @@ class Requester:
207
215
  @functools.wraps(func)
208
216
  def wrapper(self, *args, **kwargs):
209
217
  # pylint: disable=no-member
210
- PyFunceble.facility.Logger.debug(
211
- "Started %r request to %r with %r",
212
- verb.upper(),
213
- args[0],
214
- kwargs,
215
- )
216
218
  req = getattr(self.session, verb.lower())(*args, **kwargs)
217
-
218
- PyFunceble.facility.Logger.debug(
219
- "Finished %r request to %r with %r",
220
- verb.upper(),
221
- args[0],
222
- kwargs,
223
- )
224
-
225
219
  return req
226
220
 
227
221
  return wrapper
228
222
 
229
223
  return request_method
230
224
 
225
+ @property
226
+ def headers(self) -> dict:
227
+ """
228
+ Provides the headers to use.
229
+ """
230
+
231
+ return self.session.headers
232
+
233
+ @headers.setter
234
+ @recreate_session
235
+ def headers(self, value: dict) -> None:
236
+ """
237
+ Sets the headers to use.
238
+
239
+ :param value:
240
+ The headers to set.
241
+ """
242
+
243
+ self.session.headers.update(value)
244
+
245
+ def set_config(self, config: Box) -> "Requester":
246
+ """
247
+ Sets the configuration to work with.
248
+
249
+ :param config:
250
+ The configuration to work with.
251
+ """
252
+
253
+ self.config = config
254
+
255
+ return self
256
+
231
257
  @property
232
258
  def max_retries(self) -> int:
233
259
  """
@@ -276,13 +302,12 @@ class Requester:
276
302
  Try to guess the value from the configuration and set it.
277
303
  """
278
304
 
279
- if PyFunceble.facility.ConfigLoader.is_already_loaded() and bool(
280
- PyFunceble.storage.CONFIGURATION.max_http_retries
281
- ):
282
- self.set_max_retries(
283
- bool(PyFunceble.storage.CONFIGURATION.max_http_retries)
284
- )
285
- else:
305
+ try:
306
+ if isinstance(self.config.max_http_retries, int):
307
+ self.set_max_retries(self.config.max_http_retries)
308
+ else:
309
+ self.set_max_retries(self.STD_MAX_RETRIES)
310
+ except: # pylint: disable=bare-except
286
311
  self.set_max_retries(self.STD_MAX_RETRIES)
287
312
 
288
313
  return self
@@ -373,14 +398,13 @@ class Requester:
373
398
  Try to guess the value from the configuration and set it.
374
399
  """
375
400
 
376
- if PyFunceble.facility.ConfigLoader.is_already_loaded() and bool(
377
- PyFunceble.storage.CONFIGURATION.verify_ssl_certificate
378
- ):
379
- self.set_verify_certificate(
380
- bool(PyFunceble.storage.CONFIGURATION.verify_ssl_certificate)
381
- )
382
- else:
383
- self.set_verify_certificate(self.STD_VERIFY_CERTIFICATE)
401
+ try:
402
+ if isinstance(self.config.verify_ssl_certificate, bool):
403
+ self.set_verify_certificate(self.config.verify_ssl_certificate)
404
+ else:
405
+ self.set_verify_certificate(self.STD_VERIFY_CERTIFICATE)
406
+ except: # pylint: disable=bare-except
407
+ self.set_max_retries(self.STD_MAX_RETRIES)
384
408
 
385
409
  return self
386
410
 
@@ -433,11 +457,12 @@ class Requester:
433
457
  Try to guess the value from the configuration and set it.
434
458
  """
435
459
 
436
- if PyFunceble.facility.ConfigLoader.is_already_loaded() and bool(
437
- PyFunceble.storage.CONFIGURATION.lookup.timeout
438
- ):
439
- self.set_timeout(PyFunceble.storage.CONFIGURATION.lookup.timeout)
440
- else:
460
+ try:
461
+ if isinstance(self.config.lookup.timeout, (int, float)):
462
+ self.set_timeout(self.config.lookup.timeout)
463
+ else:
464
+ self.set_timeout(self.STD_TIMEOUT)
465
+ except: # pylint: disable=bare-except
441
466
  self.set_timeout(self.STD_TIMEOUT)
442
467
 
443
468
  return self
@@ -485,11 +510,12 @@ class Requester:
485
510
  Try to guess the value from the configuration and set it.
486
511
  """
487
512
 
488
- if PyFunceble.facility.ConfigLoader.is_already_loaded() and bool(
489
- PyFunceble.storage.CONFIGURATION.proxy
490
- ):
491
- self.set_proxy_pattern(PyFunceble.storage.CONFIGURATION.proxy)
492
- else:
513
+ try:
514
+ if self.config.proxy:
515
+ self.set_proxy_pattern(self.config.proxy)
516
+ else:
517
+ self.set_proxy_pattern({})
518
+ except: # pylint: disable=bare-except
493
519
  self.set_proxy_pattern({})
494
520
 
495
521
  return self
@@ -551,7 +577,10 @@ class Requester:
551
577
  ),
552
578
  )
553
579
 
554
- custom_headers = {"User-Agent": UserAgentDataset().get_latest()}
580
+ if PyFunceble.storage.USER_AGENTS:
581
+ custom_headers = {"User-Agent": UserAgentDataset().get_latest()}
582
+ else:
583
+ custom_headers = {}
555
584
 
556
585
  session.headers.update(custom_headers)
557
586
 
PyFunceble/storage.py CHANGED
@@ -52,7 +52,6 @@ License:
52
52
  """
53
53
 
54
54
  import os
55
- import secrets
56
55
  from typing import Optional
57
56
 
58
57
  from box import Box
@@ -61,7 +60,7 @@ from dotenv import load_dotenv
61
60
  from PyFunceble.storage_facility import get_config_directory
62
61
 
63
62
  PROJECT_NAME: str = "PyFunceble"
64
- PROJECT_VERSION: str = "4.3.0a5.dev (Blue Duckling: Tulip)"
63
+ PROJECT_VERSION: str = "4.3.0a10.dev (Blue Duckling: Tulip)"
65
64
 
66
65
  DISTRIBUTED_CONFIGURATION_FILENAME: str = ".PyFunceble_production.yaml"
67
66
 
@@ -73,8 +72,6 @@ ENV_FILENAME: str = ".pyfunceble-env"
73
72
  SHORT_REPO_LINK: str = "https://pyfunceble.github.io"
74
73
  REPO_LINK: str = "https://github.com/funilrys/PyFunceble"
75
74
 
76
- NOT_RESOLVED_STD_HOSTNAME: str = f"{secrets.token_hex(12)}.mock-resolver.pyfunceble.com"
77
-
78
75
  IANA: Optional[dict] = {}
79
76
  PUBLIC_SUFFIX: Optional[dict] = {}
80
77
  USER_AGENTS: Optional[dict] = {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyFunceble-dev
3
- Version: 4.3.0a5
3
+ Version: 4.3.0a10
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
@@ -19,94 +19,172 @@ Classifier: Intended Audience :: Developers
19
19
  Classifier: Programming Language :: Python
20
20
  Classifier: Programming Language :: Python :: 3
21
21
  Classifier: License :: OSI Approved
22
- Requires-Python: >=3.8, <4
22
+ Requires-Python: >=3.9, <4
23
23
  Description-Content-Type: text/markdown
24
24
  License-File: LICENSE
25
- Requires-Dist: SQLAlchemy[postgresql_psycopg2binary]~=2.0
26
25
  Requires-Dist: python-box[all]~=6.0.0
27
- Requires-Dist: domain2idna~=1.12.0
26
+ Requires-Dist: colorama
28
27
  Requires-Dist: requests[socks]<3
29
- Requires-Dist: alembic
30
28
  Requires-Dist: setuptools>=65.5.1
29
+ Requires-Dist: dnspython[DOH]~=2.6.0
30
+ Requires-Dist: alembic
31
+ Requires-Dist: packaging
31
32
  Requires-Dist: python-dotenv
33
+ Requires-Dist: SQLAlchemy~=2.0
32
34
  Requires-Dist: inflection
33
- Requires-Dist: cryptography~=42.0
34
- Requires-Dist: packaging
35
35
  Requires-Dist: shtab
36
- Requires-Dist: dnspython[doh]~=2.6.0
37
- Requires-Dist: colorama
36
+ Requires-Dist: domain2idna~=1.12.0
38
37
  Requires-Dist: PyYAML
39
38
  Requires-Dist: PyMySQL
40
- Provides-Extra: dev
41
- Requires-Dist: isort; extra == "dev"
42
- Requires-Dist: black; extra == "dev"
43
- Requires-Dist: pylint; extra == "dev"
44
- Requires-Dist: flake8; extra == "dev"
45
39
  Provides-Extra: docs
46
40
  Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "docs"
41
+ Requires-Dist: mkdocstrings[python]~=0.26; extra == "docs"
47
42
  Requires-Dist: pymdown-extensions~=10.9; extra == "docs"
48
- Requires-Dist: zipp>=3.19.1; extra == "docs"
43
+ Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "docs"
44
+ Requires-Dist: mkdocs-gen-files~=0.5; extra == "docs"
49
45
  Requires-Dist: mkdocs-material~=9.5; extra == "docs"
46
+ Requires-Dist: mkdocs-section-index~=0.3; extra == "docs"
50
47
  Requires-Dist: mkdocs~=1.5; extra == "docs"
51
- Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "docs"
52
- Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "docs"
53
48
  Requires-Dist: mkdocs-literate-nav~=0.6; extra == "docs"
54
- Requires-Dist: mkdocs-section-index~=0.3; extra == "docs"
55
- Requires-Dist: mkdocs-gen-files~=0.5; extra == "docs"
56
- Requires-Dist: mkdocstrings[python]~=0.26; extra == "docs"
57
- Provides-Extra: full
58
- Requires-Dist: zipp>=3.19.1; extra == "full"
59
- Requires-Dist: inflection; extra == "full"
60
- Requires-Dist: mkdocs~=1.5; extra == "full"
61
- Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "full"
62
- Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "full"
63
- Requires-Dist: tox; extra == "full"
64
- Requires-Dist: SQLAlchemy[postgresql_psycopg2binary]~=2.0; extra == "full"
65
- Requires-Dist: mkdocs-section-index~=0.3; extra == "full"
66
- Requires-Dist: mkdocstrings[python]~=0.26; extra == "full"
67
- Requires-Dist: PyMySQL; extra == "full"
68
- Requires-Dist: python-box[all]~=6.0.0; extra == "full"
69
- Requires-Dist: flake8; extra == "full"
70
- Requires-Dist: setuptools>=65.5.1; extra == "full"
71
- Requires-Dist: python-dotenv; extra == "full"
72
- Requires-Dist: packaging; extra == "full"
73
- Requires-Dist: mkdocs-literate-nav~=0.6; extra == "full"
74
- Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "full"
75
- Requires-Dist: requests[socks]<3; extra == "full"
76
- Requires-Dist: domain2idna~=1.12.0; extra == "full"
77
- Requires-Dist: pymdown-extensions~=10.9; extra == "full"
78
- Requires-Dist: cryptography~=42.0; extra == "full"
79
- Requires-Dist: dnspython[doh]~=2.6.0; extra == "full"
80
- Requires-Dist: black; extra == "full"
81
- Requires-Dist: coverage; extra == "full"
82
- Requires-Dist: colorama; extra == "full"
83
- Requires-Dist: PyYAML; extra == "full"
84
- Requires-Dist: alembic; extra == "full"
85
- Requires-Dist: shtab; extra == "full"
86
- Requires-Dist: mkdocs-material~=9.5; extra == "full"
87
- Requires-Dist: isort; extra == "full"
88
- Requires-Dist: mkdocs-gen-files~=0.5; extra == "full"
89
- Requires-Dist: pylint; extra == "full"
49
+ Requires-Dist: zipp>=3.19.1; extra == "docs"
50
+ Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "docs"
51
+ Provides-Extra: dev
52
+ Requires-Dist: black; extra == "dev"
53
+ Requires-Dist: flake8; extra == "dev"
54
+ Requires-Dist: pylint; extra == "dev"
55
+ Requires-Dist: isort; extra == "dev"
56
+ Provides-Extra: test
57
+ Requires-Dist: tox; extra == "test"
58
+ Requires-Dist: coverage; extra == "test"
90
59
  Provides-Extra: psql
91
- Requires-Dist: SQLAlchemy[postgresql_psycopg2binary]~=2.0; extra == "psql"
92
60
  Requires-Dist: python-box[all]~=6.0.0; extra == "psql"
93
- Requires-Dist: domain2idna~=1.12.0; extra == "psql"
61
+ Requires-Dist: psycopg2; extra == "psql"
62
+ Requires-Dist: colorama; extra == "psql"
94
63
  Requires-Dist: requests[socks]<3; extra == "psql"
95
- Requires-Dist: alembic; extra == "psql"
96
64
  Requires-Dist: setuptools>=65.5.1; extra == "psql"
65
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql"
66
+ Requires-Dist: alembic; extra == "psql"
67
+ Requires-Dist: packaging; extra == "psql"
97
68
  Requires-Dist: python-dotenv; extra == "psql"
69
+ Requires-Dist: SQLAlchemy~=2.0; extra == "psql"
98
70
  Requires-Dist: inflection; extra == "psql"
99
- Requires-Dist: cryptography~=42.0; extra == "psql"
100
- Requires-Dist: packaging; extra == "psql"
101
71
  Requires-Dist: shtab; extra == "psql"
102
- Requires-Dist: dnspython[doh]~=2.6.0; extra == "psql"
103
- Requires-Dist: psycopg2; extra == "psql"
104
- Requires-Dist: colorama; extra == "psql"
72
+ Requires-Dist: domain2idna~=1.12.0; extra == "psql"
105
73
  Requires-Dist: PyYAML; extra == "psql"
106
74
  Requires-Dist: PyMySQL; extra == "psql"
107
- Provides-Extra: test
108
- Requires-Dist: coverage; extra == "test"
109
- Requires-Dist: tox; extra == "test"
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
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql-binary"
81
+ Requires-Dist: alembic; extra == "psql-binary"
82
+ Requires-Dist: packaging; extra == "psql-binary"
83
+ Requires-Dist: python-dotenv; extra == "psql-binary"
84
+ Requires-Dist: psycopg2-binary; extra == "psql-binary"
85
+ Requires-Dist: SQLAlchemy~=2.0; extra == "psql-binary"
86
+ Requires-Dist: inflection; extra == "psql-binary"
87
+ 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"
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
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "postgresql"
98
+ Requires-Dist: alembic; extra == "postgresql"
99
+ Requires-Dist: packaging; extra == "postgresql"
100
+ Requires-Dist: python-dotenv; extra == "postgresql"
101
+ Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql"
102
+ Requires-Dist: inflection; extra == "postgresql"
103
+ 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"
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
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "postgresql-binary"
113
+ Requires-Dist: alembic; extra == "postgresql-binary"
114
+ Requires-Dist: packaging; extra == "postgresql-binary"
115
+ Requires-Dist: python-dotenv; extra == "postgresql-binary"
116
+ Requires-Dist: psycopg2-binary; extra == "postgresql-binary"
117
+ Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql-binary"
118
+ Requires-Dist: inflection; extra == "postgresql-binary"
119
+ 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"
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"
136
+ 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
+ Requires-Dist: colorama; extra == "full"
140
+ Requires-Dist: python-dotenv; extra == "full"
141
+ Requires-Dist: SQLAlchemy~=2.0; extra == "full"
142
+ Requires-Dist: zipp>=3.19.1; extra == "full"
143
+ Requires-Dist: PyYAML; extra == "full"
144
+ Requires-Dist: coverage; extra == "full"
145
+ 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
+ Requires-Dist: inflection; extra == "full"
153
+ Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "full"
154
+ Requires-Dist: PyMySQL; extra == "full"
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"
168
+ 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
+ Requires-Dist: colorama; extra == "all"
172
+ Requires-Dist: python-dotenv; extra == "all"
173
+ Requires-Dist: SQLAlchemy~=2.0; extra == "all"
174
+ Requires-Dist: zipp>=3.19.1; extra == "all"
175
+ Requires-Dist: PyYAML; extra == "all"
176
+ 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
+ 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"
185
+ Requires-Dist: inflection; extra == "all"
186
+ Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "all"
187
+ Requires-Dist: PyMySQL; extra == "all"
110
188
 
111
189
  ![image](https://raw.githubusercontent.com/PyFunceble/logo/dev/Green/HD/RM.png)
112
190
 
@@ -156,6 +234,7 @@ Happy testing with PyFunceble!
156
234
  - [Installation](#installation)
157
235
  - [Packages \& Versioning](#packages--versioning)
158
236
  - [PyPi - Python Package Index](#pypi---python-package-index)
237
+ - [Optional Dependencies](#optional-dependencies)
159
238
  - [pyfunceble](#pyfunceble)
160
239
  - [pyfunceble-dev](#pyfunceble-dev)
161
240
  - [Container Image Registry](#container-image-registry)
@@ -219,10 +298,36 @@ the OS specific packages _(see below)_.
219
298
  Here is an overview of the packages and where they are hosted.
220
299
 
221
300
  | Package | PyPi Link |
222
- |----------------|------------------------------------------|
301
+ | -------------- | ---------------------------------------- |
223
302
  | pyfunceble | https://pypi.org/project/PyFunceble |
224
303
  | pyfunceble-dev | https://pypi.org/project/PyFunceblee-dev |
225
304
 
305
+ ### Optional Dependencies
306
+
307
+ The following dependencies are optional and can be installed if you need them.
308
+
309
+ | Dependency | Description |
310
+ | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
311
+ | `all` | Install all functional dependencies. Basically all but `dev`, `test` and `docs`. _When a binary and non binary version is available, the binary version is installed._ |
312
+ | `full` | Install all dependencies listed below. _When a binary and non binary version is available, the binary version is installed._ |
313
+ | `psql`, `postgresql` | **Build** and install the dependencies required to interact with PostgreSQL. |
314
+ | `psql-binary`, `postgresql-binary` | **Install** the dependencies required to interact with PostgreSQL - from binary. |
315
+ | `docs` | Install the dependencies required to build the documentation. |
316
+ | `test` | Install the dependencies required to run the tests. |
317
+ | `dev` | Install the dependencies required to develop PyFunceble. |
318
+
319
+ They are intended to be installed through the following syntax:
320
+
321
+ ```shell
322
+ pip3 install --user {pkg}[{dependency}]
323
+ ```
324
+
325
+ As an example if you want to install the `docs` and `test` dependencies, you should run:
326
+
327
+ ```shell
328
+ pip3 install --user pyfunceble[docs,test]
329
+ ```
330
+
226
331
  ### pyfunceble
227
332
 
228
333
  You can install the **pyfunceble** through `pip3`:
@@ -255,7 +360,7 @@ is available. :smile:
255
360
  Here is an overview of the packages and where they are hosted.
256
361
 
257
362
  | Host | Package | Link |
258
- |------------|----------------|----------------------------------------------------------------------------------------------------------|
363
+ | ---------- | -------------- | -------------------------------------------------------------------------------------------------------- |
259
364
  | Docker Hub | pyfunceble | [https://hub.docker.com/r/pyfunceble/pyfunceble](https://hub.docker.com/r/pyfunceble/pyfunceble) |
260
365
  | Docker Hub | pyfunceble-dev | [https://hub.docker.com/r/pyfunceble/pyfunceble-dev](https://hub.docker.com/r/pyfunceble/pyfunceble-dev) |
261
366
 
@@ -305,7 +410,7 @@ this is probably for you.
305
410
  Here is an overview of the packages and where they are hosted.
306
411
 
307
412
  | Host | Package | Repository |
308
- |--------|----------------|-------------------------------------------------------------------------|
413
+ | ------ | -------------- | ----------------------------------------------------------------------- |
309
414
  | GitHub | pyfunceble | `git+https://github.com/funilrys/PyFunceble.git@master#egg=PyFunceble` |
310
415
  | GitHub | pyfunceble-dev | `git+https://github.com/funilrys/PyFunceble.git@dev#egg=PyFunceble-dev` |
311
416
  | GitLab | pyfunceble | `git+https://gitlab.com/funilrys/PyFunceble.git@master#egg=PyFunceble` |
@@ -474,7 +579,7 @@ From source:
474
579
 
475
580
  ```shell
476
581
  # Install dependencies.
477
- pip install --user -r requirements.docs.txt
582
+ pip install --user .[docs]
478
583
  # Serve documentation locally.
479
584
  mkdocs serve
480
585
  # Open Documentation with browser.