PyFunceble-dev 4.2.17__py3-none-any.whl → 4.2.19__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- PyFunceble/checker/availability/base.py +14 -14
- PyFunceble/checker/availability/domain.py +2 -2
- PyFunceble/checker/availability/domain_and_ip.py +3 -3
- PyFunceble/checker/base.py +26 -26
- PyFunceble/checker/params_base.py +1 -1
- PyFunceble/checker/reputation/base.py +16 -16
- PyFunceble/checker/reputation/domain_and_ip.py +3 -3
- PyFunceble/checker/syntax/domain_and_ip.py +1 -1
- PyFunceble/cli/continuous_integration/base.py +40 -11
- PyFunceble/cli/entry_points/pyfunceble/cli.py +13 -13
- PyFunceble/cli/execution_time.py +2 -2
- PyFunceble/cli/file_preloader.py +4 -4
- PyFunceble/cli/filesystem/printer/file.py +2 -2
- PyFunceble/cli/migrators/json2csv/inactive.py +5 -2
- PyFunceble/cli/processes/workers/base.py +6 -4
- PyFunceble/cli/processes/workers/producer.py +7 -7
- PyFunceble/cli/system/integrator.py +26 -2
- PyFunceble/cli/system/launcher.py +3 -3
- PyFunceble/cli/utils/version.py +5 -3
- PyFunceble/config/compare.py +8 -5
- PyFunceble/config/loader.py +3 -3
- PyFunceble/data/infrastructure/.PyFunceble_production.yaml +53 -8
- PyFunceble/dataset/autocontinue/csv.py +2 -2
- PyFunceble/dataset/autocontinue/sql.py +2 -2
- PyFunceble/dataset/csv_base.py +4 -2
- PyFunceble/dataset/inactive/csv.py +3 -3
- PyFunceble/dataset/inactive/sql.py +2 -2
- PyFunceble/dataset/sql_base.py +2 -2
- PyFunceble/dataset/whois/base.py +4 -2
- PyFunceble/dataset/whois/sql.py +2 -2
- PyFunceble/downloader/base.py +9 -7
- PyFunceble/query/{collection.py → platform.py} +205 -21
- PyFunceble/storage.py +2 -2
- {PyFunceble_dev-4.2.17.dist-info → PyFunceble_dev-4.2.19.dist-info}/METADATA +46 -42
- {PyFunceble_dev-4.2.17.dist-info → PyFunceble_dev-4.2.19.dist-info}/RECORD +39 -39
- {PyFunceble_dev-4.2.17.dist-info → PyFunceble_dev-4.2.19.dist-info}/WHEEL +1 -1
- {PyFunceble_dev-4.2.17.dist-info → PyFunceble_dev-4.2.19.dist-info}/LICENSE +0 -0
- {PyFunceble_dev-4.2.17.dist-info → PyFunceble_dev-4.2.19.dist-info}/entry_points.txt +0 -0
- {PyFunceble_dev-4.2.17.dist-info → PyFunceble_dev-4.2.19.dist-info}/top_level.txt +0 -0
@@ -11,7 +11,7 @@ The tool to check the availability or syntax of domain, IP or URL.
|
|
11
11
|
██║ ██║ ██║ ╚██████╔╝██║ ╚████║╚██████╗███████╗██████╔╝███████╗███████╗
|
12
12
|
╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝╚══════╝╚═════╝ ╚══════╝╚══════╝
|
13
13
|
|
14
|
-
Provides ans interface which let us interact with the
|
14
|
+
Provides ans interface which let us interact with the platform API.
|
15
15
|
|
16
16
|
Author:
|
17
17
|
Nissar Chababy, @funilrys, contactTATAfunilrysTODTODcom
|
@@ -50,7 +50,10 @@ License:
|
|
50
50
|
limitations under the License.
|
51
51
|
"""
|
52
52
|
|
53
|
+
# pylint: disable=too-many-lines
|
54
|
+
|
53
55
|
import json
|
56
|
+
import os
|
54
57
|
from typing import Generator, List, Optional, Union
|
55
58
|
|
56
59
|
import requests
|
@@ -64,16 +67,17 @@ from PyFunceble.checker.syntax.status import SyntaxCheckerStatus
|
|
64
67
|
from PyFunceble.helpers.environment_variable import EnvironmentVariableHelper
|
65
68
|
|
66
69
|
|
67
|
-
class
|
70
|
+
class PlatformQueryTool:
|
68
71
|
"""
|
69
|
-
Provides the interface to the
|
72
|
+
Provides the interface to interact with the platform.
|
70
73
|
|
71
74
|
:param token:
|
72
75
|
The token to use to communicate with the API.
|
73
76
|
|
74
77
|
.. warning::
|
75
78
|
If :code:`None` is given, the class constructor will try to load the
|
76
|
-
PYFUNCEBLE_COLLECTION_API_TOKEN
|
79
|
+
:code:`PYFUNCEBLE_COLLECTION_API_TOKEN` or
|
80
|
+
:code:`PYFUNCEBLE_PLATFORM_API_TOKEN` environment variable.
|
77
81
|
|
78
82
|
:param url_base:
|
79
83
|
The base of the URL to communicate with.
|
@@ -93,11 +97,13 @@ class CollectionQueryTool:
|
|
93
97
|
"727294758272947115272947112272947116272947116272947104"
|
94
98
|
)
|
95
99
|
STD_PREFERRED_STATUS_ORIGIN: str = "frequent"
|
100
|
+
STD_CHECKER_PRIORITY: str = ["none"]
|
101
|
+
STD_CHECKER_EXCLUDE: str = ["none"]
|
96
102
|
STD_TIMEOUT: float = 5.0
|
97
103
|
|
98
104
|
_token: Optional[str] = None
|
99
105
|
"""
|
100
|
-
The token to use while communicating with the
|
106
|
+
The token to use while communicating with the platform API.
|
101
107
|
"""
|
102
108
|
|
103
109
|
_url_base: Optional[str] = None
|
@@ -110,6 +116,16 @@ class CollectionQueryTool:
|
|
110
116
|
The preferred data origin
|
111
117
|
"""
|
112
118
|
|
119
|
+
_checker_priority: Optional[List[str]] = []
|
120
|
+
"""
|
121
|
+
The checker to prioritize.
|
122
|
+
"""
|
123
|
+
|
124
|
+
_checker_exclude: Optional[List[str]] = []
|
125
|
+
"""
|
126
|
+
The checker to exclude.
|
127
|
+
"""
|
128
|
+
|
113
129
|
_is_modern_api: Optional[bool] = None
|
114
130
|
"""
|
115
131
|
Whether we are working with the modern or legacy API.
|
@@ -128,19 +144,35 @@ class CollectionQueryTool:
|
|
128
144
|
token: Optional[str] = None,
|
129
145
|
preferred_status_origin: Optional[str] = None,
|
130
146
|
timeout: Optional[float] = None,
|
147
|
+
checker_priority: Optional[List[str]] = None,
|
148
|
+
checker_exclude: Optional[List[str]] = None,
|
131
149
|
) -> None:
|
132
150
|
if token is not None:
|
133
151
|
self.token = token
|
134
152
|
else:
|
135
153
|
self.token = EnvironmentVariableHelper(
|
136
154
|
"PYFUNCEBLE_COLLECTION_API_TOKEN"
|
137
|
-
).get_value(default="")
|
155
|
+
).get_value(default="") or EnvironmentVariableHelper(
|
156
|
+
"PYFUNCEBLE_PLATFORM_API_TOKEN"
|
157
|
+
).get_value(
|
158
|
+
default=""
|
159
|
+
)
|
138
160
|
|
139
161
|
if preferred_status_origin is not None:
|
140
162
|
self.preferred_status_origin = preferred_status_origin
|
141
163
|
else:
|
142
164
|
self.guess_and_set_preferred_status_origin()
|
143
165
|
|
166
|
+
if checker_priority is not None:
|
167
|
+
self.checker_priority = checker_priority
|
168
|
+
else:
|
169
|
+
self.guess_and_set_checker_priority()
|
170
|
+
|
171
|
+
if checker_exclude is not None:
|
172
|
+
self.checker_exclude = checker_exclude
|
173
|
+
else:
|
174
|
+
self.guess_and_set_checker_exclude()
|
175
|
+
|
144
176
|
if timeout is not None:
|
145
177
|
self.timeout = timeout
|
146
178
|
else:
|
@@ -148,7 +180,11 @@ class CollectionQueryTool:
|
|
148
180
|
|
149
181
|
self._url_base = EnvironmentVariableHelper(
|
150
182
|
"PYFUNCEBLE_COLLECTION_API_URL"
|
151
|
-
).get_value(default=None)
|
183
|
+
).get_value(default=None) or EnvironmentVariableHelper(
|
184
|
+
"PYFUNCEBLE_PLATFORM_API_URL"
|
185
|
+
).get_value(
|
186
|
+
default=None
|
187
|
+
)
|
152
188
|
|
153
189
|
self.session = requests.Session()
|
154
190
|
self.session.headers.update(
|
@@ -161,7 +197,7 @@ class CollectionQueryTool:
|
|
161
197
|
|
162
198
|
def __contains__(self, value: str) -> bool:
|
163
199
|
"""
|
164
|
-
Checks if the given value is in the
|
200
|
+
Checks if the given value is in the platform.
|
165
201
|
|
166
202
|
:param value:
|
167
203
|
The value to check.
|
@@ -204,7 +240,7 @@ class CollectionQueryTool:
|
|
204
240
|
|
205
241
|
self._token = value
|
206
242
|
|
207
|
-
def set_token(self, value: str) -> "
|
243
|
+
def set_token(self, value: str) -> "PlatformQueryTool":
|
208
244
|
"""
|
209
245
|
Sets the value of the :code:`_token` attribute.
|
210
246
|
|
@@ -248,7 +284,7 @@ class CollectionQueryTool:
|
|
248
284
|
|
249
285
|
self._url_base = value.rstrip("/")
|
250
286
|
|
251
|
-
def set_url_base(self, value: str) -> "
|
287
|
+
def set_url_base(self, value: str) -> "PlatformQueryTool":
|
252
288
|
"""
|
253
289
|
Sets the base of the URL to work with.
|
254
290
|
|
@@ -285,7 +321,7 @@ class CollectionQueryTool:
|
|
285
321
|
|
286
322
|
self._is_modern_api = value
|
287
323
|
|
288
|
-
def set_is_modern_api(self, value: bool) -> "
|
324
|
+
def set_is_modern_api(self, value: bool) -> "PlatformQueryTool":
|
289
325
|
"""
|
290
326
|
Sets the value of the :code:`_is_modern_api` attribute.
|
291
327
|
|
@@ -322,7 +358,7 @@ class CollectionQueryTool:
|
|
322
358
|
|
323
359
|
self._timeout = value
|
324
360
|
|
325
|
-
def set_timeout(self, value: float) -> "
|
361
|
+
def set_timeout(self, value: float) -> "PlatformQueryTool":
|
326
362
|
"""
|
327
363
|
Sets the value of the :code:`_timeout` attribute.
|
328
364
|
|
@@ -334,7 +370,7 @@ class CollectionQueryTool:
|
|
334
370
|
|
335
371
|
return self
|
336
372
|
|
337
|
-
def guess_and_set_is_modern_api(self) -> "
|
373
|
+
def guess_and_set_is_modern_api(self) -> "PlatformQueryTool":
|
338
374
|
"""
|
339
375
|
Try to guess if we are working with a legacy version.
|
340
376
|
"""
|
@@ -387,7 +423,7 @@ class CollectionQueryTool:
|
|
387
423
|
|
388
424
|
self._preferred_status_origin = value
|
389
425
|
|
390
|
-
def set_preferred_status_origin(self, value: str) -> "
|
426
|
+
def set_preferred_status_origin(self, value: str) -> "PlatformQueryTool":
|
391
427
|
"""
|
392
428
|
Sets the preferred status origin.
|
393
429
|
|
@@ -399,17 +435,17 @@ class CollectionQueryTool:
|
|
399
435
|
|
400
436
|
return self
|
401
437
|
|
402
|
-
def guess_and_set_preferred_status_origin(self) -> "
|
438
|
+
def guess_and_set_preferred_status_origin(self) -> "PlatformQueryTool":
|
403
439
|
"""
|
404
440
|
Try to guess the preferred status origin.
|
405
441
|
"""
|
406
442
|
|
407
443
|
if PyFunceble.facility.ConfigLoader.is_already_loaded():
|
408
444
|
if isinstance(
|
409
|
-
PyFunceble.storage.CONFIGURATION.
|
445
|
+
PyFunceble.storage.CONFIGURATION.platform.preferred_status_origin, str
|
410
446
|
):
|
411
447
|
self.preferred_status_origin = (
|
412
|
-
PyFunceble.storage.CONFIGURATION.
|
448
|
+
PyFunceble.storage.CONFIGURATION.platform.preferred_status_origin
|
413
449
|
)
|
414
450
|
else:
|
415
451
|
self.preferred_status_origin = self.STD_PREFERRED_STATUS_ORIGIN
|
@@ -418,7 +454,147 @@ class CollectionQueryTool:
|
|
418
454
|
|
419
455
|
return self
|
420
456
|
|
421
|
-
|
457
|
+
@property
|
458
|
+
def checker_priority(self) -> Optional[List[str]]:
|
459
|
+
"""
|
460
|
+
Provides the value of the :code:`_checker_priority` attribute.
|
461
|
+
"""
|
462
|
+
|
463
|
+
return self._checker_priority
|
464
|
+
|
465
|
+
@checker_priority.setter
|
466
|
+
def checker_priority(self, value: List[str]) -> None:
|
467
|
+
"""
|
468
|
+
Sets the checker priority to set - order matters.
|
469
|
+
|
470
|
+
:param value:
|
471
|
+
The value to set.
|
472
|
+
|
473
|
+
:raise TypeError:
|
474
|
+
When the given :code:`value` is not a :py:class:`str`.
|
475
|
+
|
476
|
+
:raise ValueError:
|
477
|
+
When the given :code:`value` is not supported.
|
478
|
+
"""
|
479
|
+
|
480
|
+
accepted = []
|
481
|
+
|
482
|
+
for checker_type in value:
|
483
|
+
if not isinstance(checker_type, str):
|
484
|
+
raise TypeError(
|
485
|
+
f"<checker_type> ({checker_type}) should be {str}, "
|
486
|
+
"{type(checker_type)} given."
|
487
|
+
)
|
488
|
+
|
489
|
+
if checker_type.lower() not in self.SUPPORTED_CHECKERS + ["none"]:
|
490
|
+
raise ValueError(f"<checker_type> ({checker_type}) is not supported.")
|
491
|
+
|
492
|
+
accepted.append(checker_type.lower())
|
493
|
+
|
494
|
+
self._checker_priority = accepted
|
495
|
+
|
496
|
+
def set_checker_priority(self, value: List[str]) -> "PlatformQueryTool":
|
497
|
+
"""
|
498
|
+
Sets the checker priority.
|
499
|
+
|
500
|
+
:parma value:
|
501
|
+
The value to set.
|
502
|
+
"""
|
503
|
+
|
504
|
+
self.checker_priority = value
|
505
|
+
|
506
|
+
return self
|
507
|
+
|
508
|
+
def guess_and_set_checker_priority(self) -> "PlatformQueryTool":
|
509
|
+
"""
|
510
|
+
Try to guess the checker priority to use.
|
511
|
+
"""
|
512
|
+
|
513
|
+
if "PYFUNCEBLE_PLATFORM_CHECKER_PRIORITY" in os.environ:
|
514
|
+
self.checker_priority = os.environ[
|
515
|
+
"PYFUNCEBLE_PLATFORM_CHECKER_PRIORITY"
|
516
|
+
].split(",")
|
517
|
+
elif PyFunceble.facility.ConfigLoader.is_already_loaded():
|
518
|
+
if isinstance(PyFunceble.storage.PLATFORM.checker_priority, list):
|
519
|
+
self.checker_priority = PyFunceble.storage.PLATFORM.checker_priority
|
520
|
+
else:
|
521
|
+
self.checker_priority = self.STD_CHECKER_PRIORITY
|
522
|
+
else:
|
523
|
+
self.checker_priority = self.STD_CHECKER_PRIORITY
|
524
|
+
|
525
|
+
return self
|
526
|
+
|
527
|
+
@property
|
528
|
+
def checker_exclude(self) -> Optional[List[str]]:
|
529
|
+
"""
|
530
|
+
Provides the value of the :code:`_checker_exclude` attribute.
|
531
|
+
"""
|
532
|
+
|
533
|
+
return self._checker_exclude
|
534
|
+
|
535
|
+
@checker_exclude.setter
|
536
|
+
def checker_exclude(self, value: List[str]) -> None:
|
537
|
+
"""
|
538
|
+
Sets the checker exclude.
|
539
|
+
|
540
|
+
:param value:
|
541
|
+
The value to set.
|
542
|
+
|
543
|
+
:raise TypeError:
|
544
|
+
When the given :code:`value` is not a :py:class:`str`.
|
545
|
+
|
546
|
+
:raise ValueError:
|
547
|
+
When the given :code:`value` is not supported.
|
548
|
+
"""
|
549
|
+
|
550
|
+
accepted = []
|
551
|
+
|
552
|
+
for checker_type in value:
|
553
|
+
if not isinstance(checker_type, str):
|
554
|
+
raise TypeError(
|
555
|
+
f"<checker_type> ({checker_type}) should be {str}, "
|
556
|
+
"{type(checker_type)} given."
|
557
|
+
)
|
558
|
+
|
559
|
+
if checker_type.lower() not in self.SUPPORTED_CHECKERS + ["none"]:
|
560
|
+
raise ValueError(f"<checker_type> ({checker_type}) is not supported.")
|
561
|
+
|
562
|
+
accepted.append(checker_type.lower())
|
563
|
+
|
564
|
+
self._checker_exclude = accepted
|
565
|
+
|
566
|
+
def set_checker_exclude(self, value: List[str]) -> "PlatformQueryTool":
|
567
|
+
"""
|
568
|
+
Sets the checker to exclude.
|
569
|
+
|
570
|
+
:parma value:
|
571
|
+
The value to set.
|
572
|
+
"""
|
573
|
+
|
574
|
+
self.checker_exclude = value
|
575
|
+
|
576
|
+
return self
|
577
|
+
|
578
|
+
def guess_and_set_checker_exclude(self) -> "PlatformQueryTool":
|
579
|
+
"""
|
580
|
+
Try to guess the checker to exclude.
|
581
|
+
"""
|
582
|
+
|
583
|
+
if "PYFUNCEBLE_PLATFORM_CHECKER_EXCLUDE" in os.environ:
|
584
|
+
self.checker_exclude = os.environ[
|
585
|
+
"PYFUNCEBLE_PLATFORM_CHECKER_EXCLUDE"
|
586
|
+
].split(",")
|
587
|
+
elif PyFunceble.facility.ConfigLoader.is_already_loaded():
|
588
|
+
if isinstance(PyFunceble.storage.PLATFORM.checker_exclude, list):
|
589
|
+
self.checker_exclude = PyFunceble.storage.PLATFORM.checker_exclude
|
590
|
+
else:
|
591
|
+
self.checker_exclude = self.STD_CHECKER_EXCLUDE
|
592
|
+
else:
|
593
|
+
self.checker_exclude = self.STD_CHECKER_EXCLUDE
|
594
|
+
|
595
|
+
return self
|
596
|
+
|
597
|
+
def guess_and_set_timeout(self) -> "PlatformQueryTool":
|
422
598
|
"""
|
423
599
|
Try to guess the timeout to use.
|
424
600
|
"""
|
@@ -526,6 +702,14 @@ class CollectionQueryTool:
|
|
526
702
|
"shuffle": True,
|
527
703
|
}
|
528
704
|
|
705
|
+
if "none" in self.checker_priority:
|
706
|
+
params["shuffle"] = True
|
707
|
+
else:
|
708
|
+
params["checker_type_priority"] = ",".join(self.checker_priority)
|
709
|
+
|
710
|
+
if "none" not in self.checker_exclude:
|
711
|
+
params["checker_type_exclude"] = ",".join(self.checker_exclude)
|
712
|
+
|
529
713
|
try:
|
530
714
|
response = self.session.get(
|
531
715
|
url,
|
@@ -622,7 +806,7 @@ class CollectionQueryTool:
|
|
622
806
|
],
|
623
807
|
) -> Optional[dict]:
|
624
808
|
"""
|
625
|
-
Push the given status to the
|
809
|
+
Push the given status to the platform.
|
626
810
|
|
627
811
|
:param checker_status:
|
628
812
|
The status to push.
|
@@ -680,7 +864,7 @@ class CollectionQueryTool:
|
|
680
864
|
|
681
865
|
def guess_all_settings(
|
682
866
|
self,
|
683
|
-
) -> "
|
867
|
+
) -> "PlatformQueryTool": # pragma: no cover ## Underlying tested
|
684
868
|
"""
|
685
869
|
Try to guess all settings.
|
686
870
|
"""
|
@@ -699,7 +883,7 @@ class CollectionQueryTool:
|
|
699
883
|
self, checker_type: str, data: Union[dict, str]
|
700
884
|
) -> Optional[dict]:
|
701
885
|
"""
|
702
|
-
Submits the given status to the
|
886
|
+
Submits the given status to the platform.
|
703
887
|
|
704
888
|
:param checker_type:
|
705
889
|
The type of the checker.
|
PyFunceble/storage.py
CHANGED
@@ -61,7 +61,7 @@ from dotenv import load_dotenv
|
|
61
61
|
from PyFunceble.storage_facility import get_config_directory
|
62
62
|
|
63
63
|
PROJECT_NAME: str = "PyFunceble"
|
64
|
-
PROJECT_VERSION: str = "4.2.
|
64
|
+
PROJECT_VERSION: str = "4.2.19.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"
|
@@ -126,7 +126,7 @@ STATUS: Optional[Box] = Box(
|
|
126
126
|
frozen_box=True,
|
127
127
|
)
|
128
128
|
HTTP_CODES: Optional[Box] = Box({})
|
129
|
-
|
129
|
+
PLATFORM: Optional[Box] = Box({})
|
130
130
|
LINKS: Optional[Box] = Box({})
|
131
131
|
PROXY: Optional[Box] = Box({})
|
132
132
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: PyFunceble-dev
|
3
|
-
Version: 4.2.
|
3
|
+
Version: 4.2.19
|
4
4
|
Summary: The tool to check the availability or syntax of domain, IP or URL.
|
5
5
|
Home-page: https://github.com/funilrys/PyFunceble
|
6
6
|
Author: funilrys
|
@@ -21,74 +21,78 @@ Classifier: Programming Language :: Python :: 3
|
|
21
21
|
Classifier: License :: OSI Approved
|
22
22
|
Requires-Python: >=3.8, <4
|
23
23
|
License-File: LICENSE
|
24
|
+
Requires-Dist: dnspython[doh] ~=2.6.0
|
25
|
+
Requires-Dist: PyYAML
|
26
|
+
Requires-Dist: setuptools >=65.5.1
|
24
27
|
Requires-Dist: SQLAlchemy ~=2.0
|
28
|
+
Requires-Dist: domain2idna ~=1.12.0
|
29
|
+
Requires-Dist: PyMySQL
|
30
|
+
Requires-Dist: python-dotenv
|
31
|
+
Requires-Dist: alembic
|
25
32
|
Requires-Dist: python-box[all] ~=6.0.0
|
26
|
-
Requires-Dist: setuptools >=65.5.1
|
27
|
-
Requires-Dist: packaging
|
28
|
-
Requires-Dist: shtab
|
29
33
|
Requires-Dist: requests[socks] <3
|
30
|
-
Requires-Dist:
|
31
|
-
Requires-Dist:
|
32
|
-
Requires-Dist: domain2idna ~=1.12.0
|
33
|
-
Requires-Dist: dnspython[doh] ~=2.6.0
|
34
|
+
Requires-Dist: cryptography ~=42.0
|
35
|
+
Requires-Dist: packaging
|
34
36
|
Requires-Dist: colorama
|
35
|
-
Requires-Dist: python-dotenv
|
36
37
|
Requires-Dist: inflection
|
37
|
-
Requires-Dist:
|
38
|
-
Requires-Dist: alembic
|
38
|
+
Requires-Dist: shtab
|
39
39
|
Provides-Extra: dev
|
40
40
|
Requires-Dist: black ; extra == 'dev'
|
41
41
|
Requires-Dist: isort ; extra == 'dev'
|
42
|
-
Requires-Dist: pylint ; extra == 'dev'
|
43
42
|
Requires-Dist: flake8 ; extra == 'dev'
|
43
|
+
Requires-Dist: pylint ; extra == 'dev'
|
44
44
|
Provides-Extra: docs
|
45
|
-
Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
|
46
45
|
Requires-Dist: alabaster <0.8,>=0.7 ; extra == 'docs'
|
46
|
+
Requires-Dist: urllib3 >=2.2.2 ; extra == 'docs'
|
47
47
|
Requires-Dist: sphinx >=3.4.3 ; extra == 'docs'
|
48
|
+
Requires-Dist: requests >=2.32.0 ; extra == 'docs'
|
49
|
+
Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
|
48
50
|
Requires-Dist: Pygments >=2.0 ; extra == 'docs'
|
49
51
|
Provides-Extra: full
|
50
|
-
Requires-Dist:
|
51
|
-
Requires-Dist: setuptools >=65.5.1 ; extra == 'full'
|
52
|
-
Requires-Dist: black ; extra == 'full'
|
53
|
-
Requires-Dist: PyMySQL ; extra == 'full'
|
54
|
-
Requires-Dist: dnspython[doh] ~=2.6.0 ; extra == 'full'
|
55
|
-
Requires-Dist: coverage ; extra == 'full'
|
52
|
+
Requires-Dist: pylint ; extra == 'full'
|
56
53
|
Requires-Dist: alabaster <0.8,>=0.7 ; extra == 'full'
|
57
|
-
Requires-Dist:
|
58
|
-
Requires-Dist:
|
59
|
-
Requires-Dist: sphinx >=3.4.3 ; extra == 'full'
|
60
|
-
Requires-Dist: PyYAML ; extra == 'full'
|
61
|
-
Requires-Dist: isort ; extra == 'full'
|
62
|
-
Requires-Dist: sphinx-rtd-theme ; extra == 'full'
|
54
|
+
Requires-Dist: domain2idna ~=1.12.0 ; extra == 'full'
|
55
|
+
Requires-Dist: python-dotenv ; extra == 'full'
|
63
56
|
Requires-Dist: python-box[all] ~=6.0.0 ; extra == 'full'
|
64
57
|
Requires-Dist: requests[socks] <3 ; extra == 'full'
|
65
|
-
Requires-Dist: Pygments >=2.0 ; extra == 'full'
|
66
|
-
Requires-Dist: flake8 ; extra == 'full'
|
67
|
-
Requires-Dist: pylint ; extra == 'full'
|
68
|
-
Requires-Dist: colorama ; extra == 'full'
|
69
|
-
Requires-Dist: python-dotenv ; extra == 'full'
|
70
58
|
Requires-Dist: packaging ; extra == 'full'
|
59
|
+
Requires-Dist: coverage ; extra == 'full'
|
60
|
+
Requires-Dist: isort ; extra == 'full'
|
61
|
+
Requires-Dist: PyYAML ; extra == 'full'
|
62
|
+
Requires-Dist: sphinx-rtd-theme ; extra == 'full'
|
63
|
+
Requires-Dist: Pygments >=2.0 ; extra == 'full'
|
71
64
|
Requires-Dist: shtab ; extra == 'full'
|
72
|
-
Requires-Dist:
|
65
|
+
Requires-Dist: black ; extra == 'full'
|
66
|
+
Requires-Dist: dnspython[doh] ~=2.6.0 ; extra == 'full'
|
67
|
+
Requires-Dist: setuptools >=65.5.1 ; extra == 'full'
|
68
|
+
Requires-Dist: SQLAlchemy ~=2.0 ; extra == 'full'
|
69
|
+
Requires-Dist: PyMySQL ; extra == 'full'
|
70
|
+
Requires-Dist: urllib3 >=2.2.2 ; extra == 'full'
|
71
|
+
Requires-Dist: flake8 ; extra == 'full'
|
72
|
+
Requires-Dist: cryptography ~=42.0 ; extra == 'full'
|
73
|
+
Requires-Dist: sphinx >=3.4.3 ; extra == 'full'
|
74
|
+
Requires-Dist: requests >=2.32.0 ; extra == 'full'
|
75
|
+
Requires-Dist: inflection ; extra == 'full'
|
73
76
|
Requires-Dist: tox ; extra == 'full'
|
74
77
|
Requires-Dist: alembic ; extra == 'full'
|
78
|
+
Requires-Dist: colorama ; extra == 'full'
|
75
79
|
Provides-Extra: psql
|
76
|
-
Requires-Dist:
|
77
|
-
Requires-Dist:
|
80
|
+
Requires-Dist: dnspython[doh] ~=2.6.0 ; extra == 'psql'
|
81
|
+
Requires-Dist: PyYAML ; extra == 'psql'
|
78
82
|
Requires-Dist: psycopg2 ; extra == 'psql'
|
79
83
|
Requires-Dist: setuptools >=65.5.1 ; extra == 'psql'
|
80
|
-
Requires-Dist:
|
81
|
-
Requires-Dist: shtab ; extra == 'psql'
|
82
|
-
Requires-Dist: requests[socks] <3 ; extra == 'psql'
|
83
|
-
Requires-Dist: PyYAML ; extra == 'psql'
|
84
|
-
Requires-Dist: PyMySQL ; extra == 'psql'
|
84
|
+
Requires-Dist: SQLAlchemy ~=2.0 ; extra == 'psql'
|
85
85
|
Requires-Dist: domain2idna ~=1.12.0 ; extra == 'psql'
|
86
|
-
Requires-Dist:
|
87
|
-
Requires-Dist: colorama ; extra == 'psql'
|
86
|
+
Requires-Dist: PyMySQL ; extra == 'psql'
|
88
87
|
Requires-Dist: python-dotenv ; extra == 'psql'
|
89
|
-
Requires-Dist: inflection ; extra == 'psql'
|
90
|
-
Requires-Dist: cryptography ~=42.0 ; extra == 'psql'
|
91
88
|
Requires-Dist: alembic ; extra == 'psql'
|
89
|
+
Requires-Dist: python-box[all] ~=6.0.0 ; extra == 'psql'
|
90
|
+
Requires-Dist: requests[socks] <3 ; extra == 'psql'
|
91
|
+
Requires-Dist: cryptography ~=42.0 ; extra == 'psql'
|
92
|
+
Requires-Dist: packaging ; extra == 'psql'
|
93
|
+
Requires-Dist: colorama ; extra == 'psql'
|
94
|
+
Requires-Dist: inflection ; extra == 'psql'
|
95
|
+
Requires-Dist: shtab ; extra == 'psql'
|
92
96
|
Provides-Extra: test
|
93
97
|
Requires-Dist: tox ; extra == 'test'
|
94
98
|
Requires-Dist: coverage ; extra == 'test'
|