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.
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