PyFunceble-dev 4.3.0a13__tar.gz → 4.3.0a14__tar.gz
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_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PKG-INFO +102 -102
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/base.py +2 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/base.py +1 -1
- pyfunceble_dev-4.3.0a14/PyFunceble/checker/availability/extras/external.py +341 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/config/loader.py +4 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/infrastructure/.PyFunceble_production.yaml +83 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/storage.py +3 -2
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/PKG-INFO +102 -102
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/SOURCES.txt +1 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/version.yaml +1 -1
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/CODE_OF_CONDUCT.md +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/CONTRIBUTING.md +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/CONTRIBUTORS.md +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/LICENSE +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/MANIFEST.in +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/domain.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/domain_and_ip.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/dns.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/etoxic.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/parked.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/rules.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/subject_switch.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/ip.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/params.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/status.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/url.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/complex_json_encoder.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/params_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/domain.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/domain_and_ip.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/ip.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/params.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/status.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/url.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/status_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/domain.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/domain_and_ip.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/domain_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/ip.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/ipv4.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/ipv6.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/params.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/second_lvl_domain.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/status.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/subdomain.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/url.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/utils/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/utils/whois.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/exceptions.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/github_actions.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/gitlab_ci.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/jenkins.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/standalone.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/travis_ci.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/utils.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/credential_loader.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/clean.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/iana.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/production.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/public_suffix.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/pyfunceble/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/pyfunceble/argsparser.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/pyfunceble/cli.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/execution_time.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/facility.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/factory.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/file_preloader.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/cleanup.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/counter.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_structure/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_structure/backup.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_structure/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_structure/restore.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/json_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/printer/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/printer/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/printer/file.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/printer/stdout.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/registrar_counter.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/status_file.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/alembic.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/csv_file/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/csv_file/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/csv_file/inactive_source_delete.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/csv_file/whois_registrar_add.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/db_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/hashes_file.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/mining_file.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/production_config_file.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/json2csv/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/json2csv/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/json2csv/inactive.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/json2csv/whois.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/mariadb/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/mariadb/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/mariadb/file_and_status.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/mariadb/whois_record_idna_subject.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/chancy_producer.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/chancy_tester.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/dir_files_sorter.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/file_sorter.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/migrator.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/miner.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/producer.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/tester.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/chancy_producer.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/chancy_tester.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/dir_files_sorter.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/file_sorter.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/file_sorter_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/migrator.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/miner.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/producer.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/tester.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/scripts/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/scripts/iana.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/scripts/production.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/scripts/public_suffix.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/storage.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/storage_facility.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/system/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/system/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/system/integrator.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/system/launcher.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/ascii_logo.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/sort.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/stdout.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/testing.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/version.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/config/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/config/compare.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/adblock_input_line2subject.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/cidr2subject.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/input_line2subject.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/internal_url.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/rpz_input_line2subject.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/rpz_policy2subject.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/subject2complements.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/url2netloc.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/wildcard2subject.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/env.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/script.py.mako +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/35c79626ecb9_fix_some_columns.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/3a4c55a9320d_add_continue_table.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/3d6f4a33cdb2_add_inactive_table.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/45713fea8097_deletion_uneeded_columns_from_whois_.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/459a0d7b8f09_add_idna_subject_column_into_whois.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/6f4729deaf03_delete_inactive_source_column.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/7bcf7fa64ba1_rename_created_to_created_at_and.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/83ada95132bf_delete_the_file_table.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/912bbcb77a6c_add_registrar_column.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/95dc17ddd729_introduction_of_the_session_id_column.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/ade87195b0a0_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/bef7bcaac3f2_make_id_a_bigint.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/d8893cd406db_allow_whois_record_to_be_empty_null.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/e04e8301d1a2_deletion_of_the_mined_table.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/env.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/script.py.mako +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/versions/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/versions/a32ac5d66eee_initial_version.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/infrastructure/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/infrastructure/dir_structure_production.json +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/mariadb.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/mysql.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/postgresql.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/autocontinue.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/inactive.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/status.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/whois_record.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/session.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/sqlalchemy/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/sqlalchemy/all_schemas.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/sqlalchemy/base_schema.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/autocontinue/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/autocontinue/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/autocontinue/csv.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/autocontinue/sql.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/csv_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/db_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/iana.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/inactive/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/inactive/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/inactive/csv.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/inactive/sql.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/ipv4_reputation.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/public_suffix.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/sql_base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/user_agent.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/whois/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/whois/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/whois/csv.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/whois/sql.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/exceptions.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/iana.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/ipv4_reputation.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/public_suffix.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/user_agents.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/exceptions.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/facility.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/factory.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/command.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/dict.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/directory.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/download.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/environment_variable.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/exceptions.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/file.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/hash.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/list.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/merge.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/regex.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/logger.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/dns/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/dns/nameserver.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/dns/query_tool.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/dns/resolver.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/http_status_code.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/netinfo/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/netinfo/address.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/netinfo/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/netinfo/hostbyaddr.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/platform.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/record/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/record/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/record/dns.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/record/whois.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/adapter/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/adapter/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/adapter/http.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/adapter/https.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/requester.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/base.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/digit2digits.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/expiration_date.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/month2unified.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/registrar.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/query_tool.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/sessions.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/storage_facility.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/utils/__init__.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/utils/platform.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/utils/profile.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/utils/version.py +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/dependency_links.txt +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/entry_points.txt +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/requires.txt +101 -101
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/top_level.txt +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/README.md +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.dev.txt +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.docs.txt +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.test.txt +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.txt +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.win.txt +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/setup.cfg +0 -0
- {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/setup.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: PyFunceble-dev
|
3
|
-
Version: 4.3.
|
3
|
+
Version: 4.3.0a14
|
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: colorama
|
26
|
+
Requires-Dist: PyMySQL
|
27
|
+
Requires-Dist: python-box[all]~=6.0.0
|
25
28
|
Requires-Dist: requests[socks]<3
|
29
|
+
Requires-Dist: packaging
|
30
|
+
Requires-Dist: inflection
|
31
|
+
Requires-Dist: shtab
|
26
32
|
Requires-Dist: domain2idna~=1.12.0
|
27
33
|
Requires-Dist: setuptools>=65.5.1
|
34
|
+
Requires-Dist: dnspython[DOH]~=2.6.0
|
35
|
+
Requires-Dist: SQLAlchemy~=2.0
|
28
36
|
Requires-Dist: python-dotenv
|
29
|
-
Requires-Dist: shtab
|
30
37
|
Requires-Dist: PyYAML
|
31
|
-
Requires-Dist: packaging
|
32
|
-
Requires-Dist: inflection
|
33
|
-
Requires-Dist: python-box[all]~=6.0.0
|
34
|
-
Requires-Dist: PyMySQL
|
35
|
-
Requires-Dist: dnspython[DOH]~=2.6.0
|
36
38
|
Requires-Dist: alembic
|
37
|
-
Requires-Dist: SQLAlchemy~=2.0
|
38
|
-
Requires-Dist: colorama
|
39
39
|
Provides-Extra: docs
|
40
|
-
Requires-Dist: mkdocs-
|
41
|
-
Requires-Dist: mkdocs-
|
42
|
-
Requires-Dist: mkdocstrings[python]~=0.26; extra == "docs"
|
43
|
-
Requires-Dist: zipp>=3.19.1; extra == "docs"
|
40
|
+
Requires-Dist: mkdocs-material~=9.5; extra == "docs"
|
41
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "docs"
|
44
42
|
Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "docs"
|
45
43
|
Requires-Dist: pymdown-extensions~=10.9; extra == "docs"
|
46
|
-
Requires-Dist: mkdocs-
|
47
|
-
Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "docs"
|
44
|
+
Requires-Dist: mkdocs-gen-files~=0.5; extra == "docs"
|
48
45
|
Requires-Dist: mkdocs~=1.5; extra == "docs"
|
46
|
+
Requires-Dist: mkdocstrings[python]~=0.26; extra == "docs"
|
47
|
+
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "docs"
|
49
48
|
Requires-Dist: mkdocs-section-index~=0.3; extra == "docs"
|
50
|
-
Requires-Dist:
|
49
|
+
Requires-Dist: zipp>=3.19.1; extra == "docs"
|
50
|
+
Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "docs"
|
51
51
|
Provides-Extra: dev
|
52
52
|
Requires-Dist: isort; extra == "dev"
|
53
|
-
Requires-Dist: black; extra == "dev"
|
54
53
|
Requires-Dist: flake8; extra == "dev"
|
55
54
|
Requires-Dist: pylint; extra == "dev"
|
55
|
+
Requires-Dist: black; extra == "dev"
|
56
56
|
Provides-Extra: test
|
57
57
|
Requires-Dist: coverage; extra == "test"
|
58
58
|
Requires-Dist: tox; extra == "test"
|
59
59
|
Provides-Extra: psql
|
60
|
+
Requires-Dist: colorama; extra == "psql"
|
61
|
+
Requires-Dist: PyMySQL; extra == "psql"
|
62
|
+
Requires-Dist: python-box[all]~=6.0.0; extra == "psql"
|
60
63
|
Requires-Dist: requests[socks]<3; extra == "psql"
|
64
|
+
Requires-Dist: packaging; extra == "psql"
|
65
|
+
Requires-Dist: inflection; extra == "psql"
|
66
|
+
Requires-Dist: shtab; extra == "psql"
|
61
67
|
Requires-Dist: domain2idna~=1.12.0; extra == "psql"
|
62
68
|
Requires-Dist: setuptools>=65.5.1; extra == "psql"
|
69
|
+
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql"
|
70
|
+
Requires-Dist: SQLAlchemy~=2.0; extra == "psql"
|
71
|
+
Requires-Dist: psycopg2; extra == "psql"
|
63
72
|
Requires-Dist: python-dotenv; extra == "psql"
|
64
|
-
Requires-Dist: shtab; extra == "psql"
|
65
73
|
Requires-Dist: PyYAML; extra == "psql"
|
66
|
-
Requires-Dist: packaging; extra == "psql"
|
67
|
-
Requires-Dist: psycopg2; extra == "psql"
|
68
|
-
Requires-Dist: inflection; extra == "psql"
|
69
|
-
Requires-Dist: python-box[all]~=6.0.0; extra == "psql"
|
70
|
-
Requires-Dist: PyMySQL; extra == "psql"
|
71
|
-
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql"
|
72
74
|
Requires-Dist: alembic; extra == "psql"
|
73
|
-
Requires-Dist: SQLAlchemy~=2.0; extra == "psql"
|
74
|
-
Requires-Dist: colorama; extra == "psql"
|
75
75
|
Provides-Extra: psql-binary
|
76
|
-
Requires-Dist:
|
76
|
+
Requires-Dist: colorama; extra == "psql-binary"
|
77
|
+
Requires-Dist: PyMySQL; extra == "psql-binary"
|
78
|
+
Requires-Dist: python-box[all]~=6.0.0; extra == "psql-binary"
|
77
79
|
Requires-Dist: requests[socks]<3; extra == "psql-binary"
|
80
|
+
Requires-Dist: packaging; extra == "psql-binary"
|
81
|
+
Requires-Dist: inflection; extra == "psql-binary"
|
82
|
+
Requires-Dist: shtab; extra == "psql-binary"
|
83
|
+
Requires-Dist: psycopg2-binary; extra == "psql-binary"
|
78
84
|
Requires-Dist: domain2idna~=1.12.0; extra == "psql-binary"
|
79
85
|
Requires-Dist: setuptools>=65.5.1; extra == "psql-binary"
|
86
|
+
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql-binary"
|
87
|
+
Requires-Dist: SQLAlchemy~=2.0; extra == "psql-binary"
|
80
88
|
Requires-Dist: python-dotenv; extra == "psql-binary"
|
81
|
-
Requires-Dist: shtab; extra == "psql-binary"
|
82
89
|
Requires-Dist: PyYAML; extra == "psql-binary"
|
83
|
-
Requires-Dist: packaging; extra == "psql-binary"
|
84
|
-
Requires-Dist: inflection; extra == "psql-binary"
|
85
|
-
Requires-Dist: python-box[all]~=6.0.0; extra == "psql-binary"
|
86
|
-
Requires-Dist: PyMySQL; extra == "psql-binary"
|
87
|
-
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql-binary"
|
88
90
|
Requires-Dist: alembic; extra == "psql-binary"
|
89
|
-
Requires-Dist: SQLAlchemy~=2.0; extra == "psql-binary"
|
90
|
-
Requires-Dist: colorama; extra == "psql-binary"
|
91
91
|
Provides-Extra: postgresql
|
92
|
+
Requires-Dist: colorama; extra == "postgresql"
|
93
|
+
Requires-Dist: PyMySQL; extra == "postgresql"
|
94
|
+
Requires-Dist: python-box[all]~=6.0.0; extra == "postgresql"
|
92
95
|
Requires-Dist: requests[socks]<3; extra == "postgresql"
|
96
|
+
Requires-Dist: packaging; extra == "postgresql"
|
97
|
+
Requires-Dist: inflection; extra == "postgresql"
|
98
|
+
Requires-Dist: shtab; extra == "postgresql"
|
93
99
|
Requires-Dist: domain2idna~=1.12.0; extra == "postgresql"
|
94
100
|
Requires-Dist: setuptools>=65.5.1; extra == "postgresql"
|
101
|
+
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "postgresql"
|
102
|
+
Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql"
|
103
|
+
Requires-Dist: psycopg2; extra == "postgresql"
|
95
104
|
Requires-Dist: python-dotenv; extra == "postgresql"
|
96
|
-
Requires-Dist: shtab; extra == "postgresql"
|
97
105
|
Requires-Dist: PyYAML; extra == "postgresql"
|
98
|
-
Requires-Dist: packaging; extra == "postgresql"
|
99
|
-
Requires-Dist: psycopg2; extra == "postgresql"
|
100
|
-
Requires-Dist: inflection; extra == "postgresql"
|
101
|
-
Requires-Dist: python-box[all]~=6.0.0; extra == "postgresql"
|
102
|
-
Requires-Dist: PyMySQL; extra == "postgresql"
|
103
|
-
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "postgresql"
|
104
106
|
Requires-Dist: alembic; extra == "postgresql"
|
105
|
-
Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql"
|
106
|
-
Requires-Dist: colorama; extra == "postgresql"
|
107
107
|
Provides-Extra: postgresql-binary
|
108
|
-
Requires-Dist:
|
108
|
+
Requires-Dist: colorama; extra == "postgresql-binary"
|
109
|
+
Requires-Dist: PyMySQL; extra == "postgresql-binary"
|
110
|
+
Requires-Dist: python-box[all]~=6.0.0; extra == "postgresql-binary"
|
109
111
|
Requires-Dist: requests[socks]<3; extra == "postgresql-binary"
|
112
|
+
Requires-Dist: packaging; extra == "postgresql-binary"
|
113
|
+
Requires-Dist: inflection; extra == "postgresql-binary"
|
114
|
+
Requires-Dist: shtab; extra == "postgresql-binary"
|
115
|
+
Requires-Dist: psycopg2-binary; extra == "postgresql-binary"
|
110
116
|
Requires-Dist: domain2idna~=1.12.0; extra == "postgresql-binary"
|
111
117
|
Requires-Dist: setuptools>=65.5.1; extra == "postgresql-binary"
|
118
|
+
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "postgresql-binary"
|
119
|
+
Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql-binary"
|
112
120
|
Requires-Dist: python-dotenv; extra == "postgresql-binary"
|
113
|
-
Requires-Dist: shtab; extra == "postgresql-binary"
|
114
121
|
Requires-Dist: PyYAML; extra == "postgresql-binary"
|
115
|
-
Requires-Dist: packaging; extra == "postgresql-binary"
|
116
|
-
Requires-Dist: inflection; extra == "postgresql-binary"
|
117
|
-
Requires-Dist: python-box[all]~=6.0.0; extra == "postgresql-binary"
|
118
|
-
Requires-Dist: PyMySQL; extra == "postgresql-binary"
|
119
|
-
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "postgresql-binary"
|
120
122
|
Requires-Dist: alembic; extra == "postgresql-binary"
|
121
|
-
Requires-Dist: SQLAlchemy~=2.0; extra == "postgresql-binary"
|
122
|
-
Requires-Dist: colorama; extra == "postgresql-binary"
|
123
123
|
Provides-Extra: full
|
124
|
-
Requires-Dist: requests[socks]<3; extra == "full"
|
125
|
-
Requires-Dist: python-dotenv; extra == "full"
|
126
|
-
Requires-Dist: pymdown-extensions~=10.9; extra == "full"
|
127
|
-
Requires-Dist: PyYAML; extra == "full"
|
128
|
-
Requires-Dist: tox; extra == "full"
|
129
|
-
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "full"
|
130
|
-
Requires-Dist: mkdocs~=1.5; extra == "full"
|
131
124
|
Requires-Dist: python-box[all]~=6.0.0; extra == "full"
|
132
|
-
Requires-Dist:
|
133
|
-
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "full"
|
134
|
-
Requires-Dist: zipp>=3.19.1; extra == "full"
|
135
|
-
Requires-Dist: flake8; extra == "full"
|
136
|
-
Requires-Dist: mkdocstrings[python]~=0.26; extra == "full"
|
137
|
-
Requires-Dist: setuptools>=65.5.1; extra == "full"
|
138
|
-
Requires-Dist: black; extra == "full"
|
125
|
+
Requires-Dist: mkdocs-material~=9.5; extra == "full"
|
139
126
|
Requires-Dist: packaging; extra == "full"
|
140
|
-
Requires-Dist:
|
141
|
-
Requires-Dist:
|
142
|
-
Requires-Dist: SQLAlchemy~=2.0; extra == "full"
|
127
|
+
Requires-Dist: inflection; extra == "full"
|
128
|
+
Requires-Dist: black; extra == "full"
|
143
129
|
Requires-Dist: domain2idna~=1.12.0; extra == "full"
|
144
|
-
Requires-Dist:
|
130
|
+
Requires-Dist: setuptools>=65.5.1; extra == "full"
|
131
|
+
Requires-Dist: SQLAlchemy~=2.0; extra == "full"
|
132
|
+
Requires-Dist: mkdocstrings[python]~=0.26; extra == "full"
|
133
|
+
Requires-Dist: PyYAML; extra == "full"
|
134
|
+
Requires-Dist: alembic; extra == "full"
|
145
135
|
Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "full"
|
146
|
-
Requires-Dist:
|
147
|
-
Requires-Dist:
|
148
|
-
Requires-Dist: mkdocs-gen-files~=0.5; extra == "full"
|
136
|
+
Requires-Dist: coverage; extra == "full"
|
137
|
+
Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "full"
|
149
138
|
Requires-Dist: shtab; extra == "full"
|
150
|
-
Requires-Dist:
|
139
|
+
Requires-Dist: mkdocs-gen-files~=0.5; extra == "full"
|
140
|
+
Requires-Dist: tox; extra == "full"
|
151
141
|
Requires-Dist: isort; extra == "full"
|
152
|
-
Requires-Dist:
|
153
|
-
Requires-Dist:
|
142
|
+
Requires-Dist: colorama; extra == "full"
|
143
|
+
Requires-Dist: PyMySQL; extra == "full"
|
144
|
+
Requires-Dist: pymdown-extensions~=10.9; extra == "full"
|
145
|
+
Requires-Dist: mkdocs~=1.5; extra == "full"
|
154
146
|
Requires-Dist: pylint; extra == "full"
|
147
|
+
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "full"
|
148
|
+
Requires-Dist: python-dotenv; extra == "full"
|
149
|
+
Requires-Dist: mkdocs-section-index~=0.3; extra == "full"
|
150
|
+
Requires-Dist: requests[socks]<3; extra == "full"
|
151
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "full"
|
152
|
+
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "full"
|
153
|
+
Requires-Dist: zipp>=3.19.1; extra == "full"
|
154
|
+
Requires-Dist: flake8; extra == "full"
|
155
155
|
Provides-Extra: all
|
156
|
-
Requires-Dist: requests[socks]<3; extra == "all"
|
157
|
-
Requires-Dist: python-dotenv; extra == "all"
|
158
|
-
Requires-Dist: pymdown-extensions~=10.9; extra == "all"
|
159
|
-
Requires-Dist: PyYAML; extra == "all"
|
160
|
-
Requires-Dist: tox; extra == "all"
|
161
|
-
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "all"
|
162
|
-
Requires-Dist: mkdocs~=1.5; extra == "all"
|
163
156
|
Requires-Dist: python-box[all]~=6.0.0; extra == "all"
|
164
|
-
Requires-Dist:
|
165
|
-
Requires-Dist: psycopg2-binary; extra == "all"
|
166
|
-
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "all"
|
167
|
-
Requires-Dist: zipp>=3.19.1; extra == "all"
|
168
|
-
Requires-Dist: flake8; extra == "all"
|
169
|
-
Requires-Dist: mkdocstrings[python]~=0.26; extra == "all"
|
170
|
-
Requires-Dist: setuptools>=65.5.1; extra == "all"
|
171
|
-
Requires-Dist: black; extra == "all"
|
157
|
+
Requires-Dist: mkdocs-material~=9.5; extra == "all"
|
172
158
|
Requires-Dist: packaging; extra == "all"
|
173
|
-
Requires-Dist:
|
174
|
-
Requires-Dist:
|
175
|
-
Requires-Dist: SQLAlchemy~=2.0; extra == "all"
|
159
|
+
Requires-Dist: inflection; extra == "all"
|
160
|
+
Requires-Dist: black; extra == "all"
|
176
161
|
Requires-Dist: domain2idna~=1.12.0; extra == "all"
|
177
|
-
Requires-Dist:
|
162
|
+
Requires-Dist: setuptools>=65.5.1; extra == "all"
|
163
|
+
Requires-Dist: SQLAlchemy~=2.0; extra == "all"
|
164
|
+
Requires-Dist: mkdocstrings[python]~=0.26; extra == "all"
|
165
|
+
Requires-Dist: PyYAML; extra == "all"
|
166
|
+
Requires-Dist: alembic; extra == "all"
|
178
167
|
Requires-Dist: mkdocs-macros-plugin~=1.2; extra == "all"
|
179
|
-
Requires-Dist:
|
180
|
-
Requires-Dist:
|
181
|
-
Requires-Dist: mkdocs-gen-files~=0.5; extra == "all"
|
168
|
+
Requires-Dist: coverage; extra == "all"
|
169
|
+
Requires-Dist: mkdocs-git-authors-plugin~=0.9; extra == "all"
|
182
170
|
Requires-Dist: shtab; extra == "all"
|
183
|
-
Requires-Dist:
|
171
|
+
Requires-Dist: mkdocs-gen-files~=0.5; extra == "all"
|
172
|
+
Requires-Dist: tox; extra == "all"
|
173
|
+
Requires-Dist: psycopg2-binary; extra == "all"
|
184
174
|
Requires-Dist: isort; extra == "all"
|
185
|
-
Requires-Dist:
|
186
|
-
Requires-Dist:
|
175
|
+
Requires-Dist: colorama; extra == "all"
|
176
|
+
Requires-Dist: PyMySQL; extra == "all"
|
177
|
+
Requires-Dist: pymdown-extensions~=10.9; extra == "all"
|
178
|
+
Requires-Dist: mkdocs~=1.5; extra == "all"
|
187
179
|
Requires-Dist: pylint; extra == "all"
|
180
|
+
Requires-Dist: mkdocs-literate-nav~=0.6; extra == "all"
|
181
|
+
Requires-Dist: python-dotenv; extra == "all"
|
182
|
+
Requires-Dist: mkdocs-section-index~=0.3; extra == "all"
|
183
|
+
Requires-Dist: requests[socks]<3; extra == "all"
|
184
|
+
Requires-Dist: mkdocs-git-revision-date-localized-plugin~=1.2; extra == "all"
|
185
|
+
Requires-Dist: dnspython[DOH]~=2.6.0; extra == "all"
|
186
|
+
Requires-Dist: zipp>=3.19.1; extra == "all"
|
187
|
+
Requires-Dist: flake8; extra == "all"
|
188
188
|
|
189
189
|

|
190
190
|
|
@@ -64,6 +64,7 @@ import PyFunceble.storage
|
|
64
64
|
from PyFunceble.checker.availability.extras.base import ExtraRuleHandlerBase
|
65
65
|
from PyFunceble.checker.availability.extras.dns import DNSRulesHandler
|
66
66
|
from PyFunceble.checker.availability.extras.etoxic import EToxicHandler
|
67
|
+
from PyFunceble.checker.availability.extras.external import ExternalRulesHandler
|
67
68
|
from PyFunceble.checker.availability.extras.rules import ExtraRulesHandler
|
68
69
|
from PyFunceble.checker.availability.extras.subject_switch import (
|
69
70
|
SubjectSwitchRulesHandler,
|
@@ -174,6 +175,7 @@ class AvailabilityCheckerBase(CheckerBase):
|
|
174
175
|
DNSRulesHandler(),
|
175
176
|
EToxicHandler(),
|
176
177
|
ExtraRulesHandler(),
|
178
|
+
ExternalRulesHandler(rulesets=PyFunceble.storage.SPECIAL_RULES),
|
177
179
|
]
|
178
180
|
self.db_session = db_session
|
179
181
|
|
{pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/base.py
RENAMED
@@ -328,7 +328,7 @@ class ExtraRuleHandlerBase:
|
|
328
328
|
def handle_regex_match_mode(_req: requests.Response):
|
329
329
|
matches2search_result = {}
|
330
330
|
|
331
|
-
for header, loc_matches in matches:
|
331
|
+
for header, loc_matches in matches.items():
|
332
332
|
matches2search_result[header] = False
|
333
333
|
|
334
334
|
if header not in _req.headers:
|
@@ -0,0 +1,341 @@
|
|
1
|
+
"""
|
2
|
+
The tool to check the availability or syntax of domain, IP or URL.
|
3
|
+
|
4
|
+
::
|
5
|
+
|
6
|
+
|
7
|
+
██████╗ ██╗ ██╗███████╗██╗ ██╗███╗ ██╗ ██████╗███████╗██████╗ ██╗ ███████╗
|
8
|
+
██╔══██╗╚██╗ ██╔╝██╔════╝██║ ██║████╗ ██║██╔════╝██╔════╝██╔══██╗██║ ██╔════╝
|
9
|
+
██████╔╝ ╚████╔╝ █████╗ ██║ ██║██╔██╗ ██║██║ █████╗ ██████╔╝██║ █████╗
|
10
|
+
██╔═══╝ ╚██╔╝ ██╔══╝ ██║ ██║██║╚██╗██║██║ ██╔══╝ ██╔══██╗██║ ██╔══╝
|
11
|
+
██║ ██║ ██║ ╚██████╔╝██║ ╚████║╚██████╗███████╗██████╔╝███████╗███████╗
|
12
|
+
╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝╚══════╝╚═════╝ ╚══════╝╚══════╝
|
13
|
+
|
14
|
+
Provides the extra rules handler based on some DNS records.
|
15
|
+
|
16
|
+
Author:
|
17
|
+
Nissar Chababy, @funilrys, contactTATAfunilrysTODTODcom
|
18
|
+
|
19
|
+
Special thanks:
|
20
|
+
https://pyfunceble.github.io/#/special-thanks
|
21
|
+
|
22
|
+
Contributors:
|
23
|
+
https://pyfunceble.github.io/#/contributors
|
24
|
+
|
25
|
+
Project link:
|
26
|
+
https://github.com/funilrys/PyFunceble
|
27
|
+
|
28
|
+
Project documentation:
|
29
|
+
https://docs.pyfunceble.com
|
30
|
+
|
31
|
+
Project homepage:
|
32
|
+
https://pyfunceble.github.io/
|
33
|
+
|
34
|
+
License:
|
35
|
+
::
|
36
|
+
|
37
|
+
|
38
|
+
Copyright 2017, 2018, 2019, 2020, 2022, 2023, 2024 Nissar Chababy
|
39
|
+
|
40
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
41
|
+
you may not use this file except in compliance with the License.
|
42
|
+
You may obtain a copy of the License at
|
43
|
+
|
44
|
+
https://www.apache.org/licenses/LICENSE-2.0
|
45
|
+
|
46
|
+
Unless required by applicable law or agreed to in writing, software
|
47
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
48
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
49
|
+
See the License for the specific language governing permissions and
|
50
|
+
limitations under the License.
|
51
|
+
"""
|
52
|
+
|
53
|
+
# pylint: disable=line-too-long
|
54
|
+
|
55
|
+
from typing import Optional
|
56
|
+
|
57
|
+
from PyFunceble.checker.availability.extras.base import ExtraRuleHandlerBase
|
58
|
+
from PyFunceble.checker.availability.status import AvailabilityCheckerStatus
|
59
|
+
|
60
|
+
|
61
|
+
class ExternalRulesHandler(ExtraRuleHandlerBase):
|
62
|
+
"""
|
63
|
+
Provides the external rules handler that is used to handle the external
|
64
|
+
provided rules.
|
65
|
+
|
66
|
+
Through this handler, end-user can provide their own rules to handle
|
67
|
+
the availability status of a subject.
|
68
|
+
|
69
|
+
:param status:
|
70
|
+
The previously gathered status.
|
71
|
+
:type status:
|
72
|
+
:class:`~PyFunceble.checker.availability.status.AvailabilityCheckerStatus`
|
73
|
+
"""
|
74
|
+
|
75
|
+
rulesets: list = []
|
76
|
+
"""
|
77
|
+
The rulesets to process.
|
78
|
+
|
79
|
+
If you want to switch from the status code, you should provide a dict
|
80
|
+
with the following structure:
|
81
|
+
|
82
|
+
{
|
83
|
+
"subject_pattern": ".*", // The pattern the subject should match.
|
84
|
+
"validation_type": "status_code", // Type of validation (status_code, headers, body, etc.)
|
85
|
+
"state_transition": "up", // "up" -> ACTIVE, "down" -> INACTIVE
|
86
|
+
"required_status_code": [404], // Status code to match.
|
87
|
+
}
|
88
|
+
|
89
|
+
If you want to switch from the headers, you should provide a dict
|
90
|
+
|
91
|
+
{
|
92
|
+
"subject_pattern": ".*", // The pattern the subject should match.
|
93
|
+
"validation_type": "headers", // Type of validation (status_code, headers, body, etc.)
|
94
|
+
"state_transition": "up", // "up" -> ACTIVE, "down" -> INACTIVE
|
95
|
+
"required_headers_patterns": { // Required, the headers to match.
|
96
|
+
"header_name": ["possible", "values"]
|
97
|
+
},
|
98
|
+
}
|
99
|
+
|
100
|
+
If you want to switch from the body, you should provide a dict
|
101
|
+
|
102
|
+
{
|
103
|
+
"subject_pattern": ".*", // The pattern the subject should match.
|
104
|
+
"validation_type": "body", // Type of validation (status_code, headers, body, etc.)
|
105
|
+
"state_transition": "up", // "up" -> ACTIVE, "down" -> INACTIVE
|
106
|
+
"required_body_patterns": ["regex1", "regex2"] // Required, the body patterns to match.
|
107
|
+
}
|
108
|
+
|
109
|
+
If you want to switch from a combination of headers and body, you should provide a dict
|
110
|
+
|
111
|
+
{
|
112
|
+
"subject_pattern": ".*", // The pattern the subject should match.
|
113
|
+
"validation_type": "headers+body", // Type of validation (status_code, headers, body, etc.)
|
114
|
+
"state_transition": "up", // "up" -> ACTIVE, "down" -> INACTIVE
|
115
|
+
"required_headers_patterns": { // Required, the headers to match.
|
116
|
+
"header_name": ["possible", "values"]
|
117
|
+
},
|
118
|
+
"required_body_patterns": ["regex1", "regex2"] // Required, the body patterns to match.
|
119
|
+
}
|
120
|
+
|
121
|
+
If you want to switch from a combination of all, you should provide a dict
|
122
|
+
|
123
|
+
{
|
124
|
+
"subject_pattern": ".*", // The pattern the subject should match.
|
125
|
+
"validation_type": "all", // Type of validation (status_code, headers, body, etc.)
|
126
|
+
"state_transition": "up", // "up" -> ACTIVE, "down" -> INACTIVE
|
127
|
+
"required_status_code": [404], // Optional, Status code to match.
|
128
|
+
"required_headers_patterns": { // Optional, the headers to match.
|
129
|
+
"header_name": ["possible", "values"]
|
130
|
+
},
|
131
|
+
"required_body_patterns": ["regex1", "regex2"] // Optional, the body patterns to match.
|
132
|
+
}
|
133
|
+
|
134
|
+
"""
|
135
|
+
|
136
|
+
def __init__(
|
137
|
+
self,
|
138
|
+
status: Optional[AvailabilityCheckerStatus] = None,
|
139
|
+
*,
|
140
|
+
rulesets: list = None
|
141
|
+
) -> None:
|
142
|
+
if rulesets is not None:
|
143
|
+
self.rulesets = rulesets
|
144
|
+
|
145
|
+
super().__init__(status)
|
146
|
+
|
147
|
+
def switch_from_status_code_rule(self, rule: dict) -> "ExternalRulesHandler":
|
148
|
+
"""
|
149
|
+
Switch from the status code rule.
|
150
|
+
|
151
|
+
:param rule:
|
152
|
+
The rule to switch from.
|
153
|
+
:type rule: dict
|
154
|
+
"""
|
155
|
+
|
156
|
+
required_keys = ["validation_type", "required_status_code"]
|
157
|
+
|
158
|
+
if any(x not in rule for x in required_keys):
|
159
|
+
return self
|
160
|
+
|
161
|
+
if rule["validation_type"] != "status_code":
|
162
|
+
return self
|
163
|
+
|
164
|
+
if all(
|
165
|
+
self.status.http_status_code != int(x) for x in rule["required_status_code"]
|
166
|
+
):
|
167
|
+
return self
|
168
|
+
|
169
|
+
if rule["state_transition"] == "up":
|
170
|
+
return self.switch_to_up()
|
171
|
+
|
172
|
+
if rule["state_transition"] == "down":
|
173
|
+
return self.switch_to_down()
|
174
|
+
|
175
|
+
return self
|
176
|
+
|
177
|
+
def switch_from_headers_rule(self, rule: dict) -> "ExternalRulesHandler":
|
178
|
+
"""
|
179
|
+
Switch from the headers rule.
|
180
|
+
|
181
|
+
:param rule:
|
182
|
+
The rule to switch from.
|
183
|
+
:type rule: dict
|
184
|
+
"""
|
185
|
+
|
186
|
+
required_keys = ["validation_type", "required_headers_patterns"]
|
187
|
+
|
188
|
+
if any(x not in rule for x in required_keys):
|
189
|
+
return self
|
190
|
+
|
191
|
+
if rule["validation_type"] != "headers":
|
192
|
+
return self
|
193
|
+
|
194
|
+
if rule["state_transition"] == "up":
|
195
|
+
switch_method = self.switch_to_up
|
196
|
+
|
197
|
+
if rule["state_transition"] == "down":
|
198
|
+
switch_method = self.switch_to_down
|
199
|
+
|
200
|
+
if "required_headers_patterns" in rule and rule["required_headers_patterns"]:
|
201
|
+
# pylint: disable=possibly-used-before-assignment
|
202
|
+
self.do_on_header_match(
|
203
|
+
self.req_url,
|
204
|
+
rule["required_headers_patterns"],
|
205
|
+
method=switch_method,
|
206
|
+
strict=False,
|
207
|
+
allow_redirects=False,
|
208
|
+
)
|
209
|
+
|
210
|
+
return self
|
211
|
+
|
212
|
+
def switch_from_body_rule(self, rule: dict) -> "ExternalRulesHandler":
|
213
|
+
"""
|
214
|
+
Switch from the body rule.
|
215
|
+
|
216
|
+
:param rule:
|
217
|
+
The rule to switch from.
|
218
|
+
:type rule: dict
|
219
|
+
"""
|
220
|
+
|
221
|
+
required_keys = ["validation_type", "required_body_patterns"]
|
222
|
+
|
223
|
+
if any(x not in rule for x in required_keys):
|
224
|
+
return self
|
225
|
+
|
226
|
+
if rule["validation_type"] != "body":
|
227
|
+
return self
|
228
|
+
|
229
|
+
if rule["state_transition"] == "up":
|
230
|
+
switch_method = self.switch_to_up
|
231
|
+
|
232
|
+
if rule["state_transition"] == "down":
|
233
|
+
switch_method = self.switch_to_down
|
234
|
+
|
235
|
+
if "required_body_patterns" in rule and rule["required_body_patterns"]:
|
236
|
+
# pylint: disable=possibly-used-before-assignment
|
237
|
+
self.do_on_body_match(
|
238
|
+
self.req_url,
|
239
|
+
rule["required_body_patterns"],
|
240
|
+
method=switch_method,
|
241
|
+
strict=False,
|
242
|
+
allow_redirects=False,
|
243
|
+
)
|
244
|
+
|
245
|
+
return self
|
246
|
+
|
247
|
+
def switch_from_all_rule(self, rule: dict) -> "ExternalRulesHandler":
|
248
|
+
"""
|
249
|
+
Switch from the all rule.
|
250
|
+
|
251
|
+
:param rule:
|
252
|
+
The rule to switch from.
|
253
|
+
:type rule: dict
|
254
|
+
"""
|
255
|
+
|
256
|
+
required_keys = [
|
257
|
+
"validation_type",
|
258
|
+
]
|
259
|
+
|
260
|
+
if any(x not in rule for x in required_keys):
|
261
|
+
return self
|
262
|
+
|
263
|
+
if rule["validation_type"] != "all":
|
264
|
+
return self
|
265
|
+
|
266
|
+
if rule["state_transition"] == "up":
|
267
|
+
switch_method = self.switch_to_up
|
268
|
+
|
269
|
+
if rule["state_transition"] == "down":
|
270
|
+
switch_method = self.switch_to_down
|
271
|
+
|
272
|
+
if (
|
273
|
+
"required_status_code" in rule
|
274
|
+
and rule["required_status_code"]
|
275
|
+
and any(
|
276
|
+
self.status.http_status_code == int(x)
|
277
|
+
for x in rule["required_status_code"]
|
278
|
+
)
|
279
|
+
):
|
280
|
+
# pylint: disable=possibly-used-before-assignment
|
281
|
+
switch_method()
|
282
|
+
|
283
|
+
if "required_headers_patterns" in rule and rule["required_headers_patterns"]:
|
284
|
+
self.do_on_header_match(
|
285
|
+
self.req_url,
|
286
|
+
rule["required_headers_patterns"],
|
287
|
+
method=switch_method,
|
288
|
+
strict=False,
|
289
|
+
allow_redirects=False,
|
290
|
+
)
|
291
|
+
|
292
|
+
if "required_body_patterns" in rule and rule["required_body_patterns"]:
|
293
|
+
self.do_on_body_match(
|
294
|
+
self.req_url,
|
295
|
+
rule["required_body_patterns"],
|
296
|
+
method=switch_method,
|
297
|
+
strict=False,
|
298
|
+
allow_redirects=False,
|
299
|
+
)
|
300
|
+
|
301
|
+
return self
|
302
|
+
|
303
|
+
@ExtraRuleHandlerBase.ensure_status_is_given
|
304
|
+
@ExtraRuleHandlerBase.setup_status_before
|
305
|
+
@ExtraRuleHandlerBase.setup_status_after
|
306
|
+
def start(self) -> "ExternalRulesHandler":
|
307
|
+
"""
|
308
|
+
Process the check and handling of the external rules for the given subject.
|
309
|
+
"""
|
310
|
+
|
311
|
+
required_keys = ["subject_pattern", "validation_type", "state_transition"]
|
312
|
+
|
313
|
+
for rule in self.rulesets:
|
314
|
+
if any(x not in rule for x in required_keys):
|
315
|
+
continue
|
316
|
+
|
317
|
+
if not self.regex_helper.set_regex(rule["subject_pattern"]).match(
|
318
|
+
self.status.netloc, return_match=False
|
319
|
+
):
|
320
|
+
continue
|
321
|
+
|
322
|
+
if rule["state_transition"] not in ["up", "down"]:
|
323
|
+
continue
|
324
|
+
|
325
|
+
if self.status.status_after_extra_rules:
|
326
|
+
# We already switched the status.
|
327
|
+
break
|
328
|
+
|
329
|
+
if rule["validation_type"] == "status_code":
|
330
|
+
self.switch_from_status_code_rule(rule)
|
331
|
+
elif rule["validation_type"] == "headers":
|
332
|
+
self.switch_from_headers_rule(rule)
|
333
|
+
elif rule["validation_type"] == "body":
|
334
|
+
self.switch_from_body_rule(rule)
|
335
|
+
elif rule["validation_type"] == "headers+body":
|
336
|
+
self.switch_from_headers_rule(rule)
|
337
|
+
self.switch_from_body_rule(rule)
|
338
|
+
elif rule["validation_type"] == "all":
|
339
|
+
self.switch_from_all_rule(rule)
|
340
|
+
|
341
|
+
return self
|
@@ -651,6 +651,9 @@ class ConfigLoader:
|
|
651
651
|
if "proxy" in config and config["proxy"]:
|
652
652
|
PyFunceble.storage.PROXY = Box(config["proxy"])
|
653
653
|
|
654
|
+
if "special_rules" in config and config["special_rules"]:
|
655
|
+
PyFunceble.storage.SPECIAL_RULES = config["special_rules"]
|
656
|
+
|
654
657
|
# Early load user agents to allow usage of defined user agents.
|
655
658
|
UserAgentDataset().get_latest()
|
656
659
|
|
@@ -676,6 +679,7 @@ class ConfigLoader:
|
|
676
679
|
PyFunceble.storage.PLATFORM = Box({})
|
677
680
|
PyFunceble.storage.LINKS = Box({})
|
678
681
|
PyFunceble.storage.PROXY = Box({})
|
682
|
+
PyFunceble.storage.SPECIAL_RULES = Box({})
|
679
683
|
except (AttributeError, TypeError): # pragma: no cover ## Safety.
|
680
684
|
pass
|
681
685
|
|