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/progress.py
1
2
  """
2
3
  Progress Bar Utilities
3
4
  =====================
@@ -7,24 +8,27 @@ Production-grade progress indicators for XSystem.
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
  Generation Date: September 05, 2025
12
13
  """
13
14
 
15
+ from __future__ import annotations
16
+
14
17
  import sys
15
18
  import time
16
19
  import threading
17
- from typing import Optional, TextIO, Union
20
+ from typing import Optional, TextIO
18
21
  from dataclasses import dataclass
19
22
  import math
20
23
 
21
- # Import colors from our existing color module
22
- # Explicit import - colors module is part of the same package
23
- from .colors import colorize, Colors, Style
24
+ # Import general console enums from console level (priority)
25
+ from ..defs import Colors, Style
26
+ # Import CLI-specific color utilities
27
+ from .colors import colorize
24
28
 
25
29
 
26
30
  @dataclass
27
- class ProgressConfig:
31
+ class CliProgressConfig:
28
32
  """Configuration for progress indicators."""
29
33
  width: int = 50
30
34
  show_percentage: bool = True
@@ -36,7 +40,7 @@ class ProgressConfig:
36
40
  style: str = Style.BOLD
37
41
 
38
42
 
39
- class ProgressBar:
43
+ class CliProgressBar:
40
44
  """
41
45
  Production-grade progress bar with ETA and rate calculation.
42
46
 
@@ -52,7 +56,7 @@ class ProgressBar:
52
56
  def __init__(self,
53
57
  total: int,
54
58
  description: str = "",
55
- config: ProgressConfig = None,
59
+ config: CliProgressConfig = None,
56
60
  file: TextIO = None):
57
61
  """
58
62
  Initialize progress bar.
@@ -65,7 +69,7 @@ class ProgressBar:
65
69
  """
66
70
  self.total = total
67
71
  self.description = description
68
- self.config = config or ProgressConfig()
72
+ self.config = config or CliProgressConfig()
69
73
  self.file = file or sys.stderr
70
74
 
71
75
  # Progress tracking
@@ -100,7 +104,7 @@ class ProgressBar:
100
104
  self._update_rate(current_time)
101
105
  self._last_rate_update = current_time
102
106
 
103
- # Check if we should refresh display
107
+ # Check if to refresh display
104
108
  if (current_time - self.last_update >= self.config.refresh_rate or
105
109
  self.current >= self.total):
106
110
  self._refresh_display()
@@ -240,7 +244,7 @@ class ProgressBar:
240
244
  self.close()
241
245
 
242
246
 
243
- class SpinnerProgress:
247
+ class CliSpinnerProgress:
244
248
  """
245
249
  Spinning progress indicator for indeterminate tasks.
246
250
 
@@ -283,7 +287,7 @@ class SpinnerProgress:
283
287
  self._frame_index = 0
284
288
  self._lock = threading.Lock()
285
289
 
286
- def start(self) -> 'SpinnerProgress':
290
+ def start(self) -> CliSpinnerProgress:
287
291
  """Start the spinner animation."""
288
292
  with self._lock:
289
293
  if not self._running:
@@ -330,7 +334,7 @@ class SpinnerProgress:
330
334
  self.stop()
331
335
 
332
336
 
333
- class MultiProgress:
337
+ class CliMultiProgress:
334
338
  """
335
339
  Multiple progress bars manager.
336
340
 
@@ -357,7 +361,7 @@ class MultiProgress:
357
361
  bar_id: str,
358
362
  total: int,
359
363
  description: str = "",
360
- config: ProgressConfig = None) -> ProgressBar:
364
+ config: CliProgressConfig = None) -> CliProgressBar:
361
365
  """
362
366
  Add a new progress bar.
363
367
 
@@ -375,7 +379,7 @@ class MultiProgress:
375
379
  raise ValueError(f"Progress bar '{bar_id}' already exists")
376
380
 
377
381
  # Create progress bar with custom file to prevent direct output
378
- bar = ProgressBar(total, description, config, file=self)
382
+ bar = CliProgressBar(total, description, config, file=self)
379
383
  self._bars[bar_id] = bar
380
384
  self._active = True
381
385
  return bar
@@ -436,14 +440,14 @@ class MultiProgress:
436
440
 
437
441
 
438
442
  # Utility functions
439
- def create_progress_bar(total: int, description: str = "") -> ProgressBar:
443
+ def create_progress_bar(total: int, description: str = "") -> CliProgressBar:
440
444
  """Create a simple progress bar."""
441
- return ProgressBar(total, description)
445
+ return CliProgressBar(total, description)
442
446
 
443
447
 
444
- def create_spinner(message: str = "Processing...") -> SpinnerProgress:
448
+ def create_spinner(message: str = "Processing...") -> CliSpinnerProgress:
445
449
  """Create a simple spinner."""
446
- return SpinnerProgress(message)
450
+ return CliSpinnerProgress(message)
447
451
 
448
452
 
449
453
  def progress_range(iterable, description: str = ""):
@@ -451,12 +455,12 @@ def progress_range(iterable, description: str = ""):
451
455
  total = len(iterable) if hasattr(iterable, '__len__') else None
452
456
 
453
457
  if total is not None:
454
- with ProgressBar(total, description) as pbar:
458
+ with CliProgressBar(total, description) as pbar:
455
459
  for item in iterable:
456
460
  yield item
457
461
  pbar.update(1)
458
462
  else:
459
463
  # Use spinner for unknown length iterables
460
- with SpinnerProgress(description) as spinner:
464
+ with CliSpinnerProgress(description) as spinner:
461
465
  for item in iterable:
462
466
  yield item
@@ -1,8 +1,9 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/console/cli/prompts.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 04, 2025
7
8
 
8
9
  Interactive prompts - Placeholder.
@@ -21,7 +22,7 @@ def multiselect(message, choices):
21
22
  return choices
22
23
 
23
24
 
24
- class Prompts:
25
+ class CliPrompts:
25
26
  """Interactive prompts manager for CLI operations."""
26
27
 
27
28
  def __init__(self):
@@ -1,3 +1,4 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/console/cli/tables.py
1
2
  """
2
3
  Table Formatting Utilities
3
4
  ==========================
@@ -7,21 +8,23 @@ Production-grade table formatting 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
  Generation Date: September 05, 2025
12
13
  """
13
14
 
15
+ from __future__ import annotations
16
+
14
17
  import sys
15
- from typing import Any, Optional, Union, TextIO, Callable
18
+ from typing import Any, Optional, TextIO, Callable
16
19
  from dataclasses import dataclass
17
- # Import colors from our existing color module
18
- # Explicit import - colors module is part of the same package
19
- from .colors import colorize, Colors, Style
20
- from .defs import Alignment, BorderStyle
20
+ # Import general console enums from console level (priority)
21
+ from ..defs import Alignment, BorderStyle, Colors, Style
22
+ # Import CLI-specific color utilities
23
+ from .colors import colorize
21
24
 
22
25
 
23
26
  @dataclass
24
- class Column:
27
+ class CliColumn:
25
28
  """
26
29
  Table column definition.
27
30
 
@@ -51,7 +54,7 @@ class Column:
51
54
  self.width = min(self.width, self.max_width)
52
55
 
53
56
 
54
- class TableFormatter:
57
+ class CliTableFormatter:
55
58
  """
56
59
  Production-grade table formatter.
57
60
 
@@ -90,7 +93,7 @@ class TableFormatter:
90
93
  self.padding = padding
91
94
  self.border_chars = self.BORDER_CHARS.get(border_style, self.BORDER_CHARS[BorderStyle.ROUNDED])
92
95
 
93
- def format_cell(self, value: Any, column: Column, width: int) -> str:
96
+ def format_cell(self, value: Any, column: CliColumn, width: int) -> str:
94
97
  """Format a cell value according to column specifications."""
95
98
  # Apply custom formatter if provided
96
99
  if column.formatter:
@@ -116,7 +119,7 @@ class TableFormatter:
116
119
 
117
120
  return text
118
121
 
119
- def calculate_widths(self, columns: list[Column], data: list[list[Any]]) -> list[int]:
122
+ def calculate_widths(self, columns: list[CliColumn], data: list[list[Any]]) -> list[int]:
120
123
  """Calculate optimal column widths."""
121
124
  widths = []
122
125
 
@@ -138,7 +141,7 @@ class TableFormatter:
138
141
  return widths
139
142
 
140
143
 
141
- class Table:
144
+ class CliTable:
142
145
  """
143
146
  Production-grade table with advanced formatting capabilities.
144
147
 
@@ -150,39 +153,39 @@ class Table:
150
153
  """
151
154
 
152
155
  def __init__(self,
153
- columns: list[Union[str, Column]] = None,
154
- formatter: TableFormatter = None,
156
+ columns: list[str | CliColumn] = None,
157
+ formatter: CliTableFormatter = None,
155
158
  title: str = ""):
156
159
  """Initialize table."""
157
160
  self.title = title
158
- self.formatter = formatter or TableFormatter()
161
+ self.formatter = formatter or CliTableFormatter()
159
162
 
160
163
  # Process columns
161
164
  self.columns = []
162
165
  if columns:
163
166
  for col in columns:
164
167
  if isinstance(col, str):
165
- self.columns.append(Column(header=col))
168
+ self.columns.append(CliColumn(header=col))
166
169
  else:
167
170
  self.columns.append(col)
168
171
 
169
172
  # Data storage
170
173
  self.rows = []
171
174
 
172
- def add_column(self, column: Union[str, Column]) -> 'Table':
175
+ def add_column(self, column: str | CliColumn) -> CliTable:
173
176
  """Add a column to the table."""
174
177
  if isinstance(column, str):
175
- self.columns.append(Column(header=column))
178
+ self.columns.append(CliColumn(header=column))
176
179
  else:
177
180
  self.columns.append(column)
178
181
  return self
179
182
 
180
- def add_row(self, *values) -> 'Table':
183
+ def add_row(self, *values) -> CliTable:
181
184
  """Add a row to the table."""
182
185
  self.rows.append(list(values))
183
186
  return self
184
187
 
185
- def add_rows(self, rows: list[list[Any]]) -> 'Table':
188
+ def add_rows(self, rows: list[list[Any]]) -> CliTable:
186
189
  """Add multiple rows to the table."""
187
190
  self.rows.extend(rows)
188
191
  return self
@@ -236,18 +239,18 @@ class Table:
236
239
 
237
240
 
238
241
  # Utility functions
239
- def create_simple_table(headers: list[str], rows: list[list[Any]]) -> Table:
242
+ def create_simple_table(headers: list[str], rows: list[list[Any]]) -> CliTable:
240
243
  """Create a simple table with basic formatting."""
241
- table = Table(headers)
244
+ table = CliTable(headers)
242
245
  table.add_rows(rows)
243
246
  return table
244
247
 
245
248
 
246
249
  def print_key_value_table(data: dict[str, Any], title: str = ""):
247
250
  """Print a key-value table."""
248
- table = Table([
249
- Column("Property", header_color=Colors.BLUE, header_style=Style.BOLD),
250
- Column("Value", header_color=Colors.GREEN, header_style=Style.BOLD)
251
+ table = CliTable([
252
+ CliColumn("Property", header_color=Colors.BLUE, header_style=Style.BOLD),
253
+ CliColumn("Value", header_color=Colors.GREEN, header_style=Style.BOLD)
251
254
  ], title=title)
252
255
 
253
256
  for key, value in data.items():
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env python3
2
+ #exonware/xwsystem/src/exonware/xwsystem/console/contracts.py
3
+ #exonware/xwsystem/console/contracts.py
4
+ """
5
+ Company: eXonware.com
6
+ Author: Eng. Muhammad AlShehri
7
+ Email: connect@exonware.com
8
+ Version: 0.1.0.4
9
+ Generation Date: 2025-01-27
10
+
11
+ Console module contracts - interfaces for console functionality.
12
+ """
13
+
14
+ from typing import Protocol, runtime_checkable, Optional, Any
15
+ from .defs import LogLevel, ConsoleEventType, ConsoleEvent
16
+
17
+
18
+ @runtime_checkable
19
+ class IEventLogger(Protocol):
20
+ """Interface for event logging operations."""
21
+
22
+ def log(
23
+ self,
24
+ msg: str,
25
+ source: Optional[str] = None,
26
+ data: Optional[Any] = None,
27
+ color: Optional[str] = None,
28
+ label: Optional[str] = None
29
+ ) -> ConsoleEvent:
30
+ """Log a general message."""
31
+ ...
32
+
33
+ def info(
34
+ self,
35
+ msg: str,
36
+ source: Optional[str] = None,
37
+ data: Optional[Any] = None
38
+ ) -> ConsoleEvent:
39
+ """Log an info message."""
40
+ ...
41
+
42
+ def warn(
43
+ self,
44
+ msg: str,
45
+ source: Optional[str] = None,
46
+ data: Optional[Any] = None
47
+ ) -> ConsoleEvent:
48
+ """Log a warning message."""
49
+ ...
50
+
51
+ def error(
52
+ self,
53
+ msg: str,
54
+ source: Optional[str] = None,
55
+ data: Optional[Any] = None,
56
+ stack: Optional[str] = None
57
+ ) -> ConsoleEvent:
58
+ """Log an error message."""
59
+ ...
60
+
61
+ def debug(
62
+ self,
63
+ msg: str,
64
+ source: Optional[str] = None,
65
+ data: Optional[Any] = None
66
+ ) -> ConsoleEvent:
67
+ """Log a debug message."""
68
+ ...
69
+
70
+ def get_events(
71
+ self,
72
+ event_type: Optional[ConsoleEventType] = None,
73
+ level: Optional[LogLevel] = None,
74
+ source: Optional[str] = None,
75
+ limit: Optional[int] = None
76
+ ) -> list[dict]:
77
+ """Get logged events as dictionaries."""
78
+ ...
79
+
80
+ def clear(self) -> None:
81
+ """Clear all logged events."""
82
+ ...
83
+
84
+ def count(self) -> int:
85
+ """Get the number of logged events."""
86
+ ...
87
+
88
+
89
+ @runtime_checkable
90
+ class IConsoleWriter(Protocol):
91
+ """Interface for console writing operations (user interaction, not logging)."""
92
+
93
+ def write(self, text: str, **kwargs) -> None:
94
+ """Write text to console."""
95
+ ...
96
+
97
+ def write_line(self, text: str = "", **kwargs) -> None:
98
+ """Write a line to console."""
99
+ ...
100
+
101
+ def read(self, prompt: str = "") -> str:
102
+ """Read input from console."""
103
+ ...
104
+
105
+ def clear(self) -> None:
106
+ """Clear console screen."""
107
+ ...
108
+
109
+
110
+ __all__ = [
111
+ 'IEventLogger',
112
+ 'IConsoleWriter',
113
+ ]
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env python3
2
+ #exonware/xwsystem/src/exonware/xwsystem/console/defs.py
3
+ #exonware/xwsystem/console/defs.py
4
+ """
5
+ Company: eXonware.com
6
+ Author: Eng. Muhammad AlShehri
7
+ Email: connect@exonware.com
8
+ Version: 0.1.0.4
9
+ Generation Date: 2025-01-27
10
+
11
+ Type definitions and constants for console module.
12
+ """
13
+
14
+ from typing import Literal, Any, Optional
15
+ from dataclasses import dataclass
16
+ from enum import Enum
17
+
18
+
19
+ # ============================================================================
20
+ # TYPE DEFINITIONS FOR STRUCTURED LOGGING
21
+ # ============================================================================
22
+
23
+ LogLevel = Literal['log', 'error', 'warn', 'info', 'debug']
24
+ ConsoleEventType = Literal[
25
+ 'log', 'info', 'warn', 'error', 'debug', 'trace',
26
+ 'group', 'groupCollapsed', 'groupEnd', 'table', 'success', 'system'
27
+ ]
28
+
29
+
30
+ @dataclass
31
+ class ConsoleEvent:
32
+ """
33
+ Console event structure for structured logging.
34
+
35
+ Attributes:
36
+ id: Unique identifier for the event
37
+ type: Type of console event
38
+ timestamp: Unix timestamp (seconds or milliseconds) or ISO string
39
+ color: CSS color for the event display
40
+ label: Short label for the badge
41
+ msg: Human-readable message
42
+ source: Optional source/operation/module name
43
+ level: Optional explicit log level (overrides type mapping)
44
+ data: Optional additional structured data
45
+ """
46
+ id: int
47
+ type: ConsoleEventType
48
+ timestamp: float | int | str # Unix timestamp or ISO string
49
+ color: str
50
+ label: str
51
+ msg: str
52
+ source: Optional[str] = None
53
+ level: Optional[LogLevel] = None
54
+ data: Optional[Any] = None
55
+
56
+ def to_dict(self) -> dict:
57
+ """Convert to dictionary for JSON serialization."""
58
+ result = {
59
+ 'id': self.id,
60
+ 'type': self.type,
61
+ 'timestamp': self.timestamp,
62
+ 'color': self.color,
63
+ 'label': self.label,
64
+ 'msg': self.msg,
65
+ }
66
+ if self.source is not None:
67
+ result['source'] = self.source
68
+ if self.level is not None:
69
+ result['level'] = self.level
70
+ if self.data is not None:
71
+ result['data'] = self.data
72
+ return result
73
+
74
+
75
+ # ============================================================================
76
+ # GENERAL CONSOLE ENUMS (moved from CLI - general console concepts)
77
+ # ============================================================================
78
+
79
+ class Alignment(Enum):
80
+ """Text alignment options."""
81
+ LEFT = "left"
82
+ CENTER = "center"
83
+ RIGHT = "right"
84
+
85
+
86
+ class BorderStyle(Enum):
87
+ """Table border styles."""
88
+ NONE = "none"
89
+ ASCII = "ascii"
90
+ SIMPLE = "simple"
91
+ ROUNDED = "rounded"
92
+ DOUBLE = "double"
93
+ THICK = "thick"
94
+
95
+
96
+ class Colors(Enum):
97
+ """ANSI color codes."""
98
+ # Standard colors
99
+ BLACK = "\033[30m"
100
+ RED = "\033[31m"
101
+ GREEN = "\033[32m"
102
+ YELLOW = "\033[33m"
103
+ BLUE = "\033[34m"
104
+ MAGENTA = "\033[35m"
105
+ CYAN = "\033[36m"
106
+ WHITE = "\033[37m"
107
+
108
+ # Bright colors
109
+ BRIGHT_BLACK = "\033[90m"
110
+ BRIGHT_RED = "\033[91m"
111
+ BRIGHT_GREEN = "\033[92m"
112
+ BRIGHT_YELLOW = "\033[93m"
113
+ BRIGHT_BLUE = "\033[94m"
114
+ BRIGHT_MAGENTA = "\033[95m"
115
+ BRIGHT_CYAN = "\033[96m"
116
+ BRIGHT_WHITE = "\033[97m"
117
+
118
+ # Background colors
119
+ BG_BLACK = "\033[40m"
120
+ BG_RED = "\033[41m"
121
+ BG_GREEN = "\033[42m"
122
+ BG_YELLOW = "\033[43m"
123
+ BG_BLUE = "\033[44m"
124
+ BG_MAGENTA = "\033[45m"
125
+ BG_CYAN = "\033[46m"
126
+ BG_WHITE = "\033[47m"
127
+
128
+ # Reset
129
+ RESET = "\033[0m"
130
+
131
+
132
+ class Style(Enum):
133
+ """ANSI style codes."""
134
+ RESET = "\033[0m"
135
+ BOLD = "\033[1m"
136
+ DIM = "\033[2m"
137
+ ITALIC = "\033[3m"
138
+ UNDERLINE = "\033[4m"
139
+ BLINK = "\033[5m"
140
+ REVERSE = "\033[7m"
141
+ STRIKETHROUGH = "\033[9m"
142
+
143
+
144
+ __all__ = [
145
+ # Structured logging types
146
+ 'LogLevel',
147
+ 'ConsoleEventType',
148
+ 'ConsoleEvent',
149
+ # General console enums
150
+ 'Alignment',
151
+ 'BorderStyle',
152
+ 'Colors',
153
+ 'Style',
154
+ ]
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env python3
2
+ #exonware/xwsystem/src/exonware/xwsystem/console/errors.py
3
+ #exonware/xwsystem/console/errors.py
4
+ """
5
+ Company: eXonware.com
6
+ Author: Eng. Muhammad AlShehri
7
+ Email: connect@exonware.com
8
+ Version: 0.1.0.4
9
+ Generation Date: 2025-01-27
10
+
11
+ Console module errors - exception classes for console functionality.
12
+ """
13
+
14
+
15
+ class ConsoleError(Exception):
16
+ """Base exception for console errors."""
17
+ pass
18
+
19
+
20
+ class EventLoggerError(ConsoleError):
21
+ """Raised when event logger operation fails."""
22
+ pass
23
+
24
+
25
+ class ConsoleWriterError(ConsoleError):
26
+ """Raised when console writer operation fails."""
27
+ pass
28
+
29
+
30
+ __all__ = [
31
+ 'ConsoleError',
32
+ 'EventLoggerError',
33
+ 'ConsoleWriterError',
34
+ ]