evolver-tools 21.0.0__tar.gz → 22.0.0__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 (263) hide show
  1. {evolver_tools-21.0.0/src/evolver_tools.egg-info → evolver_tools-22.0.0}/PKG-INFO +2 -2
  2. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/pyproject.toml +2 -2
  3. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/cli.py +1 -1
  4. evolver_tools-22.0.0/src/evolver_tools/vendor/crc_check.py +77 -0
  5. evolver_tools-22.0.0/src/evolver_tools/vendor/date_diff.py +99 -0
  6. evolver_tools-22.0.0/src/evolver_tools/vendor/env_template.py +81 -0
  7. evolver_tools-22.0.0/src/evolver_tools/vendor/math_eval.py +86 -0
  8. evolver_tools-22.0.0/src/evolver_tools/vendor/uuid_gen.py +77 -0
  9. {evolver_tools-21.0.0 → evolver_tools-22.0.0/src/evolver_tools.egg-info}/PKG-INFO +2 -2
  10. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools.egg-info/SOURCES.txt +5 -0
  11. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/LICENSE +0 -0
  12. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/README.md +0 -0
  13. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/setup.cfg +0 -0
  14. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/__init__.py +0 -0
  15. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/__main__.py +0 -0
  16. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/autoreg.py +0 -0
  17. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/__init__.py +0 -0
  18. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/agent_b_tool.py +0 -0
  19. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ansi_strip.py +0 -0
  20. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/api_tester.py +0 -0
  21. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ascii_gen.py +0 -0
  22. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/audit_log.py +0 -0
  23. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/b64/__init__.py +0 -0
  24. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/b64/b64.py +0 -0
  25. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/backup.py +0 -0
  26. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/banner/__init__.py +0 -0
  27. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/banner/banner.py +0 -0
  28. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/banner.py +0 -0
  29. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/base32.py +0 -0
  30. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/bookmark.py +0 -0
  31. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/cal_tool/__init__.py +0 -0
  32. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/cal_tool/cli.py +0 -0
  33. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/calendar_cli.py +0 -0
  34. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/cert_check.py +0 -0
  35. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/cert_info.py +0 -0
  36. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/changelog_gen/__init__.py +0 -0
  37. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/changelog_gen/changelog_gen.py +0 -0
  38. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/changelog_gen.py +0 -0
  39. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/chart_cli/__init__.py +0 -0
  40. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/chart_cli/__main__.py +0 -0
  41. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/checksum_dir.py +0 -0
  42. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/clipboard/__init__.py +0 -0
  43. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/clipboard/clipboard.py +0 -0
  44. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/code_auditor.py +0 -0
  45. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/code_stats.py +0 -0
  46. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/colorize.py +0 -0
  47. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/colors/__init__.py +0 -0
  48. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/colors/__main__.py +0 -0
  49. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/config_validator.py +0 -0
  50. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/config_vault.py +0 -0
  51. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/cowsay.py +0 -0
  52. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/cron/__init__.py +0 -0
  53. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/cron/__main__.py +0 -0
  54. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/cron_pretty.py +0 -0
  55. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/crontab_helper.py +0 -0
  56. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/crypto_box.py +0 -0
  57. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/crypto_price.py +0 -0
  58. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/csv2json.py +0 -0
  59. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/csv_merge.py +0 -0
  60. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/csv_stats/__init__.py +0 -0
  61. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/csv_stats/__main__.py +0 -0
  62. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/csv_stats/analyzer.py +0 -0
  63. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/csv_stats/cli.py +0 -0
  64. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/csv_validate.py +0 -0
  65. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/csv_view.py +0 -0
  66. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/db_mate.py +0 -0
  67. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/db_schema.py +0 -0
  68. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/dep_graph.py +0 -0
  69. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/dev_dashboard.py +0 -0
  70. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/dice_roll.py +0 -0
  71. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/diff_csv.py +0 -0
  72. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/diff_files.py +0 -0
  73. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/diff_tool/__init__.py +0 -0
  74. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/diff_tool/__main__.py +0 -0
  75. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/dirsize/__init__.py +0 -0
  76. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/disk_cleanup.py +0 -0
  77. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/disk_usage/__init__.py +0 -0
  78. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/disk_usage/disk_usage.py +0 -0
  79. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/dns_lookup.py +0 -0
  80. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/docker_helper.py +0 -0
  81. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/dt_convert.py +0 -0
  82. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/env_diff.py +0 -0
  83. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/env_manager.py +0 -0
  84. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/envcheck/__init__.py +0 -0
  85. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/epoch.py +0 -0
  86. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/excel2csv.py +0 -0
  87. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/factor.py +0 -0
  88. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ff/__init__.py +0 -0
  89. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ff/__main__.py +0 -0
  90. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/figlet_cli.py +0 -0
  91. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/figlet_tool.py +0 -0
  92. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/file_encrypt.py +0 -0
  93. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/file_joiner.py +0 -0
  94. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/file_splitter.py +0 -0
  95. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/file_watch.py +0 -0
  96. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/find_dups/__init__.py +0 -0
  97. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/find_dups/cli.py +0 -0
  98. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/firewall_rule.py +0 -0
  99. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/fmt/__init__.py +0 -0
  100. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/fmt/fmt.py +0 -0
  101. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/fold.py +0 -0
  102. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/geo_ip.py +0 -0
  103. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/git_branch_cleaner.py +0 -0
  104. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/git_log_pretty.py +0 -0
  105. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/git_stats.py +0 -0
  106. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/hash_check.py +0 -0
  107. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/hash_file.py +0 -0
  108. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/hashsum/__init__.py +0 -0
  109. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/hashsum/__main__.py +0 -0
  110. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/hex_tool.py +0 -0
  111. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/hexdump.py +0 -0
  112. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/html2markdown.py +0 -0
  113. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/html2md.py +0 -0
  114. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/http_headers.py +0 -0
  115. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/http_live/__init__.py +0 -0
  116. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/http_live/__main__.py +0 -0
  117. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/http_server.py +0 -0
  118. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/image_meta.py +0 -0
  119. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ini2json.py +0 -0
  120. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ini_parser/__init__.py +0 -0
  121. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ini_parser/ini_parser.py +0 -0
  122. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ip_location.py +0 -0
  123. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ipcalc/__init__.py +0 -0
  124. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ipcalc/__main__.py +0 -0
  125. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ipinfo/__init__.py +0 -0
  126. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ipinfo/__main__.py +0 -0
  127. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/join.py +0 -0
  128. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/joke.py +0 -0
  129. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/jq_lite/__init__.py +0 -0
  130. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/jq_lite/__main__.py +0 -0
  131. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/json2csv/__init__.py +0 -0
  132. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/json2csv/__main__.py +0 -0
  133. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/json2ini.py +0 -0
  134. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/json_flatten.py +0 -0
  135. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/json_pretty/__init__.py +0 -0
  136. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/json_pretty/json_pretty.py +0 -0
  137. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/json_schema_validate.py +0 -0
  138. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/jsonql/__init__.py +0 -0
  139. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/jsonql/__main__.py +0 -0
  140. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/key_value_store.py +0 -0
  141. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/license.py +0 -0
  142. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/license_cli/__init__.py +0 -0
  143. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/license_cli/__main__.py +0 -0
  144. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/license_cli/cli.py +0 -0
  145. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/log_analyzer.py +0 -0
  146. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/log_hawk.py +0 -0
  147. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/log_tail.py +0 -0
  148. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/macrogen.py +0 -0
  149. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/markdown_check/__init__.py +0 -0
  150. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/markdown_preview.py +0 -0
  151. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/markdown_toc.py +0 -0
  152. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/media_studio.py +0 -0
  153. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/morse.py +0 -0
  154. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/nb/__init__.py +0 -0
  155. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/nb/__main__.py +0 -0
  156. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/net_analyzer.py +0 -0
  157. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/net_speed.py +0 -0
  158. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/network_scan.py +0 -0
  159. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/nl.py +0 -0
  160. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/note_taker.py +0 -0
  161. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/otp_gen.py +0 -0
  162. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/passgen/__init__.py +0 -0
  163. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/password_strength.py +0 -0
  164. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/pdf_info.py +0 -0
  165. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/pdf_text.py +0 -0
  166. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/pipe_viewer.py +0 -0
  167. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/pomodoro.py +0 -0
  168. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/port_scan.py +0 -0
  169. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/portcheck/__init__.py +0 -0
  170. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/portcheck/__main__.py +0 -0
  171. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/pr_tool/__init__.py +0 -0
  172. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/pr_tool/pr_tool.py +0 -0
  173. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/process_kill.py +0 -0
  174. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/progress_bar.py +0 -0
  175. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/project_doctor/__init__.py +0 -0
  176. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/project_doctor/__main__.py +0 -0
  177. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/qc_calc.py +0 -0
  178. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/qc_report.py +0 -0
  179. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/qc_sample.py +0 -0
  180. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/qr_cli.py +0 -0
  181. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/qrcode.py +0 -0
  182. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/quote.py +0 -0
  183. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/quote_tool/__init__.py +0 -0
  184. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/quote_tool/quote.py +0 -0
  185. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/rainbow.py +0 -0
  186. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/random.py +0 -0
  187. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/reminder.py +0 -0
  188. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ren/__init__.py +0 -0
  189. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ren/__main__.py +0 -0
  190. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/replace_text.py +0 -0
  191. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/restore.py +0 -0
  192. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/rot13.py +0 -0
  193. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/route_trace.py +0 -0
  194. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/scan_ports.py +0 -0
  195. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/screen_recorder.py +0 -0
  196. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/screenshot_cli.py +0 -0
  197. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/search_files.py +0 -0
  198. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/search_history.py +0 -0
  199. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/secret_scanner.py +0 -0
  200. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/seq.py +0 -0
  201. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/service_check.py +0 -0
  202. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/shuffle.py +0 -0
  203. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/siege_lite/__init__.py +0 -0
  204. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/siege_lite/__main__.py +0 -0
  205. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/smellfinder/__init__.py +0 -0
  206. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/smellfinder/__main__.py +0 -0
  207. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/sort/__init__.py +0 -0
  208. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/sort/sort.py +0 -0
  209. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/spinner.py +0 -0
  210. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/split.py +0 -0
  211. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/split_tool/__init__.py +0 -0
  212. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/split_tool/split.py +0 -0
  213. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/sql2csv.py +0 -0
  214. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/sqlite_cli/__init__.py +0 -0
  215. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/sqlite_cli/__main__.py +0 -0
  216. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ssh_key_gen.py +0 -0
  217. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/ssl_check.py +0 -0
  218. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/stopwatch.py +0 -0
  219. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/subnet.py +0 -0
  220. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/sysmon/__init__.py +0 -0
  221. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/sysmon/__main__.py +0 -0
  222. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/sysmon_pro.py +0 -0
  223. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/system_info.py +0 -0
  224. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/temp_cleaner.py +0 -0
  225. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/template.py +0 -0
  226. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/text_stats.py +0 -0
  227. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/timeout.py +0 -0
  228. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/timer/__init__.py +0 -0
  229. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/timer_pro/__init__.py +0 -0
  230. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/timer_pro/timer_pro.py +0 -0
  231. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/timer_pro.py +0 -0
  232. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/todo_cli.py +0 -0
  233. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/toml2json.py +0 -0
  234. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/tr.py +0 -0
  235. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/tree.py +0 -0
  236. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/treedir/__init__.py +0 -0
  237. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/treedir/__main__.py +0 -0
  238. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/uniq_tool/__init__.py +0 -0
  239. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/uniq_tool/uniq.py +0 -0
  240. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/unit_convert.py +0 -0
  241. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/uri_encode.py +0 -0
  242. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/url_parser.py +0 -0
  243. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/urlparse_tool/__init__.py +0 -0
  244. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/urlparse_tool/cli.py +0 -0
  245. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/uuid_tool/__init__.py +0 -0
  246. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/uuid_tool/__main__.py +0 -0
  247. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/watch.py +0 -0
  248. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/weather_cli.py +0 -0
  249. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/web_download.py +0 -0
  250. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/web_summary/__init__.py +0 -0
  251. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/web_summary/__main__.py +0 -0
  252. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/whois_lookup.py +0 -0
  253. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/wordcount/__init__.py +0 -0
  254. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/wordcount/__main__.py +0 -0
  255. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/xml2json.py +0 -0
  256. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/yaml2json/__init__.py +0 -0
  257. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/yaml2json/yaml2json.py +0 -0
  258. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/yaml2toml.py +0 -0
  259. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/yaml_validate.py +0 -0
  260. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools/vendor/yes.py +0 -0
  261. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools.egg-info/dependency_links.txt +0 -0
  262. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools.egg-info/entry_points.txt +0 -0
  263. {evolver_tools-21.0.0 → evolver_tools-22.0.0}/src/evolver_tools.egg-info/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolver-tools
3
- Version: 21.0.0
4
- Summary: 191 CLI tools + 9 flagship projects — one pip install
3
+ Version: 22.0.0
4
+ Summary: 196 CLI tools + 9 flagship projects — one pip install
5
5
  Author: EVOLVER
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://evolver-dev.github.io/evolver-tools
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "evolver-tools"
7
- version = "21.0.0"
8
- description = "191 CLI tools + 9 flagship projects — one pip install"
7
+ version = "22.0.0"
8
+ description = "196 CLI tools + 9 flagship projects — one pip install"
9
9
  readme = "README.md"
10
10
  license = "MIT"
11
11
  requires-python = ">=3.8"
@@ -14,7 +14,7 @@ from evolver_tools.autoreg import auto_discover
14
14
  def list_tools():
15
15
  """Display all available tools."""
16
16
  tools = auto_discover()
17
- print(f'\x1b[1;36m===== EVOLVER Tools v21.0.0 =====\x1b[0m')
17
+ print(f'\x1b[1;36m===== EVOLVER Tools v22.0.0 =====\x1b[0m')
18
18
  print()
19
19
  for name, info in sorted(tools.items()):
20
20
  print(f' \033[1;33m{name:<18}\033[0m {info["desc"]}')
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env python3
2
+ """crc_check — CRC32/CRC64 checksum calculator for files.
3
+
4
+ Usage: crc_check file.bin
5
+ crc_check --crc64 file.bin
6
+ crc_check --all file.bin
7
+ cat file.bin | crc_check
8
+
9
+ Verify file integrity with CRC checksums.
10
+ Zero external dependencies (zlib.crc32 + pure Python CRC64).
11
+ """
12
+
13
+ import sys
14
+ import os
15
+ import zlib
16
+
17
+ TOOL_META = {
18
+ "name": "crc_check",
19
+ "func": "main",
20
+ "desc": "CRC32/CRC64 checksum calculator for files",
21
+ }
22
+
23
+ def crc64(data):
24
+ """Compute CRC64-ECMA-182."""
25
+ poly = 0xC96C5795D7870F42
26
+ crc = 0xFFFFFFFFFFFFFFFF
27
+ for byte in data:
28
+ crc ^= byte
29
+ for _ in range(8):
30
+ if crc & 1:
31
+ crc = (crc >> 1) ^ poly
32
+ else:
33
+ crc >>= 1
34
+ return crc ^ 0xFFFFFFFFFFFFFFFF
35
+
36
+
37
+ def main():
38
+ args = sys.argv[1:]
39
+ mode = 'crc32'
40
+ files = []
41
+
42
+ i = 0
43
+ while i < len(args):
44
+ if args[i] in ('-h', '--help'):
45
+ print(__doc__)
46
+ return
47
+ elif args[i] == '--crc64':
48
+ mode = 'crc64'
49
+ i += 1
50
+ elif args[i] == '--all':
51
+ mode = 'all'
52
+ i += 1
53
+ elif args[i].startswith('--'):
54
+ print(f"Unknown flag: {args[i]}", file=sys.stderr)
55
+ sys.exit(1)
56
+ else:
57
+ files.append(args[i])
58
+ i += 1
59
+
60
+ if files:
61
+ for path in files:
62
+ if not os.path.exists(path):
63
+ print(f"Error: file not found: {path}", file=sys.stderr)
64
+ sys.exit(1)
65
+ with open(path, 'rb') as f:
66
+ data = f.read()
67
+ name = os.path.basename(path)
68
+ if mode in ('crc32', 'all'):
69
+ print(f"CRC32({name}) = {zlib.crc32(data) & 0xFFFFFFFF:08x}")
70
+ if mode in ('crc64', 'all'):
71
+ print(f"CRC64({name}) = {crc64(data):016x}")
72
+ else:
73
+ data = sys.stdin.buffer.read()
74
+ if mode in ('crc32', 'all'):
75
+ print(f"CRC32 = {zlib.crc32(data) & 0xFFFFFFFF:08x}")
76
+ if mode in ('crc64', 'all'):
77
+ print(f"CRC64 = {crc64(data):016x}")
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env python3
2
+ """date_diff — Calculate date/time differences.
3
+
4
+ Usage: date_diff 2026-01-01 2026-06-01
5
+ date_diff 2026-01-01 2026-06-01 --unit hours
6
+ date_diff now "2026-12-25"
7
+ date_diff "2026-01-01 09:00" "2026-01-01 17:30" --unit minutes
8
+
9
+ Show difference in days, hours, minutes, or seconds between two dates.
10
+ Accepts ISO 8601 dates, 'now', and datetime strings.
11
+ """
12
+
13
+ import sys
14
+ from datetime import datetime
15
+
16
+ TOOL_META = {
17
+ "name": "date_diff",
18
+ "func": "main",
19
+ "desc": "Calculate date/time differences",
20
+ }
21
+
22
+ def parse_date(s):
23
+ if s.lower() == 'now':
24
+ return datetime.now()
25
+ for fmt in ('%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M', '%Y-%m-%d',
26
+ '%Y/%m/%d %H:%M:%S', '%Y/%m/%d %H:%M', '%Y/%m/%d',
27
+ '%m/%d/%Y', '%d/%m/%Y'):
28
+ try:
29
+ return datetime.strptime(s, fmt)
30
+ except ValueError:
31
+ continue
32
+ raise ValueError(f"Cannot parse date: {s}")
33
+
34
+
35
+ def main():
36
+ args = sys.argv[1:]
37
+ if not args or args[0] in ('-h', '--help'):
38
+ print(__doc__)
39
+ return
40
+
41
+ unit = 'days'
42
+ date_strs = []
43
+
44
+ i = 0
45
+ while i < len(args):
46
+ if args[i] == '--unit' and i + 1 < len(args):
47
+ unit = args[i + 1].lower()
48
+ i += 2
49
+ elif args[i].startswith('--'):
50
+ print(f"Unknown flag: {args[i]}", file=sys.stderr)
51
+ sys.exit(1)
52
+ else:
53
+ date_strs.append(args[i])
54
+ i += 1
55
+
56
+ if len(date_strs) < 2:
57
+ print("Error: need two dates", file=sys.stderr)
58
+ sys.exit(1)
59
+
60
+ try:
61
+ d1 = parse_date(date_strs[0])
62
+ d2 = parse_date(date_strs[1])
63
+ except ValueError as e:
64
+ print(f"Error: {e}", file=sys.stderr)
65
+ sys.exit(1)
66
+
67
+ delta = abs(d2 - d1)
68
+ total_seconds = delta.total_seconds()
69
+
70
+ if unit in ('days', 'day', 'd'):
71
+ result = total_seconds / 86400
72
+ label = 'days'
73
+ elif unit in ('hours', 'hour', 'h'):
74
+ result = total_seconds / 3600
75
+ label = 'hours'
76
+ elif unit in ('minutes', 'minute', 'min', 'm'):
77
+ result = total_seconds / 60
78
+ label = 'minutes'
79
+ elif unit in ('seconds', 'second', 'sec', 's'):
80
+ result = total_seconds
81
+ label = 'seconds'
82
+ elif unit in ('weeks', 'week', 'w'):
83
+ result = total_seconds / 604800
84
+ label = 'weeks'
85
+ elif unit in ('months', 'month'):
86
+ # Approximate
87
+ result = total_seconds / (86400 * 30.44)
88
+ label = 'months'
89
+ elif unit in ('years', 'year', 'y'):
90
+ result = total_seconds / (86400 * 365.25)
91
+ label = 'years'
92
+ else:
93
+ print(f"Error: unknown unit: {unit}", file=sys.stderr)
94
+ sys.exit(1)
95
+
96
+ if result == int(result):
97
+ print(f"{int(result)} {label}")
98
+ else:
99
+ print(f"{result:.2f} {label}")
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env python3
2
+ """env_template — Generate .env.example from .env (strip values, keep keys).
3
+
4
+ Usage: env_template # Reads .env, writes .env.example
5
+ env_template .env.prod # Reads specific file
6
+ env_template --stdout # Print to stdout instead
7
+
8
+ Strip all values from .env files, keeping only the keys and comments.
9
+ Useful for committing a safe .env.example to version control.
10
+ """
11
+
12
+ import sys
13
+ import os
14
+ import re
15
+
16
+ TOOL_META = {
17
+ "name": "env_template",
18
+ "func": "main",
19
+ "desc": "Generate .env.example from .env (strip values, keep keys)",
20
+ }
21
+
22
+
23
+ def main():
24
+ args = sys.argv[1:]
25
+ input_file = '.env'
26
+ stdout_mode = False
27
+ output_file = '.env.example'
28
+
29
+ for arg in args:
30
+ if arg == '--stdout':
31
+ stdout_mode = True
32
+ elif arg in ('-h', '--help'):
33
+ print(__doc__)
34
+ return
35
+ elif not arg.startswith('--'):
36
+ input_file = arg
37
+ else:
38
+ print(f"Unknown flag: {arg}", file=sys.stderr)
39
+ sys.exit(1)
40
+
41
+ if not os.path.exists(input_file):
42
+ print(f"Error: {input_file} not found", file=sys.stderr)
43
+ sys.exit(1)
44
+
45
+ with open(input_file) as f:
46
+ lines = f.readlines()
47
+
48
+ result = []
49
+ for line in lines:
50
+ stripped = line.rstrip('\n')
51
+ # Comment line — keep as-is
52
+ if stripped.strip().startswith('#'):
53
+ result.append(stripped)
54
+ # Empty line — keep
55
+ elif not stripped.strip():
56
+ result.append('')
57
+ # Key=value line — strip value
58
+ elif '=' in stripped:
59
+ key = stripped.split('=', 1)[0].strip()
60
+ # Detect inline comments after key
61
+ comment = ''
62
+ cm = re.search(r'\s+#.*$', stripped)
63
+ if cm:
64
+ comment = cm.group()
65
+ result.append(f"{key}={comment.strip() if comment else ''}")
66
+ else:
67
+ # Keep lines that don't match known patterns
68
+ result.append(stripped)
69
+
70
+ output = '\n'.join(result)
71
+
72
+ if stdout_mode:
73
+ print(output)
74
+ else:
75
+ if not output_file:
76
+ base, _ = os.path.splitext(input_file)
77
+ output_file = f"{base}.example"
78
+ with open(output_file, 'w') as f:
79
+ f.write(output)
80
+ f.write('\n')
81
+ print(f"Written {output_file} ({len([l for l in result if '=' in l])} keys)")
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env python3
2
+ """math_eval — Safe mathematical expression evaluator.
3
+
4
+ Usage: math_eval "2 + 2"
5
+ math_eval "sin(pi/4)"
6
+ math_eval "sqrt(144) * log10(100)"
7
+ math_eval "random()" # 0.0-1.0
8
+
9
+ Safe evaluation using a restricted namespace with math module functions.
10
+ No file access, no exec, no eval of arbitrary code.
11
+ """
12
+
13
+ import sys
14
+ import math
15
+ import random
16
+
17
+ TOOL_META = {
18
+ "name": "math_eval",
19
+ "func": "main",
20
+ "desc": "Safe mathematical expression evaluator",
21
+ }
22
+
23
+ # Safe namespace with math functions
24
+ SAFE_NS = {
25
+ # Constants
26
+ 'pi': math.pi, 'e': math.e, 'tau': math.tau, 'inf': math.inf, 'nan': math.nan,
27
+ # Basic math
28
+ 'abs': abs, 'round': round, 'int': int, 'float': float, 'min': min, 'max': max,
29
+ 'sum': sum, 'pow': pow,
30
+ # Trig
31
+ 'sin': math.sin, 'cos': math.cos, 'tan': math.tan,
32
+ 'asin': math.asin, 'acos': math.acos, 'atan': math.atan, 'atan2': math.atan2,
33
+ 'sinh': math.sinh, 'cosh': math.cosh, 'tanh': math.tanh,
34
+ 'degrees': math.degrees, 'radians': math.radians,
35
+ # Log
36
+ 'log': math.log, 'log2': math.log2, 'log10': math.log10, 'log1p': math.log1p,
37
+ 'exp': math.exp, 'expm1': math.expm1,
38
+ # Root/Power
39
+ 'sqrt': math.sqrt, 'cbrt': math.cbrt if hasattr(math, 'cbrt') else lambda x: x ** (1/3),
40
+ 'hypot': math.hypot, 'isclose': math.isclose,
41
+ # Rounding
42
+ 'floor': math.floor, 'ceil': math.ceil, 'trunc': math.trunc,
43
+ 'factorial': math.factorial,
44
+ # Special
45
+ 'gamma': math.gamma, 'lgamma': math.lgamma, 'erf': math.erf, 'erfc': math.erfc,
46
+ # Random
47
+ 'random': random.random, 'randint': random.randint, 'uniform': random.uniform,
48
+ 'gauss': random.gauss,
49
+ # Constants
50
+ '__builtins__': {},
51
+ }
52
+
53
+ ALLOWED_NAMES = set(SAFE_NS.keys())
54
+
55
+
56
+ def main():
57
+ args = sys.argv[1:]
58
+
59
+ if not args or args[0] in ('-h', '--help'):
60
+ print(__doc__)
61
+ return
62
+
63
+ expr = ' '.join(args)
64
+
65
+ try:
66
+ # Parse AST and check it's safe
67
+ code = compile(expr, '<math_eval>', 'eval', flags=0, dont_inherit=True)
68
+ for name in code.co_names:
69
+ if name not in ALLOWED_NAMES:
70
+ print(f"Error: '{name}' is not allowed in safe mode", file=sys.stderr)
71
+ sys.exit(1)
72
+
73
+ result = eval(code, SAFE_NS)
74
+ if isinstance(result, float):
75
+ if result == int(result):
76
+ print(int(result))
77
+ else:
78
+ print(f"{result:.10g}".rstrip('0').rstrip('.'))
79
+ else:
80
+ print(result)
81
+ except ZeroDivisionError:
82
+ print("Error: division by zero", file=sys.stderr)
83
+ sys.exit(1)
84
+ except Exception as e:
85
+ print(f"Error: {e}", file=sys.stderr)
86
+ sys.exit(1)
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env python3
2
+ """uuid_gen — UUID generator (v1, v4, v5, v7).
3
+
4
+ Usage: uuid_gen # v4 random UUID
5
+ uuid_gen 5 # Generate 5 UUIDs
6
+ uuid_gen --v1 # Time-based UUID
7
+ uuid_gen --v5 myns myname # Namespace + name UUID
8
+ uuid_gen --v7 # Time-ordered UUID (Python 3.14+)
9
+
10
+ Generate one or more UUIDs. Default: UUID v4 (random).
11
+ """
12
+
13
+ import sys
14
+ import uuid
15
+
16
+ TOOL_META = {
17
+ "name": "uuid_gen",
18
+ "func": "main",
19
+ "desc": "UUID generator (v1/v4/v5/v7)",
20
+ }
21
+
22
+ def main():
23
+ args = sys.argv[1:]
24
+
25
+ version = 'v4'
26
+ count = 1
27
+ namespace = None
28
+ name = None
29
+
30
+ i = 0
31
+ while i < len(args):
32
+ if args[i] in ('-h', '--help'):
33
+ print(__doc__)
34
+ return
35
+ elif args[i] == '--v1':
36
+ version = 'v1'
37
+ i += 1
38
+ elif args[i] == '--v4':
39
+ version = 'v4'
40
+ i += 1
41
+ elif args[i] == '--v5':
42
+ version = 'v5'
43
+ i += 1
44
+ if i + 2 <= len(args):
45
+ namespace = args[i + 1]
46
+ name = args[i + 2]
47
+ i += 3
48
+ else:
49
+ print("Error: --v5 requires NAMESPACE and NAME", file=sys.stderr)
50
+ sys.exit(1)
51
+ elif args[i] == '--v7':
52
+ version = 'v7'
53
+ i += 1
54
+ else:
55
+ try:
56
+ count = int(args[i])
57
+ except ValueError:
58
+ print(f"Unknown argument: {args[i]}", file=sys.stderr)
59
+ sys.exit(1)
60
+ i += 1
61
+
62
+ for _ in range(count):
63
+ if version == 'v1':
64
+ print(str(uuid.uuid1()))
65
+ elif version == 'v4':
66
+ print(str(uuid.uuid4()))
67
+ elif version == 'v5':
68
+ ns_map = {'dns': uuid.NAMESPACE_DNS, 'url': uuid.NAMESPACE_URL,
69
+ 'oid': uuid.NAMESPACE_OID, 'x500': uuid.NAMESPACE_X500}
70
+ ns = ns_map.get(namespace.lower(), uuid.NAMESPACE_DNS)
71
+ print(str(uuid.uuid5(ns, name)))
72
+ elif version == 'v7':
73
+ try:
74
+ print(str(uuid.uuid7()))
75
+ except AttributeError:
76
+ print("Error: UUID v7 requires Python 3.14+", file=sys.stderr)
77
+ sys.exit(1)
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: evolver-tools
3
- Version: 21.0.0
4
- Summary: 191 CLI tools + 9 flagship projects — one pip install
3
+ Version: 22.0.0
4
+ Summary: 196 CLI tools + 9 flagship projects — one pip install
5
5
  Author: EVOLVER
6
6
  License-Expression: MIT
7
7
  Project-URL: Homepage, https://evolver-dev.github.io/evolver-tools
@@ -31,6 +31,7 @@ src/evolver_tools/vendor/colorize.py
31
31
  src/evolver_tools/vendor/config_validator.py
32
32
  src/evolver_tools/vendor/config_vault.py
33
33
  src/evolver_tools/vendor/cowsay.py
34
+ src/evolver_tools/vendor/crc_check.py
34
35
  src/evolver_tools/vendor/cron_pretty.py
35
36
  src/evolver_tools/vendor/crontab_helper.py
36
37
  src/evolver_tools/vendor/crypto_box.py
@@ -39,6 +40,7 @@ src/evolver_tools/vendor/csv2json.py
39
40
  src/evolver_tools/vendor/csv_merge.py
40
41
  src/evolver_tools/vendor/csv_validate.py
41
42
  src/evolver_tools/vendor/csv_view.py
43
+ src/evolver_tools/vendor/date_diff.py
42
44
  src/evolver_tools/vendor/db_mate.py
43
45
  src/evolver_tools/vendor/db_schema.py
44
46
  src/evolver_tools/vendor/dep_graph.py
@@ -52,6 +54,7 @@ src/evolver_tools/vendor/docker_helper.py
52
54
  src/evolver_tools/vendor/dt_convert.py
53
55
  src/evolver_tools/vendor/env_diff.py
54
56
  src/evolver_tools/vendor/env_manager.py
57
+ src/evolver_tools/vendor/env_template.py
55
58
  src/evolver_tools/vendor/epoch.py
56
59
  src/evolver_tools/vendor/excel2csv.py
57
60
  src/evolver_tools/vendor/factor.py
@@ -91,6 +94,7 @@ src/evolver_tools/vendor/log_tail.py
91
94
  src/evolver_tools/vendor/macrogen.py
92
95
  src/evolver_tools/vendor/markdown_preview.py
93
96
  src/evolver_tools/vendor/markdown_toc.py
97
+ src/evolver_tools/vendor/math_eval.py
94
98
  src/evolver_tools/vendor/media_studio.py
95
99
  src/evolver_tools/vendor/morse.py
96
100
  src/evolver_tools/vendor/net_analyzer.py
@@ -150,6 +154,7 @@ src/evolver_tools/vendor/tree.py
150
154
  src/evolver_tools/vendor/unit_convert.py
151
155
  src/evolver_tools/vendor/uri_encode.py
152
156
  src/evolver_tools/vendor/url_parser.py
157
+ src/evolver_tools/vendor/uuid_gen.py
153
158
  src/evolver_tools/vendor/watch.py
154
159
  src/evolver_tools/vendor/weather_cli.py
155
160
  src/evolver_tools/vendor/web_download.py
File without changes
File without changes
File without changes