exonware-xwsystem 0.0.1.411__py3-none-any.whl → 0.1.0.3__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 (342) 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 +73 -391
  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 +279 -14
  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 +199 -0
  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 +65 -33
  176. exonware/xwsystem/io/serialization/formats/text/json5.py +8 -4
  177. exonware/xwsystem/io/serialization/formats/text/jsonlines.py +113 -25
  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 +16 -0
  183. exonware/xwsystem/io/serialization/parsers/base.py +60 -0
  184. exonware/xwsystem/io/serialization/parsers/hybrid_parser.py +62 -0
  185. exonware/xwsystem/io/serialization/parsers/msgspec_parser.py +48 -0
  186. exonware/xwsystem/io/serialization/parsers/orjson_direct_parser.py +54 -0
  187. exonware/xwsystem/io/serialization/parsers/orjson_parser.py +62 -0
  188. exonware/xwsystem/io/serialization/parsers/pysimdjson_parser.py +55 -0
  189. exonware/xwsystem/io/serialization/parsers/rapidjson_parser.py +53 -0
  190. exonware/xwsystem/io/serialization/parsers/registry.py +91 -0
  191. exonware/xwsystem/io/serialization/parsers/standard.py +44 -0
  192. exonware/xwsystem/io/serialization/parsers/ujson_parser.py +53 -0
  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 +139 -480
  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 +4 -4
  332. {exonware_xwsystem-0.0.1.411.dist-info → exonware_xwsystem-0.1.0.3.dist-info}/METADATA +71 -4
  333. exonware_xwsystem-0.1.0.3.dist-info/RECORD +337 -0
  334. exonware/xwsystem/caching/USAGE_GUIDE.md +0 -779
  335. exonware/xwsystem/cli/__init__.py +0 -43
  336. exonware/xwsystem/cli/console.py +0 -113
  337. exonware/xwsystem/cli/defs.py +0 -134
  338. exonware/xwsystem/conf.py +0 -44
  339. exonware/xwsystem/security/auth.py +0 -484
  340. exonware_xwsystem-0.0.1.411.dist-info/RECORD +0 -274
  341. {exonware_xwsystem-0.0.1.411.dist-info → exonware_xwsystem-0.1.0.3.dist-info}/WHEEL +0 -0
  342. {exonware_xwsystem-0.0.1.411.dist-info → exonware_xwsystem-0.1.0.3.dist-info}/licenses/LICENSE +0 -0
@@ -1,3 +1,4 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/config/version_manager.py
1
2
  """
2
3
  Centralized version management for eXonware projects.
3
4
 
@@ -0,0 +1,27 @@
1
+ """
2
+ #exonware/xwsystem/src/exonware/xwsystem/config.py
3
+
4
+ Package-level configuration entry points for xwsystem.
5
+
6
+ Company: eXonware.com
7
+ Author: Eng. Muhammad AlShehri
8
+ Email: connect@exonware.com
9
+ Version: 0.1.0.3
10
+ Last Updated: 29-Jan-2026
11
+
12
+ This module exists to satisfy the canonical structure in GUIDE_31_DEV.md:
13
+ - `config.py` at package root for configuration surfaces.
14
+
15
+ The concrete configuration system lives under `exonware.xwsystem.config`.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ from .config.logging_setup import get_logger, setup_logging
21
+
22
+
23
+ __all__ = [
24
+ "get_logger",
25
+ "setup_logging",
26
+ ]
27
+
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env python3
2
+ #exonware/xwsystem/src/exonware/xwsystem/console/__init__.py
3
+ #exonware/xwsystem/console/__init__.py
4
+ """
5
+ Company: eXonware.com
6
+ Author: Eng. Muhammad AlShehri
7
+ Email: connect@exonware.com
8
+ Version: 0.1.0.3
9
+ Generation Date: 2025-01-27
10
+
11
+ Console module for structured logging and user interaction.
12
+ """
13
+
14
+ from .defs import (
15
+ LogLevel,
16
+ ConsoleEventType,
17
+ ConsoleEvent,
18
+ )
19
+ from .contracts import (
20
+ IEventLogger,
21
+ IConsoleWriter,
22
+ )
23
+ from .base import (
24
+ AEventLogger,
25
+ AConsoleWriter,
26
+ )
27
+ from .event_logger import ConsoleEventLogger
28
+ from .writer import ConsoleWriter
29
+ from .errors import (
30
+ ConsoleError,
31
+ EventLoggerError,
32
+ ConsoleWriterError,
33
+ )
34
+
35
+ __all__ = [
36
+ # Type definitions
37
+ 'LogLevel',
38
+ 'ConsoleEventType',
39
+ 'ConsoleEvent',
40
+ # Interfaces
41
+ 'IEventLogger',
42
+ 'IConsoleWriter',
43
+ # Abstract base classes
44
+ 'AEventLogger',
45
+ 'AConsoleWriter',
46
+ # Implementations
47
+ 'ConsoleEventLogger',
48
+ 'ConsoleWriter',
49
+ # Errors
50
+ 'ConsoleError',
51
+ 'EventLoggerError',
52
+ 'ConsoleWriterError',
53
+ ]
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env python3
2
+ #exonware/xwsystem/src/exonware/xwsystem/console/base.py
3
+ #exonware/xwsystem/console/base.py
4
+ """
5
+ Company: eXonware.com
6
+ Author: Eng. Muhammad AlShehri
7
+ Email: connect@exonware.com
8
+ Version: 0.1.0.3
9
+ Generation Date: 2025-01-27
10
+
11
+ Console module base classes - abstract base classes for console functionality.
12
+ """
13
+
14
+ from abc import ABC, abstractmethod
15
+ from typing import Optional, Any
16
+ from .contracts import IEventLogger, IConsoleWriter
17
+ from .defs import LogLevel, ConsoleEventType, ConsoleEvent
18
+
19
+
20
+ class AEventLogger(ABC, IEventLogger):
21
+ """
22
+ Abstract base class for event logging.
23
+
24
+ All event loggers should extend this class.
25
+ """
26
+
27
+ @abstractmethod
28
+ def log(
29
+ self,
30
+ msg: str,
31
+ source: Optional[str] = None,
32
+ data: Optional[Any] = None,
33
+ color: Optional[str] = None,
34
+ label: Optional[str] = None
35
+ ) -> ConsoleEvent:
36
+ """Log a general message."""
37
+ pass
38
+
39
+ @abstractmethod
40
+ def info(
41
+ self,
42
+ msg: str,
43
+ source: Optional[str] = None,
44
+ data: Optional[Any] = None
45
+ ) -> ConsoleEvent:
46
+ """Log an info message."""
47
+ pass
48
+
49
+ @abstractmethod
50
+ def warn(
51
+ self,
52
+ msg: str,
53
+ source: Optional[str] = None,
54
+ data: Optional[Any] = None
55
+ ) -> ConsoleEvent:
56
+ """Log a warning message."""
57
+ pass
58
+
59
+ @abstractmethod
60
+ def error(
61
+ self,
62
+ msg: str,
63
+ source: Optional[str] = None,
64
+ data: Optional[Any] = None,
65
+ stack: Optional[str] = None
66
+ ) -> ConsoleEvent:
67
+ """Log an error message."""
68
+ pass
69
+
70
+ @abstractmethod
71
+ def debug(
72
+ self,
73
+ msg: str,
74
+ source: Optional[str] = None,
75
+ data: Optional[Any] = None
76
+ ) -> ConsoleEvent:
77
+ """Log a debug message."""
78
+ pass
79
+
80
+ @abstractmethod
81
+ def get_events(
82
+ self,
83
+ event_type: Optional[ConsoleEventType] = None,
84
+ level: Optional[LogLevel] = None,
85
+ source: Optional[str] = None,
86
+ limit: Optional[int] = None
87
+ ) -> list[dict]:
88
+ """Get logged events as dictionaries."""
89
+ pass
90
+
91
+ @abstractmethod
92
+ def clear(self) -> None:
93
+ """Clear all logged events."""
94
+ pass
95
+
96
+ @abstractmethod
97
+ def count(self) -> int:
98
+ """Get the number of logged events."""
99
+ pass
100
+
101
+
102
+ class AConsoleWriter(ABC, IConsoleWriter):
103
+ """
104
+ Abstract base class for console writing (user interaction, not logging).
105
+
106
+ Can be used as a base class for bots and other user interaction systems.
107
+ """
108
+
109
+ @abstractmethod
110
+ def write(self, text: str, **kwargs) -> None:
111
+ """Write text to console."""
112
+ pass
113
+
114
+ @abstractmethod
115
+ def write_line(self, text: str = "", **kwargs) -> None:
116
+ """Write a line to console."""
117
+ pass
118
+
119
+ @abstractmethod
120
+ def read(self, prompt: str = "") -> str:
121
+ """Read input from console."""
122
+ pass
123
+
124
+ @abstractmethod
125
+ def clear(self) -> None:
126
+ """Clear console screen."""
127
+ pass
128
+
129
+
130
+ __all__ = [
131
+ 'AEventLogger',
132
+ 'AConsoleWriter',
133
+ ]
@@ -0,0 +1,61 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/console/cli/__init__.py
2
+ """
3
+ Command Line Interface (CLI) Utilities
4
+ ======================================
5
+
6
+ Production-grade CLI utilities for XSystem.
7
+
8
+ Company: eXonware.com
9
+ Author: Eng. Muhammad AlShehri
10
+ Email: connect@exonware.com
11
+ Version: 0.1.0.3
12
+ Generated: 2025-01-27
13
+ """
14
+
15
+ # Import general console enums from console level (priority)
16
+ from ..defs import Colors, Style, Alignment, BorderStyle
17
+ from .colors import colorize, CliColoredOutput
18
+ from .args import CliArgumentParser, CliArgument, CliCommand, ArgumentType
19
+ from .progress import CliProgressBar, CliSpinnerProgress, CliMultiProgress, CliProgressConfig
20
+ from .tables import CliTable, CliTableFormatter, CliColumn
21
+ from .console import CliConsole
22
+ from .event_logger import CliEventLogger
23
+ from .encoding import ensure_utf8_console
24
+
25
+ __all__ = [
26
+ # General console enums (from console level)
27
+ 'Colors',
28
+ 'Style',
29
+ 'Alignment',
30
+ 'BorderStyle',
31
+
32
+ # Colors
33
+ 'colorize',
34
+ 'CliColoredOutput',
35
+
36
+ # Arguments
37
+ 'CliArgumentParser',
38
+ 'CliArgument',
39
+ 'CliCommand',
40
+ 'ArgumentType',
41
+
42
+ # Progress
43
+ 'CliProgressBar',
44
+ 'CliSpinnerProgress',
45
+ 'CliMultiProgress',
46
+ 'CliProgressConfig',
47
+
48
+ # Tables
49
+ 'CliTable',
50
+ 'CliTableFormatter',
51
+ 'CliColumn',
52
+
53
+ # Console (extends ConsoleWriter from console level)
54
+ 'CliConsole',
55
+
56
+ # Event Logger (extends logging.Logger)
57
+ 'CliEventLogger',
58
+
59
+ # Encoding
60
+ 'ensure_utf8_console',
61
+ ]
@@ -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.0.1.411
11
+ Version: 0.1.0.3
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.0.1.411
7
+ Version: 0.1.0.3
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