exonware-xwsystem 0.1.0.1__py3-none-any.whl → 0.1.0.4__py3-none-any.whl

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 (341) hide show
  1. exonware/__init__.py +2 -1
  2. exonware/conf.py +2 -2
  3. exonware/xwsystem/__init__.py +115 -43
  4. exonware/xwsystem/base.py +30 -0
  5. exonware/xwsystem/caching/__init__.py +39 -13
  6. exonware/xwsystem/caching/base.py +24 -6
  7. exonware/xwsystem/caching/bloom_cache.py +2 -2
  8. exonware/xwsystem/caching/cache_manager.py +2 -1
  9. exonware/xwsystem/caching/conditional.py +2 -2
  10. exonware/xwsystem/caching/contracts.py +85 -139
  11. exonware/xwsystem/caching/decorators.py +6 -19
  12. exonware/xwsystem/caching/defs.py +2 -1
  13. exonware/xwsystem/caching/disk_cache.py +2 -1
  14. exonware/xwsystem/caching/distributed.py +2 -1
  15. exonware/xwsystem/caching/errors.py +2 -1
  16. exonware/xwsystem/caching/events.py +110 -27
  17. exonware/xwsystem/caching/eviction_strategies.py +2 -2
  18. exonware/xwsystem/caching/external_caching_python.py +701 -0
  19. exonware/xwsystem/caching/facade.py +253 -0
  20. exonware/xwsystem/caching/factory.py +300 -0
  21. exonware/xwsystem/caching/fluent.py +14 -12
  22. exonware/xwsystem/caching/integrity.py +21 -6
  23. exonware/xwsystem/caching/lfu_cache.py +2 -1
  24. exonware/xwsystem/caching/lfu_optimized.py +18 -6
  25. exonware/xwsystem/caching/lru_cache.py +7 -4
  26. exonware/xwsystem/caching/memory_bounded.py +2 -2
  27. exonware/xwsystem/caching/metrics_exporter.py +2 -2
  28. exonware/xwsystem/caching/observable_cache.py +2 -2
  29. exonware/xwsystem/caching/pluggable_cache.py +2 -2
  30. exonware/xwsystem/caching/rate_limiter.py +2 -2
  31. exonware/xwsystem/caching/read_through.py +2 -2
  32. exonware/xwsystem/caching/secure_cache.py +81 -28
  33. exonware/xwsystem/caching/serializable.py +9 -7
  34. exonware/xwsystem/caching/stats.py +2 -2
  35. exonware/xwsystem/caching/tagging.py +2 -2
  36. exonware/xwsystem/caching/ttl_cache.py +4 -3
  37. exonware/xwsystem/caching/two_tier_cache.py +6 -3
  38. exonware/xwsystem/caching/utils.py +30 -12
  39. exonware/xwsystem/caching/validation.py +2 -2
  40. exonware/xwsystem/caching/warming.py +6 -3
  41. exonware/xwsystem/caching/write_behind.py +15 -6
  42. exonware/xwsystem/config/__init__.py +11 -17
  43. exonware/xwsystem/config/base.py +5 -5
  44. exonware/xwsystem/config/contracts.py +93 -153
  45. exonware/xwsystem/config/defaults.py +3 -2
  46. exonware/xwsystem/config/defs.py +3 -2
  47. exonware/xwsystem/config/errors.py +2 -5
  48. exonware/xwsystem/config/logging.py +12 -8
  49. exonware/xwsystem/config/logging_setup.py +3 -2
  50. exonware/xwsystem/config/performance.py +1 -46
  51. exonware/xwsystem/config/performance_modes.py +9 -8
  52. exonware/xwsystem/config/version_manager.py +1 -0
  53. exonware/xwsystem/config.py +27 -0
  54. exonware/xwsystem/console/__init__.py +53 -0
  55. exonware/xwsystem/console/base.py +133 -0
  56. exonware/xwsystem/console/cli/__init__.py +61 -0
  57. exonware/xwsystem/{cli → console/cli}/args.py +27 -24
  58. exonware/xwsystem/{cli → console/cli}/base.py +18 -87
  59. exonware/xwsystem/{cli → console/cli}/colors.py +15 -13
  60. exonware/xwsystem/console/cli/console.py +98 -0
  61. exonware/xwsystem/{cli → console/cli}/contracts.py +51 -69
  62. exonware/xwsystem/console/cli/defs.py +87 -0
  63. exonware/xwsystem/console/cli/encoding.py +69 -0
  64. exonware/xwsystem/{cli → console/cli}/errors.py +8 -3
  65. exonware/xwsystem/console/cli/event_logger.py +166 -0
  66. exonware/xwsystem/{cli → console/cli}/progress.py +25 -21
  67. exonware/xwsystem/{cli → console/cli}/prompts.py +3 -2
  68. exonware/xwsystem/{cli → console/cli}/tables.py +27 -24
  69. exonware/xwsystem/console/contracts.py +113 -0
  70. exonware/xwsystem/console/defs.py +154 -0
  71. exonware/xwsystem/console/errors.py +34 -0
  72. exonware/xwsystem/console/event_logger.py +385 -0
  73. exonware/xwsystem/console/writer.py +132 -0
  74. exonware/xwsystem/contracts.py +28 -0
  75. exonware/xwsystem/data_structures/__init__.py +23 -0
  76. exonware/xwsystem/data_structures/trie.py +34 -0
  77. exonware/xwsystem/data_structures/union_find.py +144 -0
  78. exonware/xwsystem/defs.py +17 -0
  79. exonware/xwsystem/errors.py +23 -0
  80. exonware/xwsystem/facade.py +62 -0
  81. exonware/xwsystem/http_client/__init__.py +22 -1
  82. exonware/xwsystem/http_client/advanced_client.py +8 -5
  83. exonware/xwsystem/http_client/base.py +3 -2
  84. exonware/xwsystem/http_client/client.py +7 -4
  85. exonware/xwsystem/http_client/contracts.py +42 -56
  86. exonware/xwsystem/http_client/defs.py +2 -1
  87. exonware/xwsystem/http_client/errors.py +2 -1
  88. exonware/xwsystem/http_client/facade.py +156 -0
  89. exonware/xwsystem/io/__init__.py +22 -3
  90. exonware/xwsystem/io/archive/__init__.py +8 -2
  91. exonware/xwsystem/io/archive/archive.py +1 -1
  92. exonware/xwsystem/io/archive/archive_files.py +4 -7
  93. exonware/xwsystem/io/archive/archivers.py +120 -10
  94. exonware/xwsystem/io/archive/base.py +4 -5
  95. exonware/xwsystem/io/archive/codec_integration.py +1 -2
  96. exonware/xwsystem/io/archive/compression.py +1 -2
  97. exonware/xwsystem/io/archive/facade.py +263 -0
  98. exonware/xwsystem/io/archive/formats/__init__.py +2 -3
  99. exonware/xwsystem/io/archive/formats/brotli_format.py +20 -7
  100. exonware/xwsystem/io/archive/formats/lz4_format.py +20 -7
  101. exonware/xwsystem/io/archive/formats/rar.py +11 -5
  102. exonware/xwsystem/io/archive/formats/sevenzip.py +12 -6
  103. exonware/xwsystem/io/archive/formats/squashfs_format.py +1 -2
  104. exonware/xwsystem/io/archive/formats/tar.py +52 -7
  105. exonware/xwsystem/io/archive/formats/wim_format.py +11 -5
  106. exonware/xwsystem/io/archive/formats/zip.py +1 -2
  107. exonware/xwsystem/io/archive/formats/zpaq_format.py +1 -2
  108. exonware/xwsystem/io/archive/formats/zstandard.py +20 -7
  109. exonware/xwsystem/io/base.py +119 -115
  110. exonware/xwsystem/io/codec/__init__.py +4 -2
  111. exonware/xwsystem/io/codec/base.py +19 -13
  112. exonware/xwsystem/io/codec/contracts.py +59 -2
  113. exonware/xwsystem/io/codec/registry.py +67 -21
  114. exonware/xwsystem/io/common/__init__.py +1 -1
  115. exonware/xwsystem/io/common/atomic.py +29 -16
  116. exonware/xwsystem/io/common/base.py +11 -10
  117. exonware/xwsystem/io/common/lock.py +6 -5
  118. exonware/xwsystem/io/common/path_manager.py +2 -1
  119. exonware/xwsystem/io/common/watcher.py +1 -2
  120. exonware/xwsystem/io/contracts.py +301 -433
  121. exonware/xwsystem/io/contracts_1.py +1180 -0
  122. exonware/xwsystem/io/data_operations.py +19 -20
  123. exonware/xwsystem/io/defs.py +4 -3
  124. exonware/xwsystem/io/errors.py +3 -2
  125. exonware/xwsystem/io/facade.py +87 -61
  126. exonware/xwsystem/io/file/__init__.py +1 -1
  127. exonware/xwsystem/io/file/base.py +8 -9
  128. exonware/xwsystem/io/file/conversion.py +2 -3
  129. exonware/xwsystem/io/file/file.py +61 -18
  130. exonware/xwsystem/io/file/paged_source.py +8 -8
  131. exonware/xwsystem/io/file/paging/__init__.py +1 -2
  132. exonware/xwsystem/io/file/paging/byte_paging.py +4 -5
  133. exonware/xwsystem/io/file/paging/line_paging.py +2 -3
  134. exonware/xwsystem/io/file/paging/record_paging.py +2 -3
  135. exonware/xwsystem/io/file/paging/registry.py +1 -2
  136. exonware/xwsystem/io/file/source.py +13 -17
  137. exonware/xwsystem/io/filesystem/__init__.py +1 -1
  138. exonware/xwsystem/io/filesystem/base.py +1 -2
  139. exonware/xwsystem/io/filesystem/local.py +3 -4
  140. exonware/xwsystem/io/folder/__init__.py +1 -1
  141. exonware/xwsystem/io/folder/base.py +1 -2
  142. exonware/xwsystem/io/folder/folder.py +16 -7
  143. exonware/xwsystem/io/indexing/__init__.py +14 -0
  144. exonware/xwsystem/io/indexing/facade.py +443 -0
  145. exonware/xwsystem/io/path_parser.py +98 -0
  146. exonware/xwsystem/io/serialization/__init__.py +21 -3
  147. exonware/xwsystem/io/serialization/auto_serializer.py +146 -20
  148. exonware/xwsystem/io/serialization/base.py +84 -34
  149. exonware/xwsystem/io/serialization/contracts.py +50 -73
  150. exonware/xwsystem/io/serialization/defs.py +2 -1
  151. exonware/xwsystem/io/serialization/errors.py +2 -1
  152. exonware/xwsystem/io/serialization/flyweight.py +154 -7
  153. exonware/xwsystem/io/serialization/format_detector.py +15 -14
  154. exonware/xwsystem/io/serialization/formats/__init__.py +8 -5
  155. exonware/xwsystem/io/serialization/formats/binary/bson.py +15 -6
  156. exonware/xwsystem/io/serialization/formats/binary/cbor.py +5 -5
  157. exonware/xwsystem/io/serialization/formats/binary/marshal.py +5 -5
  158. exonware/xwsystem/io/serialization/formats/binary/msgpack.py +5 -5
  159. exonware/xwsystem/io/serialization/formats/binary/pickle.py +5 -5
  160. exonware/xwsystem/io/serialization/formats/binary/plistlib.py +5 -5
  161. exonware/xwsystem/io/serialization/formats/database/dbm.py +7 -7
  162. exonware/xwsystem/io/serialization/formats/database/shelve.py +7 -7
  163. exonware/xwsystem/io/serialization/formats/database/sqlite3.py +7 -7
  164. exonware/xwsystem/io/serialization/formats/tabular/__init__.py +27 -0
  165. exonware/xwsystem/io/serialization/formats/tabular/base.py +89 -0
  166. exonware/xwsystem/io/serialization/formats/tabular/csv.py +319 -0
  167. exonware/xwsystem/io/serialization/formats/tabular/df.py +249 -0
  168. exonware/xwsystem/io/serialization/formats/tabular/excel.py +291 -0
  169. exonware/xwsystem/io/serialization/formats/tabular/googlesheets.py +374 -0
  170. exonware/xwsystem/io/serialization/formats/text/__init__.py +1 -1
  171. exonware/xwsystem/io/serialization/formats/text/append_only_log.py +5 -7
  172. exonware/xwsystem/io/serialization/formats/text/configparser.py +5 -5
  173. exonware/xwsystem/io/serialization/formats/text/csv.py +7 -5
  174. exonware/xwsystem/io/serialization/formats/text/formdata.py +5 -5
  175. exonware/xwsystem/io/serialization/formats/text/json.py +27 -18
  176. exonware/xwsystem/io/serialization/formats/text/json5.py +8 -4
  177. exonware/xwsystem/io/serialization/formats/text/jsonlines.py +18 -14
  178. exonware/xwsystem/io/serialization/formats/text/multipart.py +5 -5
  179. exonware/xwsystem/io/serialization/formats/text/toml.py +8 -6
  180. exonware/xwsystem/io/serialization/formats/text/xml.py +25 -20
  181. exonware/xwsystem/io/serialization/formats/text/yaml.py +8 -6
  182. exonware/xwsystem/io/serialization/parsers/__init__.py +3 -2
  183. exonware/xwsystem/io/serialization/parsers/base.py +6 -5
  184. exonware/xwsystem/io/serialization/parsers/hybrid_parser.py +7 -6
  185. exonware/xwsystem/io/serialization/parsers/msgspec_parser.py +10 -7
  186. exonware/xwsystem/io/serialization/parsers/orjson_direct_parser.py +7 -6
  187. exonware/xwsystem/io/serialization/parsers/orjson_parser.py +11 -8
  188. exonware/xwsystem/io/serialization/parsers/pysimdjson_parser.py +13 -9
  189. exonware/xwsystem/io/serialization/parsers/rapidjson_parser.py +10 -7
  190. exonware/xwsystem/io/serialization/parsers/registry.py +11 -10
  191. exonware/xwsystem/io/serialization/parsers/standard.py +7 -6
  192. exonware/xwsystem/io/serialization/parsers/ujson_parser.py +10 -7
  193. exonware/xwsystem/io/serialization/registry.py +4 -4
  194. exonware/xwsystem/io/serialization/serializer.py +168 -79
  195. exonware/xwsystem/io/serialization/universal_options.py +367 -0
  196. exonware/xwsystem/io/serialization/utils/__init__.py +1 -2
  197. exonware/xwsystem/io/serialization/utils/path_ops.py +5 -6
  198. exonware/xwsystem/io/source_reader.py +223 -0
  199. exonware/xwsystem/io/stream/__init__.py +1 -1
  200. exonware/xwsystem/io/stream/async_operations.py +61 -14
  201. exonware/xwsystem/io/stream/base.py +1 -2
  202. exonware/xwsystem/io/stream/codec_io.py +6 -7
  203. exonware/xwsystem/ipc/__init__.py +1 -0
  204. exonware/xwsystem/ipc/async_fabric.py +4 -4
  205. exonware/xwsystem/ipc/base.py +6 -5
  206. exonware/xwsystem/ipc/contracts.py +41 -66
  207. exonware/xwsystem/ipc/defs.py +2 -1
  208. exonware/xwsystem/ipc/errors.py +2 -1
  209. exonware/xwsystem/ipc/message_queue.py +5 -2
  210. exonware/xwsystem/ipc/pipes.py +70 -34
  211. exonware/xwsystem/ipc/process_manager.py +7 -5
  212. exonware/xwsystem/ipc/process_pool.py +6 -5
  213. exonware/xwsystem/ipc/shared_memory.py +64 -11
  214. exonware/xwsystem/monitoring/__init__.py +7 -0
  215. exonware/xwsystem/monitoring/base.py +11 -8
  216. exonware/xwsystem/monitoring/contracts.py +86 -144
  217. exonware/xwsystem/monitoring/defs.py +2 -1
  218. exonware/xwsystem/monitoring/error_recovery.py +16 -3
  219. exonware/xwsystem/monitoring/errors.py +2 -1
  220. exonware/xwsystem/monitoring/facade.py +183 -0
  221. exonware/xwsystem/monitoring/memory_monitor.py +1 -0
  222. exonware/xwsystem/monitoring/metrics.py +1 -0
  223. exonware/xwsystem/monitoring/performance_manager_generic.py +7 -7
  224. exonware/xwsystem/monitoring/performance_monitor.py +1 -0
  225. exonware/xwsystem/monitoring/performance_validator.py +1 -0
  226. exonware/xwsystem/monitoring/system_monitor.py +6 -5
  227. exonware/xwsystem/monitoring/tracing.py +18 -16
  228. exonware/xwsystem/monitoring/tracker.py +2 -1
  229. exonware/xwsystem/operations/__init__.py +5 -50
  230. exonware/xwsystem/operations/base.py +3 -44
  231. exonware/xwsystem/operations/contracts.py +25 -15
  232. exonware/xwsystem/operations/defs.py +1 -1
  233. exonware/xwsystem/operations/diff.py +5 -4
  234. exonware/xwsystem/operations/errors.py +1 -1
  235. exonware/xwsystem/operations/merge.py +6 -4
  236. exonware/xwsystem/operations/patch.py +5 -4
  237. exonware/xwsystem/patterns/__init__.py +1 -0
  238. exonware/xwsystem/patterns/base.py +2 -1
  239. exonware/xwsystem/patterns/context_manager.py +2 -1
  240. exonware/xwsystem/patterns/contracts.py +215 -256
  241. exonware/xwsystem/patterns/defs.py +2 -1
  242. exonware/xwsystem/patterns/dynamic_facade.py +1 -0
  243. exonware/xwsystem/patterns/errors.py +2 -4
  244. exonware/xwsystem/patterns/handler_factory.py +2 -3
  245. exonware/xwsystem/patterns/import_registry.py +1 -0
  246. exonware/xwsystem/patterns/object_pool.py +1 -0
  247. exonware/xwsystem/patterns/registry.py +4 -43
  248. exonware/xwsystem/plugins/__init__.py +2 -1
  249. exonware/xwsystem/plugins/base.py +6 -5
  250. exonware/xwsystem/plugins/contracts.py +94 -158
  251. exonware/xwsystem/plugins/defs.py +2 -1
  252. exonware/xwsystem/plugins/errors.py +2 -1
  253. exonware/xwsystem/py.typed +3 -0
  254. exonware/xwsystem/query/__init__.py +36 -0
  255. exonware/xwsystem/query/contracts.py +56 -0
  256. exonware/xwsystem/query/errors.py +22 -0
  257. exonware/xwsystem/query/registry.py +128 -0
  258. exonware/xwsystem/runtime/__init__.py +2 -1
  259. exonware/xwsystem/runtime/base.py +4 -3
  260. exonware/xwsystem/runtime/contracts.py +39 -60
  261. exonware/xwsystem/runtime/defs.py +2 -1
  262. exonware/xwsystem/runtime/env.py +11 -9
  263. exonware/xwsystem/runtime/errors.py +2 -1
  264. exonware/xwsystem/runtime/reflection.py +3 -2
  265. exonware/xwsystem/security/__init__.py +68 -11
  266. exonware/xwsystem/security/audit.py +167 -0
  267. exonware/xwsystem/security/base.py +121 -24
  268. exonware/xwsystem/security/contracts.py +91 -146
  269. exonware/xwsystem/security/crypto.py +17 -16
  270. exonware/xwsystem/security/defs.py +2 -1
  271. exonware/xwsystem/security/errors.py +2 -1
  272. exonware/xwsystem/security/facade.py +321 -0
  273. exonware/xwsystem/security/file_security.py +330 -0
  274. exonware/xwsystem/security/hazmat.py +11 -8
  275. exonware/xwsystem/security/monitor.py +372 -0
  276. exonware/xwsystem/security/path_validator.py +140 -18
  277. exonware/xwsystem/security/policy.py +357 -0
  278. exonware/xwsystem/security/resource_limits.py +1 -0
  279. exonware/xwsystem/security/validator.py +455 -0
  280. exonware/xwsystem/shared/__init__.py +14 -1
  281. exonware/xwsystem/shared/base.py +285 -2
  282. exonware/xwsystem/shared/contracts.py +415 -126
  283. exonware/xwsystem/shared/defs.py +2 -1
  284. exonware/xwsystem/shared/errors.py +2 -2
  285. exonware/xwsystem/shared/xwobject.py +316 -0
  286. exonware/xwsystem/structures/__init__.py +1 -0
  287. exonware/xwsystem/structures/base.py +3 -2
  288. exonware/xwsystem/structures/circular_detector.py +15 -14
  289. exonware/xwsystem/structures/contracts.py +53 -76
  290. exonware/xwsystem/structures/defs.py +2 -1
  291. exonware/xwsystem/structures/errors.py +2 -1
  292. exonware/xwsystem/structures/tree_walker.py +2 -1
  293. exonware/xwsystem/threading/__init__.py +21 -4
  294. exonware/xwsystem/threading/async_primitives.py +6 -5
  295. exonware/xwsystem/threading/base.py +3 -2
  296. exonware/xwsystem/threading/contracts.py +87 -143
  297. exonware/xwsystem/threading/defs.py +2 -1
  298. exonware/xwsystem/threading/errors.py +2 -1
  299. exonware/xwsystem/threading/facade.py +175 -0
  300. exonware/xwsystem/threading/locks.py +1 -0
  301. exonware/xwsystem/threading/safe_factory.py +1 -0
  302. exonware/xwsystem/utils/__init__.py +40 -0
  303. exonware/xwsystem/utils/base.py +22 -21
  304. exonware/xwsystem/utils/contracts.py +50 -73
  305. exonware/xwsystem/utils/dt/__init__.py +19 -3
  306. exonware/xwsystem/utils/dt/base.py +5 -4
  307. exonware/xwsystem/utils/dt/contracts.py +22 -29
  308. exonware/xwsystem/utils/dt/defs.py +2 -1
  309. exonware/xwsystem/utils/dt/errors.py +2 -5
  310. exonware/xwsystem/utils/dt/formatting.py +88 -2
  311. exonware/xwsystem/utils/dt/humanize.py +10 -9
  312. exonware/xwsystem/utils/dt/parsing.py +56 -5
  313. exonware/xwsystem/utils/dt/timezone_utils.py +2 -24
  314. exonware/xwsystem/utils/errors.py +2 -4
  315. exonware/xwsystem/utils/paths.py +1 -0
  316. exonware/xwsystem/utils/string.py +49 -0
  317. exonware/xwsystem/utils/test_runner.py +185 -0
  318. exonware/xwsystem/utils/utils_contracts.py +2 -1
  319. exonware/xwsystem/utils/web.py +110 -0
  320. exonware/xwsystem/validation/__init__.py +25 -1
  321. exonware/xwsystem/validation/base.py +6 -5
  322. exonware/xwsystem/validation/contracts.py +29 -41
  323. exonware/xwsystem/validation/data_validator.py +1 -0
  324. exonware/xwsystem/validation/declarative.py +11 -8
  325. exonware/xwsystem/validation/defs.py +2 -1
  326. exonware/xwsystem/validation/errors.py +2 -1
  327. exonware/xwsystem/validation/facade.py +198 -0
  328. exonware/xwsystem/validation/fluent_validator.py +22 -19
  329. exonware/xwsystem/validation/schema_discovery.py +210 -0
  330. exonware/xwsystem/validation/type_safety.py +2 -1
  331. exonware/xwsystem/version.py +2 -2
  332. {exonware_xwsystem-0.1.0.1.dist-info → exonware_xwsystem-0.1.0.4.dist-info}/METADATA +71 -4
  333. exonware_xwsystem-0.1.0.4.dist-info/RECORD +337 -0
  334. exonware/xwsystem/cli/__init__.py +0 -43
  335. exonware/xwsystem/cli/console.py +0 -113
  336. exonware/xwsystem/cli/defs.py +0 -134
  337. exonware/xwsystem/conf.py +0 -44
  338. exonware/xwsystem/security/auth.py +0 -484
  339. exonware_xwsystem-0.1.0.1.dist-info/RECORD +0 -284
  340. {exonware_xwsystem-0.1.0.1.dist-info → exonware_xwsystem-0.1.0.4.dist-info}/WHEEL +0 -0
  341. {exonware_xwsystem-0.1.0.1.dist-info → exonware_xwsystem-0.1.0.4.dist-info}/licenses/LICENSE +0 -0
@@ -1,3 +1,4 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/console/cli/args.py
1
2
  """
2
3
  Argument Parsing Utilities
3
4
  =========================
@@ -7,13 +8,15 @@ Production-grade CLI argument parsing for XWSystem.
7
8
  Company: eXonware.com
8
9
  Author: Eng. Muhammad AlShehri
9
10
  Email: connect@exonware.com
10
- Version: 0.1.0.1
11
+ Version: 0.1.0.4
11
12
  Generated: 2025-01-27
12
13
  """
13
14
 
15
+ from __future__ import annotations
16
+
14
17
  import argparse
15
18
  import sys
16
- from typing import Any, Optional, Callable, Union
19
+ from typing import Any, Optional, Callable
17
20
  from dataclasses import dataclass
18
21
  import logging
19
22
  from .defs import ArgumentType
@@ -22,7 +25,7 @@ logger = logging.getLogger(__name__)
22
25
 
23
26
 
24
27
  @dataclass
25
- class Argument:
28
+ class CliArgument:
26
29
  """
27
30
  Definition of a command-line argument.
28
31
 
@@ -43,7 +46,7 @@ class Argument:
43
46
  choices: Optional[list[str]] = None
44
47
  validator: Optional[Callable[[Any], bool]] = None
45
48
  action: str = "store" # store, store_true, store_false, append, count
46
- nargs: Optional[Union[int, str]] = None # Number of arguments
49
+ nargs: Optional[int | str] = None # Number of arguments
47
50
 
48
51
  def __post_init__(self):
49
52
  """Validate argument configuration."""
@@ -58,7 +61,7 @@ class Argument:
58
61
 
59
62
 
60
63
  @dataclass
61
- class Command:
64
+ class CliCommand:
62
65
  """
63
66
  Definition of a CLI command.
64
67
 
@@ -72,8 +75,8 @@ class Command:
72
75
  name: str
73
76
  handler: Callable
74
77
  description: str = ""
75
- arguments: list[Argument] = None
76
- subcommands: list['Command'] = None
78
+ arguments: list[CliArgument] = None
79
+ subcommands: list[CliCommand] = None
77
80
  examples: list[str] = None
78
81
 
79
82
  def __post_init__(self):
@@ -86,7 +89,7 @@ class Command:
86
89
  self.examples = []
87
90
 
88
91
 
89
- class ArgumentParser:
92
+ class CliArgumentParser:
90
93
  """
91
94
  Production-grade argument parser built on argparse.
92
95
 
@@ -134,11 +137,11 @@ class ArgumentParser:
134
137
  )
135
138
 
136
139
  # Command registry
137
- self._commands: dict[str, Command] = {}
140
+ self._commands: dict[str, CliCommand] = {}
138
141
  self._subparsers = None
139
- self._global_arguments: list[Argument] = []
142
+ self._global_arguments: list[CliArgument] = []
140
143
 
141
- def add_argument(self, argument: Argument) -> 'ArgumentParser':
144
+ def add_argument(self, argument: CliArgument) -> CliArgumentParser:
142
145
  """
143
146
  Add a global argument to the parser.
144
147
 
@@ -152,7 +155,7 @@ class ArgumentParser:
152
155
  self._add_argument_to_parser(self._parser, argument)
153
156
  return self
154
157
 
155
- def add_command(self, command: Command) -> 'ArgumentParser':
158
+ def add_command(self, command: CliCommand) -> CliArgumentParser:
156
159
  """
157
160
  Add a command to the parser.
158
161
 
@@ -201,7 +204,7 @@ class ArgumentParser:
201
204
 
202
205
  return self
203
206
 
204
- def _add_subcommand(self, subparsers, command: Command, parent_name: str):
207
+ def _add_subcommand(self, subparsers, command: CliCommand, parent_name: str):
205
208
  """Add a subcommand to a subparser."""
206
209
  subcmd_parser = subparsers.add_parser(
207
210
  command.name,
@@ -216,7 +219,7 @@ class ArgumentParser:
216
219
  full_name = f"{parent_name}.{command.name}"
217
220
  self._commands[full_name] = command
218
221
 
219
- def _add_argument_to_parser(self, parser: argparse.ArgumentParser, argument: Argument):
222
+ def _add_argument_to_parser(self, parser: argparse.ArgumentParser, argument: CliArgument):
220
223
  """Add an argument to an argparse parser."""
221
224
  kwargs = {
222
225
  'help': argument.help_text,
@@ -340,9 +343,9 @@ class ArgumentParser:
340
343
 
341
344
 
342
345
  # Utility functions for common argument types
343
- def create_file_argument(name: str, required: bool = False, help_text: str = "") -> Argument:
346
+ def create_file_argument(name: str, required: bool = False, help_text: str = "") -> CliArgument:
344
347
  """Create a file input argument."""
345
- return Argument(
348
+ return CliArgument(
346
349
  name=name,
347
350
  arg_type=ArgumentType.FILE,
348
351
  required=required,
@@ -350,18 +353,18 @@ def create_file_argument(name: str, required: bool = False, help_text: str = "")
350
353
  )
351
354
 
352
355
 
353
- def create_output_argument(name: str = "output", help_text: str = "") -> Argument:
356
+ def create_output_argument(name: str = "output", help_text: str = "") -> CliArgument:
354
357
  """Create an output file argument."""
355
- return Argument(
358
+ return CliArgument(
356
359
  name=name,
357
360
  arg_type=ArgumentType.STRING,
358
361
  help_text=help_text or "Output file path"
359
362
  )
360
363
 
361
364
 
362
- def create_verbose_argument() -> Argument:
365
+ def create_verbose_argument() -> CliArgument:
363
366
  """Create a verbose flag argument."""
364
- return Argument(
367
+ return CliArgument(
365
368
  name="verbose",
366
369
  short_name="-v",
367
370
  action="store_true",
@@ -369,9 +372,9 @@ def create_verbose_argument() -> Argument:
369
372
  )
370
373
 
371
374
 
372
- def create_quiet_argument() -> Argument:
375
+ def create_quiet_argument() -> CliArgument:
373
376
  """Create a quiet flag argument."""
374
- return Argument(
377
+ return CliArgument(
375
378
  name="quiet",
376
379
  short_name="-q",
377
380
  action="store_true",
@@ -379,9 +382,9 @@ def create_quiet_argument() -> Argument:
379
382
  )
380
383
 
381
384
 
382
- def create_config_argument() -> Argument:
385
+ def create_config_argument() -> CliArgument:
383
386
  """Create a configuration file argument."""
384
- return Argument(
387
+ return CliArgument(
385
388
  name="config",
386
389
  short_name="-c",
387
390
  arg_type=ArgumentType.FILE,
@@ -1,50 +1,41 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/console/cli/base.py
1
2
  #exonware/xwsystem/cli/base.py
2
3
  """
3
4
  Company: eXonware.com
4
5
  Author: Eng. Muhammad AlShehri
5
6
  Email: connect@exonware.com
6
- Version: 0.1.0.1
7
+ Version: 0.1.0.4
7
8
  Generation Date: September 04, 2025
8
9
 
9
10
  CLI module base classes - abstract classes for command-line interface functionality.
10
11
  """
11
12
 
12
13
  from abc import ABC, abstractmethod
13
- from typing import Any, Optional, Union
14
+ from typing import Any, Optional
14
15
  from .contracts import ColorType, ProgressStyle, TableStyle, PromptType, ICLI
15
- from ..version import __version__
16
+ from ..base import AConsoleWriter
17
+ from exonware.xwsystem.version import __version__
16
18
 
17
19
 
18
- class AConsoleBase(ABC):
19
- """Abstract base class for console operations."""
20
+ class AConsoleBase(AConsoleWriter):
21
+ """
22
+ Abstract base class for console operations (CLI-specific).
20
23
 
21
- @abstractmethod
22
- def print(self, text: str, color: Optional[ColorType] = None, **kwargs) -> None:
23
- """Print text to console."""
24
- pass
24
+ Extends AConsoleWriter from console level to add CLI-specific methods.
25
+ """
25
26
 
26
27
  @abstractmethod
27
- def input(self, prompt: str, **kwargs) -> str:
28
- """Get input from user."""
29
- pass
30
-
31
- @abstractmethod
32
- def clear(self) -> None:
33
- """Clear console screen."""
28
+ def print(self, text: str, color: Optional[ColorType] = None, **kwargs) -> None:
29
+ """Print text to console with optional color."""
34
30
  pass
35
31
 
36
32
  @abstractmethod
37
33
  def get_size(self) -> tuple[int, int]:
38
34
  """Get console size."""
39
35
  pass
40
-
41
- @abstractmethod
42
- def is_interactive(self) -> bool:
43
- """Check if console is interactive."""
44
- pass
45
36
 
46
37
 
47
- class AProgressBarBase(ABC):
38
+ class CliAProgressBarBase(ABC):
48
39
  """Abstract base class for progress bar operations."""
49
40
 
50
41
  def __init__(self, total: int, description: str = "", style: ProgressStyle = ProgressStyle.BAR):
@@ -82,7 +73,7 @@ class AProgressBarBase(ABC):
82
73
  pass
83
74
 
84
75
 
85
- class ATableBase(ABC):
76
+ class CliATableBase(ABC):
86
77
  """Abstract base class for table operations."""
87
78
 
88
79
  def __init__(self, headers: list[str], style: TableStyle = TableStyle.SIMPLE):
@@ -118,7 +109,7 @@ class ATableBase(ABC):
118
109
  pass
119
110
 
120
111
 
121
- class APromptBase(ABC):
112
+ class CliAPromptBase(ABC):
122
113
  """Abstract base class for user prompts."""
123
114
 
124
115
  @abstractmethod
@@ -142,7 +133,7 @@ class APromptBase(ABC):
142
133
  pass
143
134
 
144
135
 
145
- class AArgumentParserBase(ABC):
136
+ class CliAArgumentParserBase(ABC):
146
137
  """Abstract base class for argument parsing."""
147
138
 
148
139
  def __init__(self, description: str = ""):
@@ -176,7 +167,7 @@ class AArgumentParserBase(ABC):
176
167
  pass
177
168
 
178
169
 
179
- class AColorBase(ABC):
170
+ class CliAColorBase(ABC):
180
171
  """Abstract base class for color operations."""
181
172
 
182
173
  @abstractmethod
@@ -195,69 +186,9 @@ class AColorBase(ABC):
195
186
  pass
196
187
 
197
188
 
198
- class BaseCLI(ICLI):
189
+ class CliBase(ICLI):
199
190
  """Base CLI implementation."""
200
191
 
201
- def __init__(self, name: str = "xwsystem", version: str = None):
202
- """Initialize the CLI.
203
-
204
- Args:
205
- name: CLI name
206
- version: CLI version (defaults to package version)
207
- """
208
- self._name = name
209
- self._version = version or __version__
210
- self._commands: dict[str, Any] = {}
211
- self._options: dict[str, Any] = {}
212
-
213
- @property
214
- def name(self) -> str:
215
- """Get CLI name."""
216
- return self._name
217
-
218
- @property
219
- def version(self) -> str:
220
- """Get CLI version."""
221
- return self._version
222
-
223
- def add_command(self, name: str, command: Any) -> None:
224
- """Add a command to the CLI.
225
-
226
- Args:
227
- name: Command name
228
- command: Command implementation
229
- """
230
- self._commands[name] = command
231
-
232
- def add_option(self, name: str, option: Any) -> None:
233
- """Add an option to the CLI.
234
-
235
- Args:
236
- name: Option name
237
- option: Option implementation
238
- """
239
- self._options[name] = option
240
-
241
- def run(self, args: Optional[list[str]] = None) -> int:
242
- """Run the CLI.
243
-
244
- Args:
245
- args: Command line arguments
246
-
247
- Returns:
248
- Exit code
249
- """
250
- # Basic implementation - can be overridden
251
- return 0
252
-
253
- def get_help(self) -> str:
254
- """Get help text."""
255
- return f"{self._name} v{self._version} - XWSystem CLI"
256
-
257
-
258
- class BaseCLI(ICLI):
259
- """Base CLI implementation for backward compatibility."""
260
-
261
192
  def __init__(self, name: str = "xwsystem", version: str = None):
262
193
  """Initialize base CLI."""
263
194
  self._name = name
@@ -1,8 +1,9 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/console/cli/colors.py
1
2
  """
2
3
  Company: eXonware.com
3
4
  Author: Eng. Muhammad AlShehri
4
5
  Email: connect@exonware.com
5
- Version: 0.1.0.1
6
+ Version: 0.1.0.4
6
7
  Generation Date: September 05, 2025
7
8
 
8
9
  Colored terminal output utilities with cross-platform support.
@@ -10,8 +11,9 @@ Colored terminal output utilities with cross-platform support.
10
11
 
11
12
  import os
12
13
  import sys
13
- from typing import Optional, Union
14
- from .defs import Colors, Style
14
+ from typing import Optional
15
+ # Import general console enums from console level (priority)
16
+ from ..defs import Colors, Style
15
17
 
16
18
  # Explicit import - colorama is a required dependency for CLI functionality
17
19
  # This ensures consistent cross-platform colored output
@@ -19,12 +21,12 @@ from .defs import Colors, Style
19
21
  import colorama
20
22
  colorama.init(autoreset=True)
21
23
 
22
- from ..config.logging_setup import get_logger
24
+ from ...config.logging_setup import get_logger
23
25
 
24
26
  logger = get_logger("xwsystem.cli.colors")
25
27
 
26
28
 
27
- class ColoredOutput:
29
+ class CliColoredOutput:
28
30
  """
29
31
  Cross-platform colored terminal output.
30
32
 
@@ -73,7 +75,7 @@ class ColoredOutput:
73
75
  if 'color' in term or term in ('xterm', 'xterm-256color', 'screen', 'tmux'):
74
76
  return True
75
77
 
76
- # Lazy installation ensures colorama is always available
78
+ # Lazy installation provides colorama when available
77
79
  # Works on all platforms
78
80
  return True
79
81
 
@@ -81,7 +83,7 @@ class ColoredOutput:
81
83
  """Check if colored output is supported."""
82
84
  return self._supports_color
83
85
 
84
- def colorize(self, text: str, color: Union[Colors, str], style: Optional[Union[Style, str]] = None) -> str:
86
+ def colorize(self, text: str, color: Colors | str, style: Optional[Style | str] = None) -> str:
85
87
  """
86
88
  Apply color and style to text.
87
89
 
@@ -114,8 +116,8 @@ class ColoredOutput:
114
116
  else:
115
117
  return f"{color_str}{text}"
116
118
 
117
- def print_colored(self, text: str, color: Union[Colors, str],
118
- style: Optional[Union[Style, str]] = None, **kwargs) -> None:
119
+ def print_colored(self, text: str, color: Colors | str,
120
+ style: Optional[Style | str] = None, **kwargs) -> None:
119
121
  """
120
122
  Print colored text.
121
123
 
@@ -228,15 +230,15 @@ class ColoredOutput:
228
230
 
229
231
 
230
232
  # Global colored output instance
231
- _colored_output = ColoredOutput()
233
+ _colored_output = CliColoredOutput()
232
234
 
233
235
  # Convenience functions
234
- def colorize(text: str, color: Union[Colors, str], style: Optional[Union[Style, str]] = None) -> str:
236
+ def colorize(text: str, color: Colors | str, style: Optional[Style | str] = None) -> str:
235
237
  """Colorize text using global instance."""
236
238
  return _colored_output.colorize(text, color, style)
237
239
 
238
- def print_colored(text: str, color: Union[Colors, str],
239
- style: Optional[Union[Style, str]] = None, **kwargs) -> None:
240
+ def print_colored(text: str, color: Colors | str,
241
+ style: Optional[Style | str] = None, **kwargs) -> None:
240
242
  """Print colored text using global instance."""
241
243
  _colored_output.print_colored(text, color, style, **kwargs)
242
244
 
@@ -0,0 +1,98 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/console/cli/console.py
2
+ """
3
+ Company: eXonware.com
4
+ Author: Eng. Muhammad AlShehri
5
+ Email: connect@exonware.com
6
+ Version: 0.1.0.4
7
+ Generation Date: September 04, 2025
8
+
9
+ Console utilities for CLI operations.
10
+ """
11
+
12
+ import os
13
+ from typing import Optional
14
+ from .contracts import IConsole, ColorType
15
+ from .errors import ConsoleError
16
+ # Import ConsoleWriter from console level (priority)
17
+ from ..writer import ConsoleWriter
18
+
19
+
20
+ class CliConsole(ConsoleWriter, IConsole):
21
+ """
22
+ Console implementation for CLI operations.
23
+
24
+ Extends ConsoleWriter from console level and adds CLI-specific features
25
+ like color support and IConsole interface compliance.
26
+ """
27
+
28
+ def print(self, text: str, color: Optional[ColorType] = None, **kwargs) -> None:
29
+ """
30
+ Print text to console with optional color.
31
+
32
+ Args:
33
+ text: Text to print
34
+ color: Optional color type to apply
35
+ **kwargs: Additional arguments passed to print()
36
+ """
37
+ try:
38
+ if color and self.supports_color():
39
+ text = self._apply_color(text, color)
40
+
41
+ # Use parent's write_line method
42
+ self.write_line(text, **kwargs)
43
+ except Exception as e:
44
+ raise ConsoleError(f"Failed to print to console: {e}")
45
+
46
+ def input(self, prompt: str, **kwargs) -> str:
47
+ """
48
+ Get input from user.
49
+
50
+ Args:
51
+ prompt: Prompt text
52
+ **kwargs: Additional arguments (for compatibility)
53
+
54
+ Returns:
55
+ User input string
56
+ """
57
+ try:
58
+ # Use parent's read method
59
+ return self.read(prompt)
60
+ except Exception as e:
61
+ raise ConsoleError(f"Failed to get input: {e}")
62
+
63
+ def _apply_color(self, text: str, color: ColorType) -> str:
64
+ """Apply color to text."""
65
+ color_codes = {
66
+ ColorType.RESET: '\033[0m',
67
+ ColorType.BOLD: '\033[1m',
68
+ ColorType.DIM: '\033[2m',
69
+ ColorType.UNDERLINE: '\033[4m',
70
+ ColorType.RED: '\033[31m',
71
+ ColorType.GREEN: '\033[32m',
72
+ ColorType.YELLOW: '\033[33m',
73
+ ColorType.BLUE: '\033[34m',
74
+ ColorType.MAGENTA: '\033[35m',
75
+ ColorType.CYAN: '\033[36m',
76
+ ColorType.WHITE: '\033[37m',
77
+ ColorType.GRAY: '\033[90m',
78
+ }
79
+
80
+ code = color_codes.get(color, '')
81
+ return f"{code}{text}\033[0m" if code else text
82
+
83
+ def get_size(self) -> tuple[int, int]:
84
+ """
85
+ Get console size.
86
+
87
+ Returns:
88
+ Tuple of (columns, lines)
89
+ """
90
+ try:
91
+ if hasattr(os, 'get_terminal_size'):
92
+ size = os.get_terminal_size()
93
+ return (size.columns, size.lines)
94
+ else:
95
+ return (80, 24) # Default size
96
+ except (OSError, AttributeError, RuntimeError):
97
+ # Catch specific exceptions - terminal size may not be available
98
+ return (80, 24)