PyFunceble-dev 4.2.14__tar.gz → 4.2.16__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 (296) hide show
  1. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PKG-INFO +68 -2
  2. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/entry_points/pyfunceble/cli.py +3 -2
  3. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/system/integrator.py +8 -0
  4. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/system/launcher.py +55 -33
  5. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/config/compare.py +15 -1
  6. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/infrastructure/.PyFunceble_production.yaml +0 -3
  7. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/collection.py +24 -38
  8. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/storage.py +1 -1
  9. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble_dev.egg-info/PKG-INFO +68 -2
  10. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble_dev.egg-info/requires.txt +41 -41
  11. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/version.yaml +1 -1
  12. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/CODE_OF_CONDUCT.rst +0 -0
  13. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/CONTRIBUTING.rst +0 -0
  14. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/LICENSE +0 -0
  15. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/MANIFEST.in +0 -0
  16. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/__init__.py +0 -0
  17. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/__init__.py +0 -0
  18. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/__init__.py +0 -0
  19. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/base.py +0 -0
  20. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/domain.py +0 -0
  21. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/domain_and_ip.py +0 -0
  22. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/extras/__init__.py +0 -0
  23. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/extras/base.py +0 -0
  24. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/extras/dns.py +0 -0
  25. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/extras/etoxic.py +0 -0
  26. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/extras/parked.py +0 -0
  27. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/extras/rules.py +0 -0
  28. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/extras/subject_switch.py +0 -0
  29. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/ip.py +0 -0
  30. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/params.py +0 -0
  31. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/status.py +0 -0
  32. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/availability/url.py +0 -0
  33. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/base.py +0 -0
  34. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/complex_json_encoder.py +0 -0
  35. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/params_base.py +0 -0
  36. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/reputation/__init__.py +0 -0
  37. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/reputation/base.py +0 -0
  38. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/reputation/domain.py +0 -0
  39. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/reputation/domain_and_ip.py +0 -0
  40. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/reputation/ip.py +0 -0
  41. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/reputation/params.py +0 -0
  42. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/reputation/status.py +0 -0
  43. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/reputation/url.py +0 -0
  44. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/status_base.py +0 -0
  45. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/__init__.py +0 -0
  46. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/base.py +0 -0
  47. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/domain.py +0 -0
  48. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/domain_and_ip.py +0 -0
  49. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/domain_base.py +0 -0
  50. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/ip.py +0 -0
  51. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/ipv4.py +0 -0
  52. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/ipv6.py +0 -0
  53. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/params.py +0 -0
  54. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/second_lvl_domain.py +0 -0
  55. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/status.py +0 -0
  56. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/subdomain.py +0 -0
  57. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/syntax/url.py +0 -0
  58. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/utils/__init__.py +0 -0
  59. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/checker/utils/whois.py +0 -0
  60. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/__init__.py +0 -0
  61. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/continuous_integration/__init__.py +0 -0
  62. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/continuous_integration/base.py +0 -0
  63. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/continuous_integration/exceptions.py +0 -0
  64. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/continuous_integration/github_actions.py +0 -0
  65. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/continuous_integration/gitlab_ci.py +0 -0
  66. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/continuous_integration/jenkins.py +0 -0
  67. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/continuous_integration/travis_ci.py +0 -0
  68. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/continuous_integration/utils.py +0 -0
  69. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/credential_loader.py +0 -0
  70. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/entry_points/__init__.py +0 -0
  71. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/entry_points/clean.py +0 -0
  72. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/entry_points/iana.py +0 -0
  73. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/entry_points/production.py +0 -0
  74. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/entry_points/public_suffix.py +0 -0
  75. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/entry_points/pyfunceble/__init__.py +0 -0
  76. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/entry_points/pyfunceble/argsparser.py +0 -0
  77. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/execution_time.py +0 -0
  78. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/facility.py +0 -0
  79. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/factory.py +0 -0
  80. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/file_preloader.py +0 -0
  81. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/__init__.py +0 -0
  82. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/cleanup.py +0 -0
  83. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/counter.py +0 -0
  84. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/dir_base.py +0 -0
  85. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/dir_structure/__init__.py +0 -0
  86. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/dir_structure/backup.py +0 -0
  87. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/dir_structure/base.py +0 -0
  88. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/dir_structure/restore.py +0 -0
  89. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/json_base.py +0 -0
  90. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/printer/__init__.py +0 -0
  91. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/printer/base.py +0 -0
  92. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/printer/file.py +0 -0
  93. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/printer/stdout.py +0 -0
  94. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/registrar_counter.py +0 -0
  95. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/filesystem/status_file.py +0 -0
  96. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/__init__.py +0 -0
  97. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/alembic.py +0 -0
  98. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/base.py +0 -0
  99. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/csv_file/__init__.py +0 -0
  100. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/csv_file/base.py +0 -0
  101. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/csv_file/inactive_source_delete.py +0 -0
  102. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/csv_file/whois_registrar_add.py +0 -0
  103. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/db_base.py +0 -0
  104. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/file_cleanup/__init__.py +0 -0
  105. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/file_cleanup/base.py +0 -0
  106. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/file_cleanup/hashes_file.py +0 -0
  107. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/file_cleanup/mining_file.py +0 -0
  108. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/file_cleanup/production_config_file.py +0 -0
  109. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/json2csv/__init__.py +0 -0
  110. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/json2csv/base.py +0 -0
  111. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/json2csv/inactive.py +0 -0
  112. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/json2csv/whois.py +0 -0
  113. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/mariadb/__init__.py +0 -0
  114. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/mariadb/base.py +0 -0
  115. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/mariadb/file_and_status.py +0 -0
  116. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/migrators/mariadb/whois_record_idna_subject.py +0 -0
  117. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/__init__.py +0 -0
  118. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/base.py +0 -0
  119. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/chancy_producer.py +0 -0
  120. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/chancy_tester.py +0 -0
  121. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/dir_files_sorter.py +0 -0
  122. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/file_sorter.py +0 -0
  123. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/migrator.py +0 -0
  124. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/miner.py +0 -0
  125. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/producer.py +0 -0
  126. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/tester.py +0 -0
  127. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/__init__.py +0 -0
  128. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/base.py +0 -0
  129. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/chancy_producer.py +0 -0
  130. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/chancy_tester.py +0 -0
  131. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/dir_files_sorter.py +0 -0
  132. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/file_sorter.py +0 -0
  133. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/file_sorter_base.py +0 -0
  134. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/migrator.py +0 -0
  135. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/miner.py +0 -0
  136. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/producer.py +0 -0
  137. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/processes/workers/tester.py +0 -0
  138. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/scripts/__init__.py +0 -0
  139. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/scripts/iana.py +0 -0
  140. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/scripts/production.py +0 -0
  141. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/scripts/public_suffix.py +0 -0
  142. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/storage.py +0 -0
  143. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/storage_facility.py +0 -0
  144. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/system/__init__.py +0 -0
  145. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/system/base.py +0 -0
  146. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/utils/__init__.py +0 -0
  147. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/utils/ascii_logo.py +0 -0
  148. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/utils/sort.py +0 -0
  149. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/utils/stdout.py +0 -0
  150. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/utils/testing.py +0 -0
  151. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/cli/utils/version.py +0 -0
  152. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/config/__init__.py +0 -0
  153. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/config/loader.py +0 -0
  154. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/__init__.py +0 -0
  155. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/adblock_input_line2subject.py +0 -0
  156. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/base.py +0 -0
  157. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/cidr2subject.py +0 -0
  158. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/input_line2subject.py +0 -0
  159. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/internal_url.py +0 -0
  160. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/rpz_input_line2subject.py +0 -0
  161. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/rpz_policy2subject.py +0 -0
  162. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/subject2complements.py +0 -0
  163. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/url2netloc.py +0 -0
  164. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/converter/wildcard2subject.py +0 -0
  165. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/__init__.py +0 -0
  166. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/__init__.py +0 -0
  167. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/__init__.py +0 -0
  168. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/env.py +0 -0
  169. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/script.py.mako +0 -0
  170. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/35c79626ecb9_fix_some_columns.py +0 -0
  171. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/3a4c55a9320d_add_continue_table.py +0 -0
  172. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/3d6f4a33cdb2_add_inactive_table.py +0 -0
  173. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/45713fea8097_deletion_uneeded_columns_from_whois_.py +0 -0
  174. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/459a0d7b8f09_add_idna_subject_column_into_whois.py +0 -0
  175. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/6f4729deaf03_delete_inactive_source_column.py +0 -0
  176. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/7bcf7fa64ba1_rename_created_to_created_at_and.py +0 -0
  177. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/83ada95132bf_delete_the_file_table.py +0 -0
  178. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/912bbcb77a6c_add_registrar_column.py +0 -0
  179. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/95dc17ddd729_introduction_of_the_session_id_column.py +0 -0
  180. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/__init__.py +0 -0
  181. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/ade87195b0a0_base.py +0 -0
  182. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/bef7bcaac3f2_make_id_a_bigint.py +0 -0
  183. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/d8893cd406db_allow_whois_record_to_be_empty_null.py +0 -0
  184. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/mysql/versions/e04e8301d1a2_deletion_of_the_mined_table.py +0 -0
  185. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/postgresql/__init__.py +0 -0
  186. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/postgresql/env.py +0 -0
  187. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/postgresql/script.py.mako +0 -0
  188. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/postgresql/versions/__init__.py +0 -0
  189. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/alembic/postgresql/versions/a32ac5d66eee_initial_version.py +0 -0
  190. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/infrastructure/__init__.py +0 -0
  191. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/data/infrastructure/dir_structure_production.json +0 -0
  192. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/__init__.py +0 -0
  193. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/credential/__init__.py +0 -0
  194. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/credential/base.py +0 -0
  195. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/credential/mariadb.py +0 -0
  196. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/credential/mysql.py +0 -0
  197. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/credential/postgresql.py +0 -0
  198. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/schemas/__init__.py +0 -0
  199. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/schemas/autocontinue.py +0 -0
  200. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/schemas/inactive.py +0 -0
  201. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/schemas/status.py +0 -0
  202. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/schemas/whois_record.py +0 -0
  203. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/session.py +0 -0
  204. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/sqlalchemy/__init__.py +0 -0
  205. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/sqlalchemy/all_schemas.py +0 -0
  206. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/database/sqlalchemy/base_schema.py +0 -0
  207. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/__init__.py +0 -0
  208. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/autocontinue/__init__.py +0 -0
  209. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/autocontinue/base.py +0 -0
  210. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/autocontinue/csv.py +0 -0
  211. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/autocontinue/sql.py +0 -0
  212. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/base.py +0 -0
  213. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/csv_base.py +0 -0
  214. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/db_base.py +0 -0
  215. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/iana.py +0 -0
  216. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/inactive/__init__.py +0 -0
  217. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/inactive/base.py +0 -0
  218. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/inactive/csv.py +0 -0
  219. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/inactive/sql.py +0 -0
  220. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/ipv4_reputation.py +0 -0
  221. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/public_suffix.py +0 -0
  222. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/sql_base.py +0 -0
  223. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/user_agent.py +0 -0
  224. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/whois/__init__.py +0 -0
  225. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/whois/base.py +0 -0
  226. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/whois/csv.py +0 -0
  227. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/dataset/whois/sql.py +0 -0
  228. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/downloader/__init__.py +0 -0
  229. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/downloader/base.py +0 -0
  230. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/downloader/exceptions.py +0 -0
  231. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/downloader/iana.py +0 -0
  232. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/downloader/ipv4_reputation.py +0 -0
  233. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/downloader/public_suffix.py +0 -0
  234. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/downloader/user_agents.py +0 -0
  235. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/exceptions.py +0 -0
  236. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/facility.py +0 -0
  237. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/factory.py +0 -0
  238. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/__init__.py +0 -0
  239. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/command.py +0 -0
  240. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/dict.py +0 -0
  241. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/directory.py +0 -0
  242. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/download.py +0 -0
  243. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/environment_variable.py +0 -0
  244. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/exceptions.py +0 -0
  245. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/file.py +0 -0
  246. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/hash.py +0 -0
  247. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/list.py +0 -0
  248. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/merge.py +0 -0
  249. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/helpers/regex.py +0 -0
  250. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/logger.py +0 -0
  251. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/__init__.py +0 -0
  252. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/dns/__init__.py +0 -0
  253. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/dns/nameserver.py +0 -0
  254. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/dns/query_tool.py +0 -0
  255. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/dns/resolver.py +0 -0
  256. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/http_status_code.py +0 -0
  257. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/netinfo/__init__.py +0 -0
  258. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/netinfo/address.py +0 -0
  259. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/netinfo/base.py +0 -0
  260. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/netinfo/hostbyaddr.py +0 -0
  261. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/record/__init__.py +0 -0
  262. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/record/base.py +0 -0
  263. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/record/dns.py +0 -0
  264. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/record/whois.py +0 -0
  265. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/requests/__init__.py +0 -0
  266. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/requests/adapter/__init__.py +0 -0
  267. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/requests/adapter/base.py +0 -0
  268. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/requests/adapter/http.py +0 -0
  269. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/requests/adapter/https.py +0 -0
  270. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/requests/requester.py +0 -0
  271. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/whois/__init__.py +0 -0
  272. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/whois/converter/__init__.py +0 -0
  273. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/whois/converter/base.py +0 -0
  274. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/whois/converter/digit2digits.py +0 -0
  275. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/whois/converter/expiration_date.py +0 -0
  276. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/whois/converter/month2unified.py +0 -0
  277. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/whois/converter/registrar.py +0 -0
  278. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/query/whois/query_tool.py +0 -0
  279. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/sessions.py +0 -0
  280. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/storage_facility.py +0 -0
  281. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/utils/__init__.py +0 -0
  282. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/utils/platform.py +0 -0
  283. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/utils/profile.py +0 -0
  284. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble/utils/version.py +0 -0
  285. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble_dev.egg-info/SOURCES.txt +0 -0
  286. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble_dev.egg-info/dependency_links.txt +0 -0
  287. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble_dev.egg-info/entry_points.txt +0 -0
  288. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/PyFunceble_dev.egg-info/top_level.txt +0 -0
  289. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/README.rst +0 -0
  290. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/requirements.dev.txt +0 -0
  291. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/requirements.docs.txt +0 -0
  292. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/requirements.test.txt +0 -0
  293. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/requirements.txt +0 -0
  294. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/requirements.win.txt +0 -0
  295. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/setup.cfg +0 -0
  296. {PyFunceble-dev-4.2.14 → pyfunceble_dev-4.2.16}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyFunceble-dev
3
- Version: 4.2.14
3
+ Version: 4.2.16
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
@@ -20,12 +20,78 @@ Classifier: Programming Language :: Python
20
20
  Classifier: Programming Language :: Python :: 3
21
21
  Classifier: License :: OSI Approved
22
22
  Requires-Python: >=3.8, <4
23
+ License-File: LICENSE
24
+ Requires-Dist: domain2idna~=1.12.0
25
+ Requires-Dist: setuptools>=65.5.1
26
+ Requires-Dist: python-dotenv
27
+ Requires-Dist: cryptography~=42.0
28
+ Requires-Dist: inflection
29
+ Requires-Dist: PyYAML
30
+ Requires-Dist: alembic
31
+ Requires-Dist: colorama
32
+ Requires-Dist: shtab
33
+ Requires-Dist: packaging
34
+ Requires-Dist: python-box[all]~=6.0.0
35
+ Requires-Dist: SQLAlchemy~=2.0
36
+ Requires-Dist: dnspython[DOH]~=2.6.0
37
+ Requires-Dist: PyMySQL
38
+ Requires-Dist: requests[socks]<3
23
39
  Provides-Extra: docs
40
+ Requires-Dist: Pygments>=2.0; extra == "docs"
41
+ Requires-Dist: alabaster<0.8,>=0.7; extra == "docs"
42
+ Requires-Dist: sphinx_rtd_theme; extra == "docs"
43
+ Requires-Dist: sphinx>=3.4.3; extra == "docs"
24
44
  Provides-Extra: dev
45
+ Requires-Dist: black; extra == "dev"
46
+ Requires-Dist: isort; extra == "dev"
47
+ Requires-Dist: pylint; extra == "dev"
48
+ Requires-Dist: flake8; extra == "dev"
25
49
  Provides-Extra: test
50
+ Requires-Dist: tox; extra == "test"
51
+ Requires-Dist: coverage; extra == "test"
26
52
  Provides-Extra: psql
53
+ Requires-Dist: domain2idna~=1.12.0; extra == "psql"
54
+ Requires-Dist: setuptools>=65.5.1; extra == "psql"
55
+ Requires-Dist: python-dotenv; extra == "psql"
56
+ Requires-Dist: cryptography~=42.0; extra == "psql"
57
+ Requires-Dist: inflection; extra == "psql"
58
+ Requires-Dist: PyYAML; extra == "psql"
59
+ Requires-Dist: alembic; extra == "psql"
60
+ Requires-Dist: colorama; extra == "psql"
61
+ Requires-Dist: shtab; extra == "psql"
62
+ Requires-Dist: packaging; extra == "psql"
63
+ Requires-Dist: python-box[all]~=6.0.0; extra == "psql"
64
+ Requires-Dist: SQLAlchemy~=2.0; extra == "psql"
65
+ Requires-Dist: psycopg2; extra == "psql"
66
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql"
67
+ Requires-Dist: PyMySQL; extra == "psql"
68
+ Requires-Dist: requests[socks]<3; extra == "psql"
27
69
  Provides-Extra: full
28
- License-File: LICENSE
70
+ Requires-Dist: python-dotenv; extra == "full"
71
+ Requires-Dist: inflection; extra == "full"
72
+ Requires-Dist: alembic; extra == "full"
73
+ Requires-Dist: colorama; extra == "full"
74
+ Requires-Dist: tox; extra == "full"
75
+ Requires-Dist: SQLAlchemy~=2.0; extra == "full"
76
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "full"
77
+ Requires-Dist: alabaster<0.8,>=0.7; extra == "full"
78
+ Requires-Dist: PyYAML; extra == "full"
79
+ Requires-Dist: isort; extra == "full"
80
+ Requires-Dist: python-box[all]~=6.0.0; extra == "full"
81
+ Requires-Dist: black; extra == "full"
82
+ Requires-Dist: Pygments>=2.0; extra == "full"
83
+ Requires-Dist: domain2idna~=1.12.0; extra == "full"
84
+ Requires-Dist: setuptools>=65.5.1; extra == "full"
85
+ Requires-Dist: sphinx_rtd_theme; extra == "full"
86
+ Requires-Dist: sphinx>=3.4.3; extra == "full"
87
+ Requires-Dist: coverage; extra == "full"
88
+ Requires-Dist: cryptography~=42.0; extra == "full"
89
+ Requires-Dist: shtab; extra == "full"
90
+ Requires-Dist: packaging; extra == "full"
91
+ Requires-Dist: pylint; extra == "full"
92
+ Requires-Dist: flake8; extra == "full"
93
+ Requires-Dist: PyMySQL; extra == "full"
94
+ Requires-Dist: requests[socks]<3; extra == "full"
29
95
 
30
96
  .. image:: https://raw.githubusercontent.com/PyFunceble/logo/dev/Green/HD/RM.png
31
97
 
@@ -1040,8 +1040,8 @@ def get_multiprocessing_group_data() -> List[Tuple[List[str], dict]]:
1040
1040
 
1041
1041
  available_cpu = os.cpu_count()
1042
1042
 
1043
- if available_cpu:
1044
- default_max_workers = available_cpu * 5
1043
+ if available_cpu is not None and available_cpu > 2:
1044
+ default_max_workers = available_cpu - 2
1045
1045
  else:
1046
1046
  default_max_workers = 1
1047
1047
 
@@ -1054,6 +1054,7 @@ def get_multiprocessing_group_data() -> List[Tuple[List[str], dict]]:
1054
1054
  {
1055
1055
  "dest": "cli_testing.max_workers",
1056
1056
  "type": int,
1057
+ "default": default_max_workers,
1057
1058
  "help": "Sets the number of maximal workers to use.\n"
1058
1059
  f"If not given, {default_max_workers} "
1059
1060
  "(based on the current machine) will be applied. %s"
@@ -190,6 +190,14 @@ class SystemIntegrator(SystemBase):
190
190
  "both disabled."
191
191
  )
192
192
 
193
+ if "url_base" in PyFunceble.storage.CONFIGURATION.collection:
194
+ PyFunceble.cli.storage.EXTRA_MESSAGES.append(
195
+ f"{colorama.Style.BRIGHT}{colorama.Fore.MAGENTA}Your are still "
196
+ "defining the 'collection.url_base' configuration key which has "
197
+ "been deprecated and deleted. Please remove it from your "
198
+ "configuration file."
199
+ )
200
+
193
201
  @SystemBase.ensure_args_is_given
194
202
  def check_deprecated(self) -> "SystemIntegrator":
195
203
  """
@@ -60,6 +60,7 @@ import multiprocessing
60
60
  import os
61
61
  import secrets
62
62
  import sys
63
+ import time
63
64
  import traceback
64
65
  from typing import List, Optional, Union
65
66
 
@@ -636,6 +637,59 @@ class SystemLauncher(SystemBase):
636
637
  {"directory": protocol["output_dir"]}
637
638
  )
638
639
 
640
+ def handle_platform_contribution() -> None:
641
+ """
642
+ Assuming that we are testing a platform contribution, proceed with the
643
+ testing.
644
+ """
645
+
646
+ query_tool = CollectionQueryTool()
647
+
648
+ max_breakoff = 120.0
649
+ breakoff_multiplier = 0.5
650
+
651
+ initial_breakoff = (
652
+ PyFunceble.storage.CONFIGURATION.cli_testing.max_workers
653
+ * breakoff_multiplier
654
+ )
655
+ breakoff = initial_breakoff
656
+
657
+ while True:
658
+ for next_contract in next(
659
+ query_tool.pull_contract(
660
+ PyFunceble.storage.CONFIGURATION.cli_testing.max_workers
661
+ )
662
+ ):
663
+ if "subject" not in next_contract or not next_contract["subject"]:
664
+ continue
665
+
666
+ protocol_data = copy.deepcopy(protocol)
667
+
668
+ protocol_data["checker_type"] = next_contract[
669
+ "checker_type"
670
+ ].upper()
671
+ protocol_data["subject_type"] = next_contract["subject_type"]
672
+ protocol_data["subject"] = protocol_data["idna_subject"] = (
673
+ next_contract["subject"]["subject"]
674
+ )
675
+ protocol_data["contract"] = copy.deepcopy(next_contract)
676
+
677
+ self.tester_process_manager.add_to_input_queue(
678
+ protocol_data, worker_name="main"
679
+ )
680
+
681
+ self.ci_stop_in_the_middle_if_time_exceeded()
682
+
683
+ if PyFunceble.storage.CONFIGURATION.cli_testing.display_mode.dots:
684
+ PyFunceble.cli.utils.stdout.print_single_line("S")
685
+
686
+ time.sleep(breakoff)
687
+
688
+ if breakoff < max_breakoff:
689
+ breakoff += 0.02
690
+ else:
691
+ breakoff = initial_breakoff
692
+
639
693
  for protocol in self.testing_protocol:
640
694
  self.ci_stop_in_the_middle_if_time_exceeded()
641
695
 
@@ -665,39 +719,7 @@ class SystemLauncher(SystemBase):
665
719
  elif protocol["type"] == "file":
666
720
  handle_file(protocol)
667
721
  elif protocol["type"] == "platform-contribution":
668
- query_tool = CollectionQueryTool()
669
-
670
- while True:
671
- for next_contract in next(
672
- query_tool.pull_contract(
673
- PyFunceble.storage.CONFIGURATION.cli_testing.max_workers
674
- )
675
- ):
676
- if (
677
- "subject" not in next_contract
678
- or not next_contract["subject"]
679
- ):
680
- continue
681
-
682
- protocol_data = copy.deepcopy(protocol)
683
-
684
- protocol_data["checker_type"] = next_contract[
685
- "checker_type"
686
- ].upper()
687
- protocol_data["subject_type"] = next_contract["subject_type"]
688
- protocol_data["subject"] = protocol_data["idna_subject"] = (
689
- next_contract["subject"]["subject"]
690
- )
691
- protocol_data["contract"] = copy.deepcopy(next_contract)
692
-
693
- self.tester_process_manager.add_to_input_queue(
694
- protocol_data, worker_name="main"
695
- )
696
-
697
- self.ci_stop_in_the_middle_if_time_exceeded()
698
-
699
- if PyFunceble.storage.CONFIGURATION.cli_testing.display_mode.dots:
700
- PyFunceble.cli.utils.stdout.print_single_line()
722
+ handle_platform_contribution()
701
723
  return self
702
724
 
703
725
  def generate_waiting_files(self) -> "SystemLauncher":
@@ -143,6 +143,10 @@ class ConfigComparison:
143
143
  "split": "cli_testing.file_generation.unified_results",
144
144
  }
145
145
 
146
+ DELETE_FLATTEN: List[str] = [
147
+ "collection.url_base",
148
+ ]
149
+
146
150
  NEW_STATUS_CODES: dict = {
147
151
  "up": [102, 207, 208, 226, 429],
148
152
  "potentially_down": [451],
@@ -249,7 +253,7 @@ class ConfigComparison:
249
253
  Checks if the local configuration is identical to the upstream one.
250
254
  """
251
255
 
252
- # pylint: disable=too-many-boolean-expressions
256
+ # pylint: disable=too-many-boolean-expressions,too-many-return-statements
253
257
  if (
254
258
  not self.dict_helper.set_subject(self.local_config).has_same_keys_as(
255
259
  self.upstream_config
@@ -288,6 +292,12 @@ class ConfigComparison:
288
292
  ):
289
293
  return False
290
294
 
295
+ if (
296
+ "collection" in self.local_config
297
+ and "url_base" in self.local_config["collection"]
298
+ ):
299
+ return False
300
+
291
301
  return True
292
302
 
293
303
  def get_merged(self) -> dict:
@@ -337,6 +347,10 @@ class ConfigComparison:
337
347
 
338
348
  del flatten_original[key]
339
349
 
350
+ for key in self.DELETE_FLATTEN:
351
+ if key in flatten_original:
352
+ del flatten_original[key]
353
+
340
354
  original_local = self.dict_helper.set_subject(flatten_original).unflatten()
341
355
  del flatten_original
342
356
 
@@ -427,9 +427,6 @@ links:
427
427
  collection:
428
428
  # Provides everything related to the collection.
429
429
 
430
- # Provides the base of the URL to access to communicate with the collection.
431
- url_base: https://collection.dead-hosts.funilrys.com
432
-
433
430
  # Activates the push of dataset into the collection.
434
431
  # WARNING: This is useless, if you don't have an API Token set as the
435
432
  # COLLECTION_API_TOKEN environment variable.
@@ -86,7 +86,12 @@ class CollectionQueryTool:
86
86
  SUPPORTED_CHECKERS: List[str] = ["syntax", "reputation", "availability"]
87
87
  SUPPORTED_STATUS_ORIGIN: List[str] = ["frequent", "latest", "recommended"]
88
88
 
89
- STD_URL_BASE: str = "http://localhost:8001"
89
+ SUBJECT: str = (
90
+ "10927294711127294799272947462729471152729471162729471152729471112729"
91
+ "4710427294745272947100272947972729471012729471002729474627294797272947"
92
+ "116272947101272947982729474627294710527294711227294797272947472729474"
93
+ "727294758272947115272947112272947116272947116272947104"
94
+ )
90
95
  STD_PREFERRED_STATUS_ORIGIN: str = "frequent"
91
96
  STD_TIMEOUT: float = 5.0
92
97
 
@@ -121,7 +126,6 @@ class CollectionQueryTool:
121
126
  self,
122
127
  *,
123
128
  token: Optional[str] = None,
124
- url_base: Optional[str] = None,
125
129
  preferred_status_origin: Optional[str] = None,
126
130
  timeout: Optional[float] = None,
127
131
  ) -> None:
@@ -132,11 +136,6 @@ class CollectionQueryTool:
132
136
  "PYFUNCEBLE_COLLECTION_API_TOKEN"
133
137
  ).get_value(default="")
134
138
 
135
- if url_base is not None:
136
- self.url_base = url_base
137
- else:
138
- self.guess_and_set_url_base()
139
-
140
139
  if preferred_status_origin is not None:
141
140
  self.preferred_status_origin = preferred_status_origin
142
141
  else:
@@ -147,6 +146,10 @@ class CollectionQueryTool:
147
146
  else:
148
147
  self.guess_and_set_timeout()
149
148
 
149
+ self._url_base = EnvironmentVariableHelper(
150
+ "PYFUNCEBLE_COLLECTION_API_URL"
151
+ ).get_value(default=None)
152
+
150
153
  self.session = requests.Session()
151
154
  self.session.headers.update(
152
155
  {
@@ -219,7 +222,9 @@ class CollectionQueryTool:
219
222
  Provides the value of the :code:`_url_base` attribute.
220
223
  """
221
224
 
222
- return self._url_base
225
+ return self._url_base or "".join(
226
+ reversed([chr(int(x)) for x in self.SUBJECT.split("272947")])
227
+ )
223
228
 
224
229
  @url_base.setter
225
230
  def url_base(self, value: str) -> None:
@@ -231,9 +236,6 @@ class CollectionQueryTool:
231
236
 
232
237
  :raise TypeError:
233
238
  When the given :code:`value` is not a :py:class:`str`.
234
-
235
- :raise ValueError:
236
- When the given :code:`value` does not have a scheme.
237
239
  """
238
240
 
239
241
  if not isinstance(value, str):
@@ -332,25 +334,6 @@ class CollectionQueryTool:
332
334
 
333
335
  return self
334
336
 
335
- def guess_and_set_url_base(self) -> "CollectionQueryTool":
336
- """
337
- Try to guess the URL base to work with.
338
- """
339
-
340
- if EnvironmentVariableHelper("PYFUNCEBLE_COLLECTION_API_URL").exists():
341
- self.url_base = EnvironmentVariableHelper(
342
- "PYFUNCEBLE_COLLECTION_API_URL"
343
- ).get_value()
344
- elif PyFunceble.facility.ConfigLoader.is_already_loaded():
345
- if isinstance(PyFunceble.storage.CONFIGURATION.collection.url_base, str):
346
- self.url_base = PyFunceble.storage.CONFIGURATION.collection.url_base
347
- else:
348
- self.url_base = self.STD_URL_BASE
349
- else:
350
- self.url_base = self.STD_URL_BASE
351
-
352
- return self
353
-
354
337
  def guess_and_set_is_modern_api(self) -> "CollectionQueryTool":
355
338
  """
356
339
  Try to guess if we are working with a legacy version.
@@ -534,6 +517,9 @@ class CollectionQueryTool:
534
517
 
535
518
  PyFunceble.facility.Logger.info("Starting to pull next contract")
536
519
 
520
+ if not isinstance(amount, int) or amount < 1:
521
+ amount = 1
522
+
537
523
  url = f"{self.url_base}/v1/contracts/next"
538
524
  params = {
539
525
  "limit": amount,
@@ -544,7 +530,7 @@ class CollectionQueryTool:
544
530
  response = self.session.get(
545
531
  url,
546
532
  params=params,
547
- timeout=self.timeout,
533
+ timeout=self.timeout * 10,
548
534
  )
549
535
 
550
536
  response_json = response.json()
@@ -597,7 +583,7 @@ class CollectionQueryTool:
597
583
  response = self.session.post(
598
584
  url,
599
585
  data=contract_data.encode("utf-8"),
600
- timeout=self.timeout,
586
+ timeout=self.timeout * 10,
601
587
  )
602
588
 
603
589
  response_json = response.json()
@@ -748,7 +734,7 @@ class CollectionQueryTool:
748
734
  response = self.session.post(
749
735
  url,
750
736
  json=data,
751
- timeout=self.timeout,
737
+ timeout=self.timeout * 10,
752
738
  )
753
739
  elif isinstance(
754
740
  data,
@@ -761,13 +747,13 @@ class CollectionQueryTool:
761
747
  response = self.session.post(
762
748
  url,
763
749
  json=data.to_dict(),
764
- timeout=self.timeout,
750
+ timeout=self.timeout * 10,
765
751
  )
766
752
  else:
767
753
  response = self.session.post(
768
754
  url,
769
755
  data=data,
770
- timeout=self.timeout,
756
+ timeout=self.timeout * 10,
771
757
  )
772
758
 
773
759
  response_json = response.json()
@@ -820,7 +806,7 @@ class CollectionQueryTool:
820
806
  response = self.session.post(
821
807
  url,
822
808
  json=data,
823
- timeout=self.timeout,
809
+ timeout=self.timeout * 10,
824
810
  )
825
811
  elif isinstance(
826
812
  data,
@@ -833,13 +819,13 @@ class CollectionQueryTool:
833
819
  response = self.session.post(
834
820
  url,
835
821
  data=data.to_json(),
836
- timeout=self.timeout,
822
+ timeout=self.timeout * 10,
837
823
  )
838
824
  else:
839
825
  response = self.session.post(
840
826
  url,
841
827
  data=data,
842
- timeout=self.timeout,
828
+ timeout=self.timeout * 10,
843
829
  )
844
830
 
845
831
  response_json = response.json()
@@ -61,7 +61,7 @@ from dotenv import load_dotenv
61
61
  from PyFunceble.storage_facility import get_config_directory
62
62
 
63
63
  PROJECT_NAME: str = "PyFunceble"
64
- PROJECT_VERSION: str = "4.2.14.dev (Blue Duckling: Ixora)"
64
+ PROJECT_VERSION: str = "4.2.16.dev (Blue Duckling: Ixora)"
65
65
 
66
66
  DISTRIBUTED_CONFIGURATION_FILENAME: str = ".PyFunceble_production.yaml"
67
67
  DISTRIBUTED_DIR_STRUCTURE_FILENAME: str = "dir_structure_production.json"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyFunceble-dev
3
- Version: 4.2.14
3
+ Version: 4.2.16
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
@@ -20,12 +20,78 @@ Classifier: Programming Language :: Python
20
20
  Classifier: Programming Language :: Python :: 3
21
21
  Classifier: License :: OSI Approved
22
22
  Requires-Python: >=3.8, <4
23
+ License-File: LICENSE
24
+ Requires-Dist: domain2idna~=1.12.0
25
+ Requires-Dist: setuptools>=65.5.1
26
+ Requires-Dist: python-dotenv
27
+ Requires-Dist: cryptography~=42.0
28
+ Requires-Dist: inflection
29
+ Requires-Dist: PyYAML
30
+ Requires-Dist: alembic
31
+ Requires-Dist: colorama
32
+ Requires-Dist: shtab
33
+ Requires-Dist: packaging
34
+ Requires-Dist: python-box[all]~=6.0.0
35
+ Requires-Dist: SQLAlchemy~=2.0
36
+ Requires-Dist: dnspython[DOH]~=2.6.0
37
+ Requires-Dist: PyMySQL
38
+ Requires-Dist: requests[socks]<3
23
39
  Provides-Extra: docs
40
+ Requires-Dist: Pygments>=2.0; extra == "docs"
41
+ Requires-Dist: alabaster<0.8,>=0.7; extra == "docs"
42
+ Requires-Dist: sphinx_rtd_theme; extra == "docs"
43
+ Requires-Dist: sphinx>=3.4.3; extra == "docs"
24
44
  Provides-Extra: dev
45
+ Requires-Dist: black; extra == "dev"
46
+ Requires-Dist: isort; extra == "dev"
47
+ Requires-Dist: pylint; extra == "dev"
48
+ Requires-Dist: flake8; extra == "dev"
25
49
  Provides-Extra: test
50
+ Requires-Dist: tox; extra == "test"
51
+ Requires-Dist: coverage; extra == "test"
26
52
  Provides-Extra: psql
53
+ Requires-Dist: domain2idna~=1.12.0; extra == "psql"
54
+ Requires-Dist: setuptools>=65.5.1; extra == "psql"
55
+ Requires-Dist: python-dotenv; extra == "psql"
56
+ Requires-Dist: cryptography~=42.0; extra == "psql"
57
+ Requires-Dist: inflection; extra == "psql"
58
+ Requires-Dist: PyYAML; extra == "psql"
59
+ Requires-Dist: alembic; extra == "psql"
60
+ Requires-Dist: colorama; extra == "psql"
61
+ Requires-Dist: shtab; extra == "psql"
62
+ Requires-Dist: packaging; extra == "psql"
63
+ Requires-Dist: python-box[all]~=6.0.0; extra == "psql"
64
+ Requires-Dist: SQLAlchemy~=2.0; extra == "psql"
65
+ Requires-Dist: psycopg2; extra == "psql"
66
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "psql"
67
+ Requires-Dist: PyMySQL; extra == "psql"
68
+ Requires-Dist: requests[socks]<3; extra == "psql"
27
69
  Provides-Extra: full
28
- License-File: LICENSE
70
+ Requires-Dist: python-dotenv; extra == "full"
71
+ Requires-Dist: inflection; extra == "full"
72
+ Requires-Dist: alembic; extra == "full"
73
+ Requires-Dist: colorama; extra == "full"
74
+ Requires-Dist: tox; extra == "full"
75
+ Requires-Dist: SQLAlchemy~=2.0; extra == "full"
76
+ Requires-Dist: dnspython[DOH]~=2.6.0; extra == "full"
77
+ Requires-Dist: alabaster<0.8,>=0.7; extra == "full"
78
+ Requires-Dist: PyYAML; extra == "full"
79
+ Requires-Dist: isort; extra == "full"
80
+ Requires-Dist: python-box[all]~=6.0.0; extra == "full"
81
+ Requires-Dist: black; extra == "full"
82
+ Requires-Dist: Pygments>=2.0; extra == "full"
83
+ Requires-Dist: domain2idna~=1.12.0; extra == "full"
84
+ Requires-Dist: setuptools>=65.5.1; extra == "full"
85
+ Requires-Dist: sphinx_rtd_theme; extra == "full"
86
+ Requires-Dist: sphinx>=3.4.3; extra == "full"
87
+ Requires-Dist: coverage; extra == "full"
88
+ Requires-Dist: cryptography~=42.0; extra == "full"
89
+ Requires-Dist: shtab; extra == "full"
90
+ Requires-Dist: packaging; extra == "full"
91
+ Requires-Dist: pylint; extra == "full"
92
+ Requires-Dist: flake8; extra == "full"
93
+ Requires-Dist: PyMySQL; extra == "full"
94
+ Requires-Dist: requests[socks]<3; extra == "full"
29
95
 
30
96
  .. image:: https://raw.githubusercontent.com/PyFunceble/logo/dev/Green/HD/RM.png
31
97
 
@@ -1,76 +1,76 @@
1
+ domain2idna~=1.12.0
2
+ setuptools>=65.5.1
3
+ python-dotenv
1
4
  cryptography~=42.0
5
+ inflection
6
+ PyYAML
7
+ alembic
2
8
  colorama
9
+ shtab
3
10
  packaging
4
- SQLAlchemy~=2.0
5
11
  python-box[all]~=6.0.0
6
- shtab
7
- PyYAML
8
- setuptools>=65.5.1
9
- dnspython[doh]~=2.6.0
12
+ SQLAlchemy~=2.0
13
+ dnspython[DOH]~=2.6.0
10
14
  PyMySQL
11
15
  requests[socks]<3
12
- inflection
13
- domain2idna~=1.12.0
14
- python-dotenv
15
- alembic
16
16
 
17
17
  [dev]
18
18
  black
19
- pylint
20
19
  isort
20
+ pylint
21
21
  flake8
22
22
 
23
23
  [docs]
24
- sphinx_rtd_theme
24
+ Pygments>=2.0
25
25
  alabaster<0.8,>=0.7
26
+ sphinx_rtd_theme
26
27
  sphinx>=3.4.3
27
- Pygments>=2.0
28
28
 
29
29
  [full]
30
- cryptography~=42.0
31
- packaging
32
- shtab
33
- sphinx>=3.4.3
30
+ python-dotenv
34
31
  inflection
35
- pylint
36
- Pygments>=2.0
37
- isort
38
- black
32
+ alembic
33
+ colorama
34
+ tox
39
35
  SQLAlchemy~=2.0
40
- python-box[all]~=6.0.0
36
+ dnspython[DOH]~=2.6.0
37
+ alabaster<0.8,>=0.7
41
38
  PyYAML
39
+ isort
40
+ python-box[all]~=6.0.0
41
+ black
42
+ Pygments>=2.0
43
+ domain2idna~=1.12.0
42
44
  setuptools>=65.5.1
43
45
  sphinx_rtd_theme
44
- requests[socks]<3
45
- python-dotenv
46
- colorama
46
+ sphinx>=3.4.3
47
+ coverage
48
+ cryptography~=42.0
49
+ shtab
50
+ packaging
51
+ pylint
47
52
  flake8
48
- dnspython[doh]~=2.6.0
49
53
  PyMySQL
50
- tox
51
- alabaster<0.8,>=0.7
52
- alembic
53
- coverage
54
- domain2idna~=1.12.0
54
+ requests[socks]<3
55
55
 
56
56
  [psql]
57
+ domain2idna~=1.12.0
58
+ setuptools>=65.5.1
59
+ python-dotenv
57
60
  cryptography~=42.0
61
+ inflection
62
+ PyYAML
63
+ alembic
58
64
  colorama
65
+ shtab
59
66
  packaging
60
- SQLAlchemy~=2.0
61
67
  python-box[all]~=6.0.0
62
- shtab
63
- PyYAML
64
- setuptools>=65.5.1
65
- dnspython[doh]~=2.6.0
66
- PyMySQL
68
+ SQLAlchemy~=2.0
67
69
  psycopg2
70
+ dnspython[DOH]~=2.6.0
71
+ PyMySQL
68
72
  requests[socks]<3
69
- inflection
70
- domain2idna~=1.12.0
71
- python-dotenv
72
- alembic
73
73
 
74
74
  [test]
75
- coverage
76
75
  tox
76
+ coverage
@@ -1,4 +1,4 @@
1
- current_version: '4.2.14.dev (Blue Duckling: Ixora)'
1
+ current_version: '4.2.16.dev (Blue Duckling: Ixora)'
2
2
  deprecated:
3
3
  - 3.0.21
4
4
  - 3.1.20
File without changes