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
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ #exonware/xwsystem/src/exonware/xwsystem/data_structures/union_find.py
4
+
5
+ Union-Find (Disjoint Set) Data Structure for xwsystem.
6
+
7
+ Generic Union-Find implementation that can be used by any library.
8
+
9
+ Company: eXonware.com
10
+ Author: Eng. Muhammad AlShehri
11
+ Email: connect@exonware.com
12
+ Version: 0.1.0.4
13
+ Generation Date: 26-Jan-2025
14
+ """
15
+
16
+ from typing import Any, Dict
17
+
18
+
19
+ class UnionFind:
20
+ """
21
+ Union-Find (Disjoint Set) data structure.
22
+
23
+ Generic implementation that can be used by any library.
24
+
25
+ Time Complexity:
26
+ - make_set: O(1)
27
+ - find: α(n) ≈ O(1) with path compression
28
+ - union: α(n) ≈ O(1) with union by rank
29
+ - connected: α(n) ≈ O(1)
30
+ """
31
+
32
+ def __init__(self):
33
+ """Initialize Union-Find structure."""
34
+ self._parent: Dict[Any, Any] = {}
35
+ self._rank: Dict[Any, int] = {}
36
+ self._sets_count = 0
37
+
38
+ def make_set(self, x: Any) -> None:
39
+ """
40
+ Create new set with element x.
41
+
42
+ Time Complexity: O(1)
43
+
44
+ Args:
45
+ x: Element to add
46
+ """
47
+ if x not in self._parent:
48
+ self._parent[x] = x
49
+ self._rank[x] = 0
50
+ self._sets_count += 1
51
+
52
+ def find(self, x: Any) -> Any:
53
+ """
54
+ Find root of set containing x with path compression.
55
+
56
+ Time Complexity: α(n) ≈ O(1) (inverse Ackermann function)
57
+
58
+ Args:
59
+ x: Element to find
60
+
61
+ Returns:
62
+ Root of set containing x
63
+
64
+ Raises:
65
+ ValueError: If element not found
66
+ """
67
+ if x not in self._parent:
68
+ raise ValueError(f"Element {x} not found in union-find structure")
69
+
70
+ # Path compression
71
+ if self._parent[x] != x:
72
+ self._parent[x] = self.find(self._parent[x])
73
+
74
+ return self._parent[x]
75
+
76
+ def union(self, x: Any, y: Any) -> None:
77
+ """
78
+ Union sets containing x and y by rank.
79
+
80
+ Time Complexity: α(n) ≈ O(1)
81
+
82
+ Args:
83
+ x: First element
84
+ y: Second element
85
+ """
86
+ # Ensure both elements exist
87
+ self.make_set(x)
88
+ self.make_set(y)
89
+
90
+ root_x = self.find(x)
91
+ root_y = self.find(y)
92
+
93
+ if root_x == root_y:
94
+ return # Already in same set
95
+
96
+ # Union by rank
97
+ if self._rank[root_x] < self._rank[root_y]:
98
+ root_x, root_y = root_y, root_x
99
+
100
+ self._parent[root_y] = root_x
101
+ if self._rank[root_x] == self._rank[root_y]:
102
+ self._rank[root_x] += 1
103
+
104
+ self._sets_count -= 1
105
+
106
+ def connected(self, x: Any, y: Any) -> bool:
107
+ """
108
+ Check if x and y are in same set.
109
+
110
+ Time Complexity: α(n) ≈ O(1)
111
+
112
+ Args:
113
+ x: First element
114
+ y: Second element
115
+
116
+ Returns:
117
+ True if x and y are in the same set
118
+ """
119
+ try:
120
+ return self.find(x) == self.find(y)
121
+ except ValueError:
122
+ return False
123
+
124
+ def size(self) -> int:
125
+ """
126
+ Get number of elements.
127
+
128
+ Time Complexity: O(1)
129
+
130
+ Returns:
131
+ Number of elements
132
+ """
133
+ return len(self._parent)
134
+
135
+ def sets_count(self) -> int:
136
+ """
137
+ Get number of disjoint sets.
138
+
139
+ Time Complexity: O(1)
140
+
141
+ Returns:
142
+ Number of disjoint sets
143
+ """
144
+ return self._sets_count
@@ -0,0 +1,17 @@
1
+ """
2
+ #exonware/xwsystem/src/exonware/xwsystem/defs.py
3
+
4
+ Package-level definitions (constants, enums, TypedDicts) for xwsystem.
5
+
6
+ Company: eXonware.com
7
+ Author: Eng. Muhammad AlShehri
8
+ Email: connect@exonware.com
9
+ Version: 0.1.0.4
10
+ Last Updated: 29-Jan-2026
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+
16
+ __all__: list[str] = []
17
+
@@ -0,0 +1,23 @@
1
+ """
2
+ #exonware/xwsystem/src/exonware/xwsystem/errors.py
3
+
4
+ Package-level errors for xwsystem.
5
+
6
+ Company: eXonware.com
7
+ Author: Eng. Muhammad AlShehri
8
+ Email: connect@exonware.com
9
+ Version: 0.1.0.4
10
+ Last Updated: 29-Jan-2026
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+
16
+ class XWSystemError(Exception):
17
+ """Base exception for xwsystem (package-level)."""
18
+
19
+
20
+ __all__ = [
21
+ "XWSystemError",
22
+ ]
23
+
@@ -0,0 +1,62 @@
1
+ """
2
+ #exonware/xwsystem/src/exonware/xwsystem/facade.py
3
+
4
+ Package-level facade(s) for xwsystem.
5
+
6
+ Company: eXonware.com
7
+ Author: Eng. Muhammad AlShehri
8
+ Email: connect@exonware.com
9
+ Version: 0.1.0.4
10
+ Last Updated: 29-Jan-2026
11
+
12
+ This module provides a stable, high-level entry point for composing major
13
+ subsystem facades (IO, caching, security, etc.).
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ from dataclasses import dataclass
19
+
20
+ from .base import AXWFacade
21
+ from .caching.facade import XWCache
22
+ from .http_client import AsyncHttpClient, HttpClient
23
+ from .io.facade import XWIO
24
+ from .monitoring.facade import XWMonitor
25
+ from .security.facade import XWSecurity
26
+ from .threading.facade import XWConcurrency
27
+ from .validation.facade import XWValidator
28
+
29
+
30
+ @dataclass(frozen=True, slots=True)
31
+ class XWSystem(AXWFacade):
32
+ """Top-level facade that bundles major subsystem facades."""
33
+
34
+ io: XWIO
35
+ caching: XWCache
36
+ security: XWSecurity
37
+ monitoring: XWMonitor
38
+ threading: XWConcurrency
39
+ validation: XWValidator
40
+
41
+ http: HttpClient
42
+ http_async: AsyncHttpClient
43
+
44
+ @classmethod
45
+ def create(cls) -> "XWSystem":
46
+ """Create a default `XWSystem` facade with sane defaults."""
47
+ return cls(
48
+ io=XWIO(),
49
+ caching=XWCache(),
50
+ security=XWSecurity(),
51
+ monitoring=XWMonitor(),
52
+ threading=XWConcurrency(),
53
+ validation=XWValidator(),
54
+ http=HttpClient(),
55
+ http_async=AsyncHttpClient(),
56
+ )
57
+
58
+
59
+ __all__ = [
60
+ "XWSystem",
61
+ ]
62
+
@@ -1,8 +1,9 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/http_client/__init__.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
  XSystem HTTP Package
@@ -12,10 +13,30 @@ connection pooling, and comprehensive error handling.
12
13
  """
13
14
 
14
15
  from .client import HttpClient, AsyncHttpClient, HttpError, RetryConfig
16
+ from .advanced_client import (
17
+ AdvancedHttpClient,
18
+ AdvancedHttpConfig,
19
+ Http2Config,
20
+ StreamingConfig,
21
+ MockTransport,
22
+ MockResponse,
23
+ )
24
+
25
+ # Unified Facade
26
+ from .facade import XWHTTP
15
27
 
16
28
  __all__ = [
29
+ # Unified Facade
30
+ "XWHTTP",
31
+ # Core Classes
17
32
  "HttpClient",
18
33
  "AsyncHttpClient",
19
34
  "HttpError",
20
35
  "RetryConfig",
36
+ "AdvancedHttpClient",
37
+ "AdvancedHttpConfig",
38
+ "Http2Config",
39
+ "StreamingConfig",
40
+ "MockTransport",
41
+ "MockResponse",
21
42
  ]
@@ -1,22 +1,25 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/http_client/advanced_client.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
  Advanced HTTP client with HTTP/2, streaming, pluggable transports, and modern features.
9
10
  """
10
11
 
12
+ from __future__ import annotations
13
+
11
14
  import asyncio
12
15
  import os
13
16
  import ssl
14
17
  from contextlib import asynccontextmanager
15
18
  from dataclasses import dataclass, field
16
- from typing import Any, AsyncIterator, Optional, Union
19
+ from typing import Any, AsyncIterator, Optional
17
20
  from urllib.parse import urljoin
18
21
 
19
- from .contracts import Transport
22
+ from .contracts import ITransport as Transport
20
23
 
21
24
  # Prevent httpx from importing rich (Python 3.8+ only, no legacy deps)
22
25
  os.environ.setdefault("HTTPX_NO_RICH", "1")
@@ -200,7 +203,7 @@ class AdvancedHttpClient:
200
203
  self._client = httpx.Client(**client_kwargs)
201
204
  self._async_client = httpx.AsyncClient(**client_kwargs)
202
205
 
203
- async def __aenter__(self) -> 'AdvancedHttpClient':
206
+ async def __aenter__(self) -> AdvancedHttpClient:
204
207
  """Async context manager entry."""
205
208
  return self
206
209
 
@@ -208,7 +211,7 @@ class AdvancedHttpClient:
208
211
  """Async context manager exit."""
209
212
  await self.aclose()
210
213
 
211
- def __enter__(self) -> 'AdvancedHttpClient':
214
+ def __enter__(self) -> AdvancedHttpClient:
212
215
  """Sync context manager entry."""
213
216
  return self
214
217
 
@@ -1,16 +1,17 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/http_client/base.py
1
2
  #exonware/xwsystem/http/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
  HTTP module base classes - abstract classes for HTTP client functionality.
10
11
  """
11
12
 
12
13
  from abc import ABC, abstractmethod
13
- from typing import Any, Optional, Union, AsyncGenerator
14
+ from typing import Any, Optional, AsyncGenerator
14
15
  from .contracts import HttpMethod, HttpStatus, ContentType, AuthType
15
16
 
16
17
 
@@ -1,18 +1,21 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/http_client/client.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
  HTTP client with retry mechanisms, connection pooling, and error handling.
9
10
  """
10
11
 
12
+ from __future__ import annotations
13
+
11
14
  import asyncio
12
15
  import os
13
16
  import time
14
17
  from dataclasses import dataclass, field
15
- from typing import Any, Optional, Union
18
+ from typing import Any, Optional
16
19
  from urllib.parse import urljoin
17
20
 
18
21
  # Prevent httpx from importing rich (Python 3.8+ only, no legacy deps)
@@ -91,7 +94,7 @@ class HttpClient:
91
94
  headers=self.default_headers
92
95
  )
93
96
 
94
- def __enter__(self) -> 'HttpClient':
97
+ def __enter__(self) -> HttpClient:
95
98
  """Context manager entry."""
96
99
  return self
97
100
 
@@ -345,7 +348,7 @@ class AsyncHttpClient:
345
348
  headers=self.default_headers
346
349
  )
347
350
 
348
- async def __aenter__(self) -> 'AsyncHttpClient':
351
+ async def __aenter__(self) -> AsyncHttpClient:
349
352
  """Async context manager entry."""
350
353
  return self
351
354
 
@@ -1,15 +1,17 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/http_client/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
  HTTP module contracts - interfaces and enums for HTTP client functionality.
9
10
  """
10
11
 
11
- from abc import ABC, abstractmethod
12
- from typing import Any, Optional, Union, AsyncGenerator
12
+ from __future__ import annotations
13
+
14
+ from typing import Any, Optional, AsyncGenerator, Protocol, runtime_checkable
13
15
  from urllib.parse import ParseResult
14
16
 
15
17
  # Import enums from types module
@@ -22,134 +24,118 @@ from .defs import (
22
24
  )
23
25
 
24
26
 
25
- class IHttpClient(ABC):
27
+ @runtime_checkable
28
+ class IHttpClient(Protocol):
26
29
  """Interface for HTTP client operations."""
27
30
 
28
- @abstractmethod
29
- async def get(self, url: str, **kwargs) -> 'IHttpResponse':
31
+ async def get(self, url: str, **kwargs) -> IHttpResponse:
30
32
  """Make GET request."""
31
- pass
33
+ ...
32
34
 
33
- @abstractmethod
34
- async def post(self, url: str, data: Optional[Any] = None, **kwargs) -> 'IHttpResponse':
35
+ async def post(self, url: str, data: Optional[Any] = None, **kwargs) -> IHttpResponse:
35
36
  """Make POST request."""
36
- pass
37
+ ...
37
38
 
38
- @abstractmethod
39
- async def put(self, url: str, data: Optional[Any] = None, **kwargs) -> 'IHttpResponse':
39
+ async def put(self, url: str, data: Optional[Any] = None, **kwargs) -> IHttpResponse:
40
40
  """Make PUT request."""
41
- pass
41
+ ...
42
42
 
43
- @abstractmethod
44
- async def delete(self, url: str, **kwargs) -> 'IHttpResponse':
43
+ async def delete(self, url: str, **kwargs) -> IHttpResponse:
45
44
  """Make DELETE request."""
46
- pass
45
+ ...
47
46
 
48
- @abstractmethod
49
- async def request(self, method: HttpMethod, url: str, **kwargs) -> 'IHttpResponse':
47
+ async def request(self, method: HttpMethod, url: str, **kwargs) -> IHttpResponse:
50
48
  """Make HTTP request."""
51
- pass
49
+ ...
52
50
 
53
51
 
54
- class IHttpResponse(ABC):
52
+ @runtime_checkable
53
+ class IHttpResponse(Protocol):
55
54
  """Interface for HTTP response."""
56
55
 
57
56
  @property
58
- @abstractmethod
59
57
  def status_code(self) -> int:
60
58
  """Response status code."""
61
- pass
59
+ ...
62
60
 
63
61
  @property
64
- @abstractmethod
65
62
  def headers(self) -> dict[str, str]:
66
63
  """Response headers."""
67
- pass
64
+ ...
68
65
 
69
66
  @property
70
- @abstractmethod
71
67
  def content(self) -> bytes:
72
68
  """Response content as bytes."""
73
- pass
69
+ ...
74
70
 
75
71
  @property
76
- @abstractmethod
77
72
  def text(self) -> str:
78
73
  """Response content as text."""
79
- pass
74
+ ...
80
75
 
81
- @abstractmethod
82
76
  def json(self) -> Any:
83
77
  """Response content as JSON."""
84
- pass
78
+ ...
85
79
 
86
- @abstractmethod
87
80
  async def stream(self) -> AsyncGenerator[bytes, None]:
88
81
  """Stream response content."""
89
- pass
82
+ ...
90
83
 
91
84
 
92
- class IHttpSession(ABC):
85
+ @runtime_checkable
86
+ class IHttpSession(Protocol):
93
87
  """Interface for HTTP session management."""
94
88
 
95
- @abstractmethod
96
- async def __aenter__(self) -> 'IHttpSession':
89
+ async def __aenter__(self) -> IHttpSession:
97
90
  """Async context manager entry."""
98
- pass
91
+ ...
99
92
 
100
- @abstractmethod
101
93
  async def __aexit__(self, exc_type, exc_val, exc_tb) -> None:
102
94
  """Async context manager exit."""
103
- pass
95
+ ...
104
96
 
105
- @abstractmethod
106
97
  def set_auth(self, auth_type: AuthType, **kwargs) -> None:
107
98
  """Set authentication."""
108
- pass
99
+ ...
109
100
 
110
- @abstractmethod
111
101
  def set_headers(self, headers: dict[str, str]) -> None:
112
102
  """Set default headers."""
113
- pass
103
+ ...
114
104
 
115
- @abstractmethod
116
105
  def set_timeout(self, timeout: float) -> None:
117
106
  """Set request timeout."""
118
- pass
107
+ ...
119
108
 
120
109
 
121
- class IRetryConfig(ABC):
110
+ @runtime_checkable
111
+ class IRetryConfig(Protocol):
122
112
  """Interface for retry configuration."""
123
113
 
124
114
  @property
125
- @abstractmethod
126
115
  def max_retries(self) -> int:
127
116
  """Maximum number of retries."""
128
- pass
117
+ ...
129
118
 
130
119
  @property
131
- @abstractmethod
132
120
  def strategy(self) -> RetryStrategy:
133
121
  """Retry strategy."""
134
- pass
122
+ ...
135
123
 
136
124
  @property
137
- @abstractmethod
138
125
  def backoff_factor(self) -> float:
139
126
  """Backoff factor for retries."""
140
- pass
127
+ ...
141
128
 
142
129
  @property
143
- @abstractmethod
144
130
  def retry_on_status(self) -> list[int]:
145
131
  """Status codes to retry on."""
146
- pass
132
+ ...
147
133
 
148
134
 
149
- class Transport(ABC):
135
+ @runtime_checkable
136
+ class ITransport(Protocol):
150
137
  """Abstract base class for HTTP transport implementations."""
151
138
 
152
- @abstractmethod
153
139
  async def request(self, method: str, url: str, **kwargs) -> Any:
154
140
  """Make an HTTP request."""
155
- pass
141
+ ...
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python3
2
+ #exonware/xwsystem/src/exonware/xwsystem/http_client/defs.py
2
3
  #exonware/xwsystem/http_client/defs.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
  HTTP types and enums for XWSystem.
@@ -1,9 +1,10 @@
1
+ #exonware/xwsystem/src/exonware/xwsystem/http_client/errors.py
1
2
  #exonware/xwsystem/http/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
  HTTP module errors - exception classes for HTTP client functionality.