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,10 +1,11 @@
1
1
  #!/usr/bin/env python3
2
+ #exonware/xwsystem/src/exonware/xwsystem/threading/defs.py
2
3
  #exonware/xwsystem/threading/types.py
3
4
  """
4
5
  Company: eXonware.com
5
6
  Author: Eng. Muhammad AlShehri
6
7
  Email: connect@exonware.com
7
- Version: 0.1.0.1
8
+ Version: 0.1.0.4
8
9
  Generation Date: 07-Sep-2025
9
10
 
10
11
  Threading types and enums for XWSystem.
@@ -1,9 +1,10 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/threading/errors.py
1
2
  #exonware/xwsystem/threading/errors.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
  Threading module errors - exception classes for threading functionality.
@@ -0,0 +1,175 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/threading/facade.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: January 2026
8
+
9
+ XWConcurrency - Unified Concurrency Facade
10
+
11
+ Simplified API for threading and concurrency:
12
+ - Thread-safe factories
13
+ - Async primitives
14
+ - Thread pools
15
+ - Process pools
16
+ """
17
+
18
+ from typing import Any, Optional, Callable, List
19
+ from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
20
+
21
+ from .safe_factory import ThreadSafeFactory, MethodGenerator
22
+ from .async_primitives import (
23
+ AsyncLock,
24
+ AsyncSemaphore,
25
+ AsyncEvent,
26
+ AsyncQueue,
27
+ AsyncCondition,
28
+ AsyncResourcePool,
29
+ )
30
+ from ..config.logging_setup import get_logger
31
+
32
+ logger = get_logger(__name__)
33
+
34
+
35
+ class XWConcurrency:
36
+ """
37
+ Unified concurrency facade - simple API for threading operations.
38
+
39
+ Examples:
40
+ >>> # Thread-safe factory
41
+ >>> factory = XWConcurrency.Factory()
42
+ >>> factory.register("handler", MyHandler, thread_safe=True)
43
+
44
+ >>> # Async primitives
45
+ >>> lock = XWConcurrency.Lock()
46
+ >>> queue = XWConcurrency.Queue()
47
+ >>> semaphore = XWConcurrency.Semaphore(5)
48
+
49
+ >>> # Thread pool
50
+ >>> with XWConcurrency.Pool(workers=4) as pool:
51
+ ... results = pool.map(process_item, items)
52
+
53
+ >>> # Process pool
54
+ >>> with XWConcurrency.ProcessPool(workers=4) as pool:
55
+ ... results = pool.map(cpu_intensive_task, items)
56
+ """
57
+
58
+ class Factory:
59
+ """Thread-safe factory."""
60
+
61
+ def __init__(self):
62
+ self._factory = ThreadSafeFactory()
63
+
64
+ def register(self, name: str, handler_class: type, thread_safe: bool = True) -> None:
65
+ """Register handler with factory."""
66
+ # ThreadSafeFactory.register doesn't take thread_safe parameter
67
+ self._factory.register(name, handler_class)
68
+
69
+ def get(self, name: str, *args, **kwargs) -> Any:
70
+ """Get handler instance."""
71
+ # ThreadSafeFactory uses create() method, not get()
72
+ handler_class = self._factory.get_handler(name)
73
+ if handler_class:
74
+ return handler_class(*args, **kwargs)
75
+ return None
76
+
77
+ @staticmethod
78
+ def Lock() -> AsyncLock:
79
+ """Create async lock."""
80
+ return AsyncLock()
81
+
82
+ @staticmethod
83
+ def Semaphore(value: int = 1) -> AsyncSemaphore:
84
+ """Create async semaphore."""
85
+ return AsyncSemaphore(value)
86
+
87
+ @staticmethod
88
+ def Event() -> AsyncEvent:
89
+ """Create async event."""
90
+ return AsyncEvent()
91
+
92
+ @staticmethod
93
+ def Queue(maxsize: int = 0) -> AsyncQueue:
94
+ """Create async queue."""
95
+ return AsyncQueue(maxsize)
96
+
97
+ @staticmethod
98
+ def Condition(lock: Optional[AsyncLock] = None) -> AsyncCondition:
99
+ """Create async condition."""
100
+ return AsyncCondition(lock)
101
+
102
+ @staticmethod
103
+ def ResourcePool(factory: Callable, max_size: int = 10) -> AsyncResourcePool:
104
+ """Create async resource pool."""
105
+ return AsyncResourcePool(factory, max_size)
106
+
107
+ class Pool:
108
+ """Thread pool executor."""
109
+
110
+ def __init__(self, workers: int = 4):
111
+ """
112
+ Initialize thread pool.
113
+
114
+ Args:
115
+ workers: Number of worker threads
116
+ """
117
+ self.workers = workers
118
+ self._pool: Optional[ThreadPoolExecutor] = None
119
+
120
+ def __enter__(self):
121
+ """Context manager entry."""
122
+ self._pool = ThreadPoolExecutor(max_workers=self.workers)
123
+ return self
124
+
125
+ def __exit__(self, exc_type, exc_val, exc_tb):
126
+ """Context manager exit."""
127
+ if self._pool:
128
+ self._pool.shutdown(wait=True)
129
+
130
+ def map(self, func: Callable, items: List[Any]) -> List[Any]:
131
+ """Map function over items using thread pool."""
132
+ if not self._pool:
133
+ raise RuntimeError("Pool not started. Use as context manager.")
134
+ return list(self._pool.map(func, items))
135
+
136
+ def submit(self, func: Callable, *args, **kwargs):
137
+ """Submit task to thread pool."""
138
+ if not self._pool:
139
+ raise RuntimeError("Pool not started. Use as context manager.")
140
+ return self._pool.submit(func, *args, **kwargs)
141
+
142
+ class ProcessPool:
143
+ """Process pool executor."""
144
+
145
+ def __init__(self, workers: int = 4):
146
+ """
147
+ Initialize process pool.
148
+
149
+ Args:
150
+ workers: Number of worker processes
151
+ """
152
+ self.workers = workers
153
+ self._pool: Optional[ProcessPoolExecutor] = None
154
+
155
+ def __enter__(self):
156
+ """Context manager entry."""
157
+ self._pool = ProcessPoolExecutor(max_workers=self.workers)
158
+ return self
159
+
160
+ def __exit__(self, exc_type, exc_val, exc_tb):
161
+ """Context manager exit."""
162
+ if self._pool:
163
+ self._pool.shutdown(wait=True)
164
+
165
+ def map(self, func: Callable, items: List[Any]) -> List[Any]:
166
+ """Map function over items using process pool."""
167
+ if not self._pool:
168
+ raise RuntimeError("Pool not started. Use as context manager.")
169
+ return list(self._pool.map(func, items))
170
+
171
+ def submit(self, func: Callable, *args, **kwargs):
172
+ """Submit task to process pool."""
173
+ if not self._pool:
174
+ raise RuntimeError("Pool not started. Use as context manager.")
175
+ return self._pool.submit(func, *args, **kwargs)
@@ -1,3 +1,4 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/threading/locks.py
1
2
  """
2
3
  Enhanced locking utilities for thread-safe operations.
3
4
  """
@@ -1,3 +1,4 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/threading/safe_factory.py
1
2
  #exonware/xwsystem/threading/safe_factory.py
2
3
  """
3
4
  Thread-safe factory pattern for handler registration and management.
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ #exonware/xwsystem/src/exonware/xwsystem/utils/__init__.py
4
+
5
+ Utilities package for xwsystem.
6
+
7
+ Company: eXonware.com
8
+ Author: Eng. Muhammad AlShehri
9
+ Email: connect@exonware.com
10
+ Version: 0.1.0.4
11
+ Generation Date: 28-Dec-2025
12
+ """
13
+
14
+ # String utilities
15
+ from .string import find_nth_occurrence
16
+
17
+ # Web utilities
18
+ from .web import validate_url_accessible, extract_webpage_text
19
+
20
+ # DateTime utilities (re-export from dt submodule)
21
+ from .dt import (
22
+ get_datetime, get_date, get_date_from_to_month, calculate_duration_days,
23
+ parse_timestamp_milliseconds
24
+ )
25
+
26
+ __all__ = [
27
+ # String utilities
28
+ 'find_nth_occurrence',
29
+
30
+ # Web utilities
31
+ 'validate_url_accessible',
32
+ 'extract_webpage_text',
33
+
34
+ # DateTime utilities
35
+ 'get_datetime',
36
+ 'get_date',
37
+ 'get_date_from_to_month',
38
+ 'calculate_duration_days',
39
+ 'parse_timestamp_milliseconds',
40
+ ]
@@ -1,16 +1,17 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/utils/base.py
1
2
  #exonware/xwsystem/utils/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
  Utils module base classes - abstract classes for utility functionality.
10
11
  """
11
12
 
12
13
  from abc import ABC, abstractmethod
13
- from typing import Any, Optional, Union, Callable
14
+ from typing import Any, Optional, Callable
14
15
  # Root cause: Migrating to Python 3.12 built-in generic syntax for consistency
15
16
  # Priority #3: Maintainability - Modern type annotations improve code clarity
16
17
  from pathlib import Path
@@ -93,92 +94,92 @@ class APathUtilsBase(ABC):
93
94
  self._normalized_paths: dict[str, str] = {}
94
95
 
95
96
  @abstractmethod
96
- def normalize_path(self, path: Union[str, Path]) -> Path:
97
+ def normalize_path(self, path: str | Path) -> Path:
97
98
  """Normalize file path."""
98
99
  pass
99
100
 
100
101
  @abstractmethod
101
- def resolve_path(self, path: Union[str, Path]) -> Path:
102
+ def resolve_path(self, path: str | Path) -> Path:
102
103
  """Resolve file path."""
103
104
  pass
104
105
 
105
106
  @abstractmethod
106
- def absolute_path(self, path: Union[str, Path]) -> Path:
107
+ def absolute_path(self, path: str | Path) -> Path:
107
108
  """Get absolute path."""
108
109
  pass
109
110
 
110
111
  @abstractmethod
111
- def relative_path(self, path: Union[str, Path], start: Optional[Union[str, Path]] = None) -> Path:
112
+ def relative_path(self, path: str | Path, start: Optional[str | Path] = None) -> Path:
112
113
  """Get relative path."""
113
114
  pass
114
115
 
115
116
  @abstractmethod
116
- def join_paths(self, *paths: Union[str, Path]) -> Path:
117
+ def join_paths(self, *paths: str | Path) -> Path:
117
118
  """Join multiple paths."""
118
119
  pass
119
120
 
120
121
  @abstractmethod
121
- def split_path(self, path: Union[str, Path]) -> tuple[Path, str]:
122
+ def split_path(self, path: str | Path) -> tuple[Path, str]:
122
123
  """Split path into directory and filename."""
123
124
  pass
124
125
 
125
126
  @abstractmethod
126
- def get_extension(self, path: Union[str, Path]) -> str:
127
+ def get_extension(self, path: str | Path) -> str:
127
128
  """Get file extension."""
128
129
  pass
129
130
 
130
131
  @abstractmethod
131
- def get_stem(self, path: Union[str, Path]) -> str:
132
+ def get_stem(self, path: str | Path) -> str:
132
133
  """Get file stem."""
133
134
  pass
134
135
 
135
136
  @abstractmethod
136
- def get_name(self, path: Union[str, Path]) -> str:
137
+ def get_name(self, path: str | Path) -> str:
137
138
  """Get file/directory name."""
138
139
  pass
139
140
 
140
141
  @abstractmethod
141
- def get_parent(self, path: Union[str, Path]) -> Path:
142
+ def get_parent(self, path: str | Path) -> Path:
142
143
  """Get parent directory."""
143
144
  pass
144
145
 
145
146
  @abstractmethod
146
- def is_absolute(self, path: Union[str, Path]) -> bool:
147
+ def is_absolute(self, path: str | Path) -> bool:
147
148
  """Check if path is absolute."""
148
149
  pass
149
150
 
150
151
  @abstractmethod
151
- def is_relative(self, path: Union[str, Path]) -> bool:
152
+ def is_relative(self, path: str | Path) -> bool:
152
153
  """Check if path is relative."""
153
154
  pass
154
155
 
155
156
  @abstractmethod
156
- def exists(self, path: Union[str, Path]) -> bool:
157
+ def exists(self, path: str | Path) -> bool:
157
158
  """Check if path exists."""
158
159
  pass
159
160
 
160
161
  @abstractmethod
161
- def is_file(self, path: Union[str, Path]) -> bool:
162
+ def is_file(self, path: str | Path) -> bool:
162
163
  """Check if path is file."""
163
164
  pass
164
165
 
165
166
  @abstractmethod
166
- def is_directory(self, path: Union[str, Path]) -> bool:
167
+ def is_directory(self, path: str | Path) -> bool:
167
168
  """Check if path is directory."""
168
169
  pass
169
170
 
170
171
  @abstractmethod
171
- def get_size(self, path: Union[str, Path]) -> int:
172
+ def get_size(self, path: str | Path) -> int:
172
173
  """Get path size."""
173
174
  pass
174
175
 
175
176
  @abstractmethod
176
- def get_modified_time(self, path: Union[str, Path]) -> float:
177
+ def get_modified_time(self, path: str | Path) -> float:
177
178
  """Get path modification time."""
178
179
  pass
179
180
 
180
181
  @abstractmethod
181
- def sanitize_path(self, path: Union[str, Path]) -> str:
182
+ def sanitize_path(self, path: str | Path) -> str:
182
183
  """Sanitize path for security."""
183
184
  pass
184
185
 
@@ -269,7 +270,7 @@ class AConfigManagerBase(ABC):
269
270
  pass
270
271
 
271
272
  @abstractmethod
272
- def save_config(self, config_name: str, file_path: Union[str, Path]) -> None:
273
+ def save_config(self, config_name: str, file_path: str | Path) -> None:
273
274
  """Save configuration to file."""
274
275
  pass
275
276
 
@@ -1,15 +1,15 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/utils/contracts.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
  Utils module contracts - interfaces and enums for utility functionality.
9
10
  """
10
11
 
11
- from abc import ABC, abstractmethod
12
- from typing import Any, Optional, Union, Callable
12
+ from typing import Any, Optional, Callable, Protocol, runtime_checkable
13
13
  # Root cause: Migrating to Python 3.12 built-in generic syntax for consistency
14
14
  # Priority #3: Maintainability - Modern type annotations improve code clarity
15
15
  from pathlib import Path
@@ -24,161 +24,138 @@ from .defs import (
24
24
  )
25
25
 
26
26
 
27
- class ILazyLoader[T](ABC):
27
+ @runtime_checkable
28
+ class ILazyLoader[T](Protocol):
28
29
  """Interface for lazy loading operations."""
29
30
 
30
- @abstractmethod
31
31
  def load(self) -> T:
32
32
  """Load the object."""
33
- pass
33
+ ...
34
34
 
35
- @abstractmethod
36
35
  def is_loaded(self) -> bool:
37
36
  """Check if object is loaded."""
38
- pass
37
+ ...
39
38
 
40
- @abstractmethod
41
39
  def unload(self) -> None:
42
40
  """Unload the object."""
43
- pass
41
+ ...
44
42
 
45
- @abstractmethod
46
43
  def reload(self) -> T:
47
44
  """Reload the object."""
48
- pass
45
+ ...
49
46
 
50
- @abstractmethod
51
47
  def get_loader_function(self) -> Callable[[], T]:
52
48
  """Get the loader function."""
53
- pass
49
+ ...
54
50
 
55
51
 
56
- class IPathUtils(ABC):
52
+ @runtime_checkable
53
+ class IPathUtils(Protocol):
57
54
  """Interface for path utility operations."""
58
55
 
59
- @abstractmethod
60
- def normalize_path(self, path: Union[str, Path]) -> Path:
56
+ def normalize_path(self, path: str | Path) -> Path:
61
57
  """Normalize path."""
62
- pass
58
+ ...
63
59
 
64
- @abstractmethod
65
- def resolve_path(self, path: Union[str, Path]) -> Path:
60
+ def resolve_path(self, path: str | Path) -> Path:
66
61
  """Resolve path to absolute."""
67
- pass
62
+ ...
68
63
 
69
- @abstractmethod
70
- def get_path_type(self, path: Union[str, Path]) -> PathType:
64
+ def get_path_type(self, path: str | Path) -> PathType:
71
65
  """Get path type."""
72
- pass
66
+ ...
73
67
 
74
- @abstractmethod
75
- def is_safe_path(self, path: Union[str, Path]) -> bool:
68
+ def is_safe_path(self, path: str | Path) -> bool:
76
69
  """Check if path is safe."""
77
- pass
70
+ ...
78
71
 
79
- @abstractmethod
80
- def sanitize_path(self, path: Union[str, Path]) -> Path:
72
+ def sanitize_path(self, path: str | Path) -> Path:
81
73
  """Sanitize path."""
82
- pass
74
+ ...
83
75
 
84
- @abstractmethod
85
- def get_relative_path(self, path: Union[str, Path], base: Union[str, Path]) -> Path:
76
+ def get_relative_path(self, path: str | Path, base: str | Path) -> Path:
86
77
  """Get relative path."""
87
- pass
78
+ ...
88
79
 
89
- @abstractmethod
90
- def ensure_path_exists(self, path: Union[str, Path]) -> None:
80
+ def ensure_path_exists(self, path: str | Path) -> None:
91
81
  """Ensure path exists."""
92
- pass
82
+ ...
93
83
 
94
84
 
95
- class IUtilityRegistry(ABC):
85
+ @runtime_checkable
86
+ class IUtilityRegistry(Protocol):
96
87
  """Interface for utility registry operations."""
97
88
 
98
- @abstractmethod
99
89
  def register_utility(self, name: str, utility: Any) -> None:
100
90
  """Register utility."""
101
- pass
91
+ ...
102
92
 
103
- @abstractmethod
104
93
  def get_utility(self, name: str) -> Optional[Any]:
105
94
  """Get utility by name."""
106
- pass
95
+ ...
107
96
 
108
- @abstractmethod
109
97
  def unregister_utility(self, name: str) -> None:
110
98
  """Unregister utility."""
111
- pass
99
+ ...
112
100
 
113
- @abstractmethod
114
101
  def list_utilities(self) -> list[str]:
115
102
  """List all registered utilities."""
116
- pass
103
+ ...
117
104
 
118
- @abstractmethod
119
105
  def has_utility(self, name: str) -> bool:
120
106
  """Check if utility is registered."""
121
- pass
107
+ ...
122
108
 
123
109
 
124
- class IConfigManager(ABC):
110
+ @runtime_checkable
111
+ class IConfigManager(Protocol):
125
112
  """Interface for configuration management."""
126
113
 
127
- @abstractmethod
128
114
  def get_config(self, key: str, default: Optional[Any] = None) -> Any:
129
115
  """Get configuration value."""
130
- pass
116
+ ...
131
117
 
132
- @abstractmethod
133
118
  def set_config(self, key: str, value: Any) -> None:
134
119
  """Set configuration value."""
135
- pass
120
+ ...
136
121
 
137
- @abstractmethod
138
- def load_config(self, source: Union[str, Path, dict[str, Any]]) -> None:
122
+ def load_config(self, source: str | Path | dict[str, Any]) -> None:
139
123
  """Load configuration from source."""
140
- pass
124
+ ...
141
125
 
142
- @abstractmethod
143
- def save_config(self, destination: Union[str, Path]) -> None:
126
+ def save_config(self, destination: str | Path) -> None:
144
127
  """Save configuration to destination."""
145
- pass
128
+ ...
146
129
 
147
- @abstractmethod
148
130
  def get_all_config(self) -> dict[str, Any]:
149
131
  """Get all configuration."""
150
- pass
132
+ ...
151
133
 
152
- @abstractmethod
153
134
  def clear_config(self) -> None:
154
135
  """Clear all configuration."""
155
- pass
136
+ ...
156
137
 
157
138
 
158
- class IResourceManager(ABC):
139
+ @runtime_checkable
140
+ class IResourceManager(Protocol):
159
141
  """Interface for resource management."""
160
142
 
161
- @abstractmethod
162
143
  def acquire_resource(self, resource_id: str) -> Any:
163
144
  """Acquire resource."""
164
- pass
145
+ ...
165
146
 
166
- @abstractmethod
167
147
  def release_resource(self, resource_id: str) -> None:
168
148
  """Release resource."""
169
- pass
149
+ ...
170
150
 
171
- @abstractmethod
172
151
  def is_resource_available(self, resource_id: str) -> bool:
173
152
  """Check if resource is available."""
174
- pass
153
+ ...
175
154
 
176
- @abstractmethod
177
155
  def get_resource_count(self) -> int:
178
156
  """Get total resource count."""
179
- pass
157
+ ...
180
158
 
181
- @abstractmethod
182
159
  def get_available_resources(self) -> list[str]:
183
160
  """Get list of available resources."""
184
- pass
161
+ ...
@@ -1,3 +1,4 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/utils/dt/__init__.py
1
2
  """
2
3
  DateTime Utilities
3
4
  =================
@@ -7,7 +8,7 @@ Production-grade datetime utilities 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
  Generated: 2025-01-27
12
13
  """
13
14
 
@@ -15,7 +16,11 @@ from .humanize import (
15
16
  humanize_timedelta, humanize_timestamp, time_ago, time_until,
16
17
  duration_to_human, parse_human_duration
17
18
  )
18
- from .parsing import parse_datetime, parse_date, parse_time, parse_iso8601, parse_timestamp
19
+ from .parsing import parse_datetime, parse_date, parse_time, parse_iso8601, parse_timestamp, parse_timestamp_milliseconds
20
+ from .formatting import (
21
+ format_datetime, format_date, format_time, format_iso8601, format_relative,
22
+ get_datetime, get_date, get_date_from_to_month, calculate_duration_days
23
+ )
19
24
 
20
25
  # Placeholder imports for timezone utilities (not yet implemented)
21
26
  class TimezoneManager:
@@ -53,11 +58,22 @@ __all__ = [
53
58
  'parse_time',
54
59
  'parse_iso8601',
55
60
  'parse_timestamp',
61
+ 'parse_timestamp_milliseconds',
62
+
63
+ # Formatting
64
+ 'format_datetime',
65
+ 'format_date',
66
+ 'format_time',
67
+ 'format_iso8601',
68
+ 'format_relative',
69
+ 'get_datetime',
70
+ 'get_date',
71
+ 'get_date_from_to_month',
72
+ 'calculate_duration_days',
56
73
 
57
74
  # Timezone (placeholders)
58
75
  'TimezoneManager',
59
76
  'convert_timezone',
60
77
  'get_timezone_info',
61
78
  'list_timezones',
62
- 'format_datetime',
63
79
  ]