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.

Potentially problematic release.


This version of PyFunceble-dev might be problematic. Click here for more details.

Files changed (299) hide show
  1. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PKG-INFO +102 -102
  2. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/base.py +2 -0
  3. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/base.py +1 -1
  4. pyfunceble_dev-4.3.0a14/PyFunceble/checker/availability/extras/external.py +341 -0
  5. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/config/loader.py +4 -0
  6. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/infrastructure/.PyFunceble_production.yaml +83 -0
  7. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/storage.py +3 -2
  8. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/PKG-INFO +102 -102
  9. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/SOURCES.txt +1 -0
  10. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/version.yaml +1 -1
  11. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/CODE_OF_CONDUCT.md +0 -0
  12. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/CONTRIBUTING.md +0 -0
  13. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/CONTRIBUTORS.md +0 -0
  14. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/LICENSE +0 -0
  15. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/MANIFEST.in +0 -0
  16. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/__init__.py +0 -0
  17. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/__init__.py +0 -0
  18. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/__init__.py +0 -0
  19. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/domain.py +0 -0
  20. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/domain_and_ip.py +0 -0
  21. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/__init__.py +0 -0
  22. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/dns.py +0 -0
  23. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/etoxic.py +0 -0
  24. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/parked.py +0 -0
  25. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/rules.py +0 -0
  26. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/extras/subject_switch.py +0 -0
  27. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/ip.py +0 -0
  28. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/params.py +0 -0
  29. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/status.py +0 -0
  30. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/availability/url.py +0 -0
  31. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/base.py +0 -0
  32. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/complex_json_encoder.py +0 -0
  33. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/params_base.py +0 -0
  34. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/__init__.py +0 -0
  35. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/base.py +0 -0
  36. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/domain.py +0 -0
  37. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/domain_and_ip.py +0 -0
  38. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/ip.py +0 -0
  39. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/params.py +0 -0
  40. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/status.py +0 -0
  41. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/reputation/url.py +0 -0
  42. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/status_base.py +0 -0
  43. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/__init__.py +0 -0
  44. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/base.py +0 -0
  45. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/domain.py +0 -0
  46. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/domain_and_ip.py +0 -0
  47. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/domain_base.py +0 -0
  48. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/ip.py +0 -0
  49. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/ipv4.py +0 -0
  50. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/ipv6.py +0 -0
  51. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/params.py +0 -0
  52. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/second_lvl_domain.py +0 -0
  53. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/status.py +0 -0
  54. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/subdomain.py +0 -0
  55. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/syntax/url.py +0 -0
  56. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/utils/__init__.py +0 -0
  57. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/checker/utils/whois.py +0 -0
  58. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/__init__.py +0 -0
  59. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/__init__.py +0 -0
  60. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/base.py +0 -0
  61. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/exceptions.py +0 -0
  62. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/github_actions.py +0 -0
  63. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/gitlab_ci.py +0 -0
  64. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/jenkins.py +0 -0
  65. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/standalone.py +0 -0
  66. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/travis_ci.py +0 -0
  67. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/continuous_integration/utils.py +0 -0
  68. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/credential_loader.py +0 -0
  69. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/__init__.py +0 -0
  70. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/clean.py +0 -0
  71. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/iana.py +0 -0
  72. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/production.py +0 -0
  73. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/public_suffix.py +0 -0
  74. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/pyfunceble/__init__.py +0 -0
  75. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/pyfunceble/argsparser.py +0 -0
  76. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/entry_points/pyfunceble/cli.py +0 -0
  77. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/execution_time.py +0 -0
  78. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/facility.py +0 -0
  79. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/factory.py +0 -0
  80. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/file_preloader.py +0 -0
  81. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/__init__.py +0 -0
  82. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/cleanup.py +0 -0
  83. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/counter.py +0 -0
  84. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_base.py +0 -0
  85. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_structure/__init__.py +0 -0
  86. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_structure/backup.py +0 -0
  87. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_structure/base.py +0 -0
  88. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/dir_structure/restore.py +0 -0
  89. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/json_base.py +0 -0
  90. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/printer/__init__.py +0 -0
  91. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/printer/base.py +0 -0
  92. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/printer/file.py +0 -0
  93. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/printer/stdout.py +0 -0
  94. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/registrar_counter.py +0 -0
  95. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/filesystem/status_file.py +0 -0
  96. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/__init__.py +0 -0
  97. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/alembic.py +0 -0
  98. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/base.py +0 -0
  99. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/csv_file/__init__.py +0 -0
  100. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/csv_file/base.py +0 -0
  101. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/csv_file/inactive_source_delete.py +0 -0
  102. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/csv_file/whois_registrar_add.py +0 -0
  103. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/db_base.py +0 -0
  104. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/__init__.py +0 -0
  105. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/base.py +0 -0
  106. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/hashes_file.py +0 -0
  107. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/mining_file.py +0 -0
  108. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/file_cleanup/production_config_file.py +0 -0
  109. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/json2csv/__init__.py +0 -0
  110. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/json2csv/base.py +0 -0
  111. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/json2csv/inactive.py +0 -0
  112. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/json2csv/whois.py +0 -0
  113. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/mariadb/__init__.py +0 -0
  114. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/mariadb/base.py +0 -0
  115. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/mariadb/file_and_status.py +0 -0
  116. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/migrators/mariadb/whois_record_idna_subject.py +0 -0
  117. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/__init__.py +0 -0
  118. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/base.py +0 -0
  119. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/chancy_producer.py +0 -0
  120. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/chancy_tester.py +0 -0
  121. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/dir_files_sorter.py +0 -0
  122. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/file_sorter.py +0 -0
  123. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/migrator.py +0 -0
  124. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/miner.py +0 -0
  125. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/producer.py +0 -0
  126. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/tester.py +0 -0
  127. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/__init__.py +0 -0
  128. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/base.py +0 -0
  129. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/chancy_producer.py +0 -0
  130. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/chancy_tester.py +0 -0
  131. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/dir_files_sorter.py +0 -0
  132. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/file_sorter.py +0 -0
  133. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/file_sorter_base.py +0 -0
  134. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/migrator.py +0 -0
  135. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/miner.py +0 -0
  136. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/producer.py +0 -0
  137. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/processes/workers/tester.py +0 -0
  138. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/scripts/__init__.py +0 -0
  139. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/scripts/iana.py +0 -0
  140. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/scripts/production.py +0 -0
  141. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/scripts/public_suffix.py +0 -0
  142. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/storage.py +0 -0
  143. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/storage_facility.py +0 -0
  144. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/system/__init__.py +0 -0
  145. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/system/base.py +0 -0
  146. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/system/integrator.py +0 -0
  147. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/system/launcher.py +0 -0
  148. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/__init__.py +0 -0
  149. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/ascii_logo.py +0 -0
  150. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/sort.py +0 -0
  151. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/stdout.py +0 -0
  152. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/testing.py +0 -0
  153. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/cli/utils/version.py +0 -0
  154. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/config/__init__.py +0 -0
  155. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/config/compare.py +0 -0
  156. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/__init__.py +0 -0
  157. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/adblock_input_line2subject.py +0 -0
  158. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/base.py +0 -0
  159. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/cidr2subject.py +0 -0
  160. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/input_line2subject.py +0 -0
  161. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/internal_url.py +0 -0
  162. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/rpz_input_line2subject.py +0 -0
  163. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/rpz_policy2subject.py +0 -0
  164. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/subject2complements.py +0 -0
  165. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/url2netloc.py +0 -0
  166. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/converter/wildcard2subject.py +0 -0
  167. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/__init__.py +0 -0
  168. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/__init__.py +0 -0
  169. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/__init__.py +0 -0
  170. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/env.py +0 -0
  171. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/script.py.mako +0 -0
  172. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/35c79626ecb9_fix_some_columns.py +0 -0
  173. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/3a4c55a9320d_add_continue_table.py +0 -0
  174. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/3d6f4a33cdb2_add_inactive_table.py +0 -0
  175. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/45713fea8097_deletion_uneeded_columns_from_whois_.py +0 -0
  176. {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
  177. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/6f4729deaf03_delete_inactive_source_column.py +0 -0
  178. {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
  179. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/83ada95132bf_delete_the_file_table.py +0 -0
  180. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/912bbcb77a6c_add_registrar_column.py +0 -0
  181. {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
  182. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/__init__.py +0 -0
  183. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/ade87195b0a0_base.py +0 -0
  184. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/bef7bcaac3f2_make_id_a_bigint.py +0 -0
  185. {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
  186. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/mysql/versions/e04e8301d1a2_deletion_of_the_mined_table.py +0 -0
  187. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/__init__.py +0 -0
  188. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/env.py +0 -0
  189. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/script.py.mako +0 -0
  190. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/versions/__init__.py +0 -0
  191. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/alembic/postgresql/versions/a32ac5d66eee_initial_version.py +0 -0
  192. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/infrastructure/__init__.py +0 -0
  193. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/data/infrastructure/dir_structure_production.json +0 -0
  194. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/__init__.py +0 -0
  195. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/__init__.py +0 -0
  196. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/base.py +0 -0
  197. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/mariadb.py +0 -0
  198. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/mysql.py +0 -0
  199. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/credential/postgresql.py +0 -0
  200. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/__init__.py +0 -0
  201. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/autocontinue.py +0 -0
  202. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/inactive.py +0 -0
  203. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/status.py +0 -0
  204. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/schemas/whois_record.py +0 -0
  205. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/session.py +0 -0
  206. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/sqlalchemy/__init__.py +0 -0
  207. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/sqlalchemy/all_schemas.py +0 -0
  208. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/database/sqlalchemy/base_schema.py +0 -0
  209. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/__init__.py +0 -0
  210. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/autocontinue/__init__.py +0 -0
  211. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/autocontinue/base.py +0 -0
  212. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/autocontinue/csv.py +0 -0
  213. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/autocontinue/sql.py +0 -0
  214. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/base.py +0 -0
  215. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/csv_base.py +0 -0
  216. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/db_base.py +0 -0
  217. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/iana.py +0 -0
  218. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/inactive/__init__.py +0 -0
  219. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/inactive/base.py +0 -0
  220. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/inactive/csv.py +0 -0
  221. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/inactive/sql.py +0 -0
  222. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/ipv4_reputation.py +0 -0
  223. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/public_suffix.py +0 -0
  224. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/sql_base.py +0 -0
  225. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/user_agent.py +0 -0
  226. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/whois/__init__.py +0 -0
  227. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/whois/base.py +0 -0
  228. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/whois/csv.py +0 -0
  229. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/dataset/whois/sql.py +0 -0
  230. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/__init__.py +0 -0
  231. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/base.py +0 -0
  232. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/exceptions.py +0 -0
  233. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/iana.py +0 -0
  234. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/ipv4_reputation.py +0 -0
  235. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/public_suffix.py +0 -0
  236. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/downloader/user_agents.py +0 -0
  237. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/exceptions.py +0 -0
  238. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/facility.py +0 -0
  239. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/factory.py +0 -0
  240. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/__init__.py +0 -0
  241. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/command.py +0 -0
  242. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/dict.py +0 -0
  243. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/directory.py +0 -0
  244. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/download.py +0 -0
  245. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/environment_variable.py +0 -0
  246. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/exceptions.py +0 -0
  247. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/file.py +0 -0
  248. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/hash.py +0 -0
  249. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/list.py +0 -0
  250. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/merge.py +0 -0
  251. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/helpers/regex.py +0 -0
  252. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/logger.py +0 -0
  253. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/__init__.py +0 -0
  254. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/dns/__init__.py +0 -0
  255. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/dns/nameserver.py +0 -0
  256. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/dns/query_tool.py +0 -0
  257. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/dns/resolver.py +0 -0
  258. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/http_status_code.py +0 -0
  259. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/netinfo/__init__.py +0 -0
  260. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/netinfo/address.py +0 -0
  261. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/netinfo/base.py +0 -0
  262. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/netinfo/hostbyaddr.py +0 -0
  263. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/platform.py +0 -0
  264. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/record/__init__.py +0 -0
  265. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/record/base.py +0 -0
  266. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/record/dns.py +0 -0
  267. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/record/whois.py +0 -0
  268. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/__init__.py +0 -0
  269. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/adapter/__init__.py +0 -0
  270. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/adapter/base.py +0 -0
  271. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/adapter/http.py +0 -0
  272. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/adapter/https.py +0 -0
  273. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/requests/requester.py +0 -0
  274. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/__init__.py +0 -0
  275. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/__init__.py +0 -0
  276. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/base.py +0 -0
  277. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/digit2digits.py +0 -0
  278. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/expiration_date.py +0 -0
  279. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/month2unified.py +0 -0
  280. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/converter/registrar.py +0 -0
  281. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/query/whois/query_tool.py +0 -0
  282. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/sessions.py +0 -0
  283. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/storage_facility.py +0 -0
  284. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/utils/__init__.py +0 -0
  285. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/utils/platform.py +0 -0
  286. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/utils/profile.py +0 -0
  287. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble/utils/version.py +0 -0
  288. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/dependency_links.txt +0 -0
  289. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/entry_points.txt +0 -0
  290. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/requires.txt +101 -101
  291. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/PyFunceble_dev.egg-info/top_level.txt +0 -0
  292. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/README.md +0 -0
  293. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.dev.txt +0 -0
  294. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.docs.txt +0 -0
  295. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.test.txt +0 -0
  296. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.txt +0 -0
  297. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/requirements.win.txt +0 -0
  298. {pyfunceble_dev-4.3.0a13 → pyfunceble_dev-4.3.0a14}/setup.cfg +0 -0
  299. {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.0a13
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-literate-nav~=0.6; extra == "docs"
41
- Requires-Dist: mkdocs-gen-files~=0.5; extra == "docs"
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-git-revision-date-localized-plugin~=1.2; extra == "docs"
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: mkdocs-material~=9.5; extra == "docs"
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: psycopg2-binary; extra == "psql-binary"
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: psycopg2-binary; extra == "postgresql-binary"
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: dnspython[DOH]~=2.6.0; extra == "full"
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: coverage; extra == "full"
141
- Requires-Dist: alembic; extra == "full"
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: mkdocs-git-authors-plugin~=0.9; extra == "full"
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: PyMySQL; extra == "full"
147
- Requires-Dist: colorama; extra == "full"
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: inflection; extra == "full"
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: mkdocs-section-index~=0.3; extra == "full"
153
- Requires-Dist: mkdocs-material~=9.5; extra == "full"
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: dnspython[DOH]~=2.6.0; extra == "all"
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: coverage; extra == "all"
174
- Requires-Dist: alembic; extra == "all"
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: mkdocs-git-authors-plugin~=0.9; extra == "all"
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: PyMySQL; extra == "all"
180
- Requires-Dist: colorama; extra == "all"
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: inflection; extra == "all"
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: mkdocs-section-index~=0.3; extra == "all"
186
- Requires-Dist: mkdocs-material~=9.5; extra == "all"
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
  ![image](https://raw.githubusercontent.com/PyFunceble/logo/dev/Green/HD/RM.png)
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
 
@@ -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