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.
- exonware/__init__.py +2 -1
- exonware/conf.py +2 -2
- exonware/xwsystem/__init__.py +115 -43
- exonware/xwsystem/base.py +30 -0
- exonware/xwsystem/caching/__init__.py +39 -13
- exonware/xwsystem/caching/base.py +24 -6
- exonware/xwsystem/caching/bloom_cache.py +2 -2
- exonware/xwsystem/caching/cache_manager.py +2 -1
- exonware/xwsystem/caching/conditional.py +2 -2
- exonware/xwsystem/caching/contracts.py +85 -139
- exonware/xwsystem/caching/decorators.py +6 -19
- exonware/xwsystem/caching/defs.py +2 -1
- exonware/xwsystem/caching/disk_cache.py +2 -1
- exonware/xwsystem/caching/distributed.py +2 -1
- exonware/xwsystem/caching/errors.py +2 -1
- exonware/xwsystem/caching/events.py +110 -27
- exonware/xwsystem/caching/eviction_strategies.py +2 -2
- exonware/xwsystem/caching/external_caching_python.py +701 -0
- exonware/xwsystem/caching/facade.py +253 -0
- exonware/xwsystem/caching/factory.py +300 -0
- exonware/xwsystem/caching/fluent.py +14 -12
- exonware/xwsystem/caching/integrity.py +21 -6
- exonware/xwsystem/caching/lfu_cache.py +2 -1
- exonware/xwsystem/caching/lfu_optimized.py +18 -6
- exonware/xwsystem/caching/lru_cache.py +7 -4
- exonware/xwsystem/caching/memory_bounded.py +2 -2
- exonware/xwsystem/caching/metrics_exporter.py +2 -2
- exonware/xwsystem/caching/observable_cache.py +2 -2
- exonware/xwsystem/caching/pluggable_cache.py +2 -2
- exonware/xwsystem/caching/rate_limiter.py +2 -2
- exonware/xwsystem/caching/read_through.py +2 -2
- exonware/xwsystem/caching/secure_cache.py +81 -28
- exonware/xwsystem/caching/serializable.py +9 -7
- exonware/xwsystem/caching/stats.py +2 -2
- exonware/xwsystem/caching/tagging.py +2 -2
- exonware/xwsystem/caching/ttl_cache.py +4 -3
- exonware/xwsystem/caching/two_tier_cache.py +6 -3
- exonware/xwsystem/caching/utils.py +30 -12
- exonware/xwsystem/caching/validation.py +2 -2
- exonware/xwsystem/caching/warming.py +6 -3
- exonware/xwsystem/caching/write_behind.py +15 -6
- exonware/xwsystem/config/__init__.py +11 -17
- exonware/xwsystem/config/base.py +5 -5
- exonware/xwsystem/config/contracts.py +93 -153
- exonware/xwsystem/config/defaults.py +3 -2
- exonware/xwsystem/config/defs.py +3 -2
- exonware/xwsystem/config/errors.py +2 -5
- exonware/xwsystem/config/logging.py +12 -8
- exonware/xwsystem/config/logging_setup.py +3 -2
- exonware/xwsystem/config/performance.py +1 -46
- exonware/xwsystem/config/performance_modes.py +9 -8
- exonware/xwsystem/config/version_manager.py +1 -0
- exonware/xwsystem/config.py +27 -0
- exonware/xwsystem/console/__init__.py +53 -0
- exonware/xwsystem/console/base.py +133 -0
- exonware/xwsystem/console/cli/__init__.py +61 -0
- exonware/xwsystem/{cli → console/cli}/args.py +27 -24
- exonware/xwsystem/{cli → console/cli}/base.py +18 -87
- exonware/xwsystem/{cli → console/cli}/colors.py +15 -13
- exonware/xwsystem/console/cli/console.py +98 -0
- exonware/xwsystem/{cli → console/cli}/contracts.py +51 -69
- exonware/xwsystem/console/cli/defs.py +87 -0
- exonware/xwsystem/console/cli/encoding.py +69 -0
- exonware/xwsystem/{cli → console/cli}/errors.py +8 -3
- exonware/xwsystem/console/cli/event_logger.py +166 -0
- exonware/xwsystem/{cli → console/cli}/progress.py +25 -21
- exonware/xwsystem/{cli → console/cli}/prompts.py +3 -2
- exonware/xwsystem/{cli → console/cli}/tables.py +27 -24
- exonware/xwsystem/console/contracts.py +113 -0
- exonware/xwsystem/console/defs.py +154 -0
- exonware/xwsystem/console/errors.py +34 -0
- exonware/xwsystem/console/event_logger.py +385 -0
- exonware/xwsystem/console/writer.py +132 -0
- exonware/xwsystem/contracts.py +28 -0
- exonware/xwsystem/data_structures/__init__.py +23 -0
- exonware/xwsystem/data_structures/trie.py +34 -0
- exonware/xwsystem/data_structures/union_find.py +144 -0
- exonware/xwsystem/defs.py +17 -0
- exonware/xwsystem/errors.py +23 -0
- exonware/xwsystem/facade.py +62 -0
- exonware/xwsystem/http_client/__init__.py +22 -1
- exonware/xwsystem/http_client/advanced_client.py +8 -5
- exonware/xwsystem/http_client/base.py +3 -2
- exonware/xwsystem/http_client/client.py +7 -4
- exonware/xwsystem/http_client/contracts.py +42 -56
- exonware/xwsystem/http_client/defs.py +2 -1
- exonware/xwsystem/http_client/errors.py +2 -1
- exonware/xwsystem/http_client/facade.py +156 -0
- exonware/xwsystem/io/__init__.py +22 -3
- exonware/xwsystem/io/archive/__init__.py +8 -2
- exonware/xwsystem/io/archive/archive.py +1 -1
- exonware/xwsystem/io/archive/archive_files.py +4 -7
- exonware/xwsystem/io/archive/archivers.py +120 -10
- exonware/xwsystem/io/archive/base.py +4 -5
- exonware/xwsystem/io/archive/codec_integration.py +1 -2
- exonware/xwsystem/io/archive/compression.py +1 -2
- exonware/xwsystem/io/archive/facade.py +263 -0
- exonware/xwsystem/io/archive/formats/__init__.py +2 -3
- exonware/xwsystem/io/archive/formats/brotli_format.py +20 -7
- exonware/xwsystem/io/archive/formats/lz4_format.py +20 -7
- exonware/xwsystem/io/archive/formats/rar.py +11 -5
- exonware/xwsystem/io/archive/formats/sevenzip.py +12 -6
- exonware/xwsystem/io/archive/formats/squashfs_format.py +1 -2
- exonware/xwsystem/io/archive/formats/tar.py +52 -7
- exonware/xwsystem/io/archive/formats/wim_format.py +11 -5
- exonware/xwsystem/io/archive/formats/zip.py +1 -2
- exonware/xwsystem/io/archive/formats/zpaq_format.py +1 -2
- exonware/xwsystem/io/archive/formats/zstandard.py +20 -7
- exonware/xwsystem/io/base.py +119 -115
- exonware/xwsystem/io/codec/__init__.py +4 -2
- exonware/xwsystem/io/codec/base.py +19 -13
- exonware/xwsystem/io/codec/contracts.py +59 -2
- exonware/xwsystem/io/codec/registry.py +67 -21
- exonware/xwsystem/io/common/__init__.py +1 -1
- exonware/xwsystem/io/common/atomic.py +29 -16
- exonware/xwsystem/io/common/base.py +11 -10
- exonware/xwsystem/io/common/lock.py +6 -5
- exonware/xwsystem/io/common/path_manager.py +2 -1
- exonware/xwsystem/io/common/watcher.py +1 -2
- exonware/xwsystem/io/contracts.py +301 -433
- exonware/xwsystem/io/contracts_1.py +1180 -0
- exonware/xwsystem/io/data_operations.py +19 -20
- exonware/xwsystem/io/defs.py +4 -3
- exonware/xwsystem/io/errors.py +3 -2
- exonware/xwsystem/io/facade.py +87 -61
- exonware/xwsystem/io/file/__init__.py +1 -1
- exonware/xwsystem/io/file/base.py +8 -9
- exonware/xwsystem/io/file/conversion.py +2 -3
- exonware/xwsystem/io/file/file.py +61 -18
- exonware/xwsystem/io/file/paged_source.py +8 -8
- exonware/xwsystem/io/file/paging/__init__.py +1 -2
- exonware/xwsystem/io/file/paging/byte_paging.py +4 -5
- exonware/xwsystem/io/file/paging/line_paging.py +2 -3
- exonware/xwsystem/io/file/paging/record_paging.py +2 -3
- exonware/xwsystem/io/file/paging/registry.py +1 -2
- exonware/xwsystem/io/file/source.py +13 -17
- exonware/xwsystem/io/filesystem/__init__.py +1 -1
- exonware/xwsystem/io/filesystem/base.py +1 -2
- exonware/xwsystem/io/filesystem/local.py +3 -4
- exonware/xwsystem/io/folder/__init__.py +1 -1
- exonware/xwsystem/io/folder/base.py +1 -2
- exonware/xwsystem/io/folder/folder.py +16 -7
- exonware/xwsystem/io/indexing/__init__.py +14 -0
- exonware/xwsystem/io/indexing/facade.py +443 -0
- exonware/xwsystem/io/path_parser.py +98 -0
- exonware/xwsystem/io/serialization/__init__.py +21 -3
- exonware/xwsystem/io/serialization/auto_serializer.py +146 -20
- exonware/xwsystem/io/serialization/base.py +84 -34
- exonware/xwsystem/io/serialization/contracts.py +50 -73
- exonware/xwsystem/io/serialization/defs.py +2 -1
- exonware/xwsystem/io/serialization/errors.py +2 -1
- exonware/xwsystem/io/serialization/flyweight.py +154 -7
- exonware/xwsystem/io/serialization/format_detector.py +15 -14
- exonware/xwsystem/io/serialization/formats/__init__.py +8 -5
- exonware/xwsystem/io/serialization/formats/binary/bson.py +15 -6
- exonware/xwsystem/io/serialization/formats/binary/cbor.py +5 -5
- exonware/xwsystem/io/serialization/formats/binary/marshal.py +5 -5
- exonware/xwsystem/io/serialization/formats/binary/msgpack.py +5 -5
- exonware/xwsystem/io/serialization/formats/binary/pickle.py +5 -5
- exonware/xwsystem/io/serialization/formats/binary/plistlib.py +5 -5
- exonware/xwsystem/io/serialization/formats/database/dbm.py +7 -7
- exonware/xwsystem/io/serialization/formats/database/shelve.py +7 -7
- exonware/xwsystem/io/serialization/formats/database/sqlite3.py +7 -7
- exonware/xwsystem/io/serialization/formats/tabular/__init__.py +27 -0
- exonware/xwsystem/io/serialization/formats/tabular/base.py +89 -0
- exonware/xwsystem/io/serialization/formats/tabular/csv.py +319 -0
- exonware/xwsystem/io/serialization/formats/tabular/df.py +249 -0
- exonware/xwsystem/io/serialization/formats/tabular/excel.py +291 -0
- exonware/xwsystem/io/serialization/formats/tabular/googlesheets.py +374 -0
- exonware/xwsystem/io/serialization/formats/text/__init__.py +1 -1
- exonware/xwsystem/io/serialization/formats/text/append_only_log.py +5 -7
- exonware/xwsystem/io/serialization/formats/text/configparser.py +5 -5
- exonware/xwsystem/io/serialization/formats/text/csv.py +7 -5
- exonware/xwsystem/io/serialization/formats/text/formdata.py +5 -5
- exonware/xwsystem/io/serialization/formats/text/json.py +27 -18
- exonware/xwsystem/io/serialization/formats/text/json5.py +8 -4
- exonware/xwsystem/io/serialization/formats/text/jsonlines.py +18 -14
- exonware/xwsystem/io/serialization/formats/text/multipart.py +5 -5
- exonware/xwsystem/io/serialization/formats/text/toml.py +8 -6
- exonware/xwsystem/io/serialization/formats/text/xml.py +25 -20
- exonware/xwsystem/io/serialization/formats/text/yaml.py +8 -6
- exonware/xwsystem/io/serialization/parsers/__init__.py +3 -2
- exonware/xwsystem/io/serialization/parsers/base.py +6 -5
- exonware/xwsystem/io/serialization/parsers/hybrid_parser.py +7 -6
- exonware/xwsystem/io/serialization/parsers/msgspec_parser.py +10 -7
- exonware/xwsystem/io/serialization/parsers/orjson_direct_parser.py +7 -6
- exonware/xwsystem/io/serialization/parsers/orjson_parser.py +11 -8
- exonware/xwsystem/io/serialization/parsers/pysimdjson_parser.py +13 -9
- exonware/xwsystem/io/serialization/parsers/rapidjson_parser.py +10 -7
- exonware/xwsystem/io/serialization/parsers/registry.py +11 -10
- exonware/xwsystem/io/serialization/parsers/standard.py +7 -6
- exonware/xwsystem/io/serialization/parsers/ujson_parser.py +10 -7
- exonware/xwsystem/io/serialization/registry.py +4 -4
- exonware/xwsystem/io/serialization/serializer.py +168 -79
- exonware/xwsystem/io/serialization/universal_options.py +367 -0
- exonware/xwsystem/io/serialization/utils/__init__.py +1 -2
- exonware/xwsystem/io/serialization/utils/path_ops.py +5 -6
- exonware/xwsystem/io/source_reader.py +223 -0
- exonware/xwsystem/io/stream/__init__.py +1 -1
- exonware/xwsystem/io/stream/async_operations.py +61 -14
- exonware/xwsystem/io/stream/base.py +1 -2
- exonware/xwsystem/io/stream/codec_io.py +6 -7
- exonware/xwsystem/ipc/__init__.py +1 -0
- exonware/xwsystem/ipc/async_fabric.py +4 -4
- exonware/xwsystem/ipc/base.py +6 -5
- exonware/xwsystem/ipc/contracts.py +41 -66
- exonware/xwsystem/ipc/defs.py +2 -1
- exonware/xwsystem/ipc/errors.py +2 -1
- exonware/xwsystem/ipc/message_queue.py +5 -2
- exonware/xwsystem/ipc/pipes.py +70 -34
- exonware/xwsystem/ipc/process_manager.py +7 -5
- exonware/xwsystem/ipc/process_pool.py +6 -5
- exonware/xwsystem/ipc/shared_memory.py +64 -11
- exonware/xwsystem/monitoring/__init__.py +7 -0
- exonware/xwsystem/monitoring/base.py +11 -8
- exonware/xwsystem/monitoring/contracts.py +86 -144
- exonware/xwsystem/monitoring/defs.py +2 -1
- exonware/xwsystem/monitoring/error_recovery.py +16 -3
- exonware/xwsystem/monitoring/errors.py +2 -1
- exonware/xwsystem/monitoring/facade.py +183 -0
- exonware/xwsystem/monitoring/memory_monitor.py +1 -0
- exonware/xwsystem/monitoring/metrics.py +1 -0
- exonware/xwsystem/monitoring/performance_manager_generic.py +7 -7
- exonware/xwsystem/monitoring/performance_monitor.py +1 -0
- exonware/xwsystem/monitoring/performance_validator.py +1 -0
- exonware/xwsystem/monitoring/system_monitor.py +6 -5
- exonware/xwsystem/monitoring/tracing.py +18 -16
- exonware/xwsystem/monitoring/tracker.py +2 -1
- exonware/xwsystem/operations/__init__.py +5 -50
- exonware/xwsystem/operations/base.py +3 -44
- exonware/xwsystem/operations/contracts.py +25 -15
- exonware/xwsystem/operations/defs.py +1 -1
- exonware/xwsystem/operations/diff.py +5 -4
- exonware/xwsystem/operations/errors.py +1 -1
- exonware/xwsystem/operations/merge.py +6 -4
- exonware/xwsystem/operations/patch.py +5 -4
- exonware/xwsystem/patterns/__init__.py +1 -0
- exonware/xwsystem/patterns/base.py +2 -1
- exonware/xwsystem/patterns/context_manager.py +2 -1
- exonware/xwsystem/patterns/contracts.py +215 -256
- exonware/xwsystem/patterns/defs.py +2 -1
- exonware/xwsystem/patterns/dynamic_facade.py +1 -0
- exonware/xwsystem/patterns/errors.py +2 -4
- exonware/xwsystem/patterns/handler_factory.py +2 -3
- exonware/xwsystem/patterns/import_registry.py +1 -0
- exonware/xwsystem/patterns/object_pool.py +1 -0
- exonware/xwsystem/patterns/registry.py +4 -43
- exonware/xwsystem/plugins/__init__.py +2 -1
- exonware/xwsystem/plugins/base.py +6 -5
- exonware/xwsystem/plugins/contracts.py +94 -158
- exonware/xwsystem/plugins/defs.py +2 -1
- exonware/xwsystem/plugins/errors.py +2 -1
- exonware/xwsystem/py.typed +3 -0
- exonware/xwsystem/query/__init__.py +36 -0
- exonware/xwsystem/query/contracts.py +56 -0
- exonware/xwsystem/query/errors.py +22 -0
- exonware/xwsystem/query/registry.py +128 -0
- exonware/xwsystem/runtime/__init__.py +2 -1
- exonware/xwsystem/runtime/base.py +4 -3
- exonware/xwsystem/runtime/contracts.py +39 -60
- exonware/xwsystem/runtime/defs.py +2 -1
- exonware/xwsystem/runtime/env.py +11 -9
- exonware/xwsystem/runtime/errors.py +2 -1
- exonware/xwsystem/runtime/reflection.py +3 -2
- exonware/xwsystem/security/__init__.py +68 -11
- exonware/xwsystem/security/audit.py +167 -0
- exonware/xwsystem/security/base.py +121 -24
- exonware/xwsystem/security/contracts.py +91 -146
- exonware/xwsystem/security/crypto.py +17 -16
- exonware/xwsystem/security/defs.py +2 -1
- exonware/xwsystem/security/errors.py +2 -1
- exonware/xwsystem/security/facade.py +321 -0
- exonware/xwsystem/security/file_security.py +330 -0
- exonware/xwsystem/security/hazmat.py +11 -8
- exonware/xwsystem/security/monitor.py +372 -0
- exonware/xwsystem/security/path_validator.py +140 -18
- exonware/xwsystem/security/policy.py +357 -0
- exonware/xwsystem/security/resource_limits.py +1 -0
- exonware/xwsystem/security/validator.py +455 -0
- exonware/xwsystem/shared/__init__.py +14 -1
- exonware/xwsystem/shared/base.py +285 -2
- exonware/xwsystem/shared/contracts.py +415 -126
- exonware/xwsystem/shared/defs.py +2 -1
- exonware/xwsystem/shared/errors.py +2 -2
- exonware/xwsystem/shared/xwobject.py +316 -0
- exonware/xwsystem/structures/__init__.py +1 -0
- exonware/xwsystem/structures/base.py +3 -2
- exonware/xwsystem/structures/circular_detector.py +15 -14
- exonware/xwsystem/structures/contracts.py +53 -76
- exonware/xwsystem/structures/defs.py +2 -1
- exonware/xwsystem/structures/errors.py +2 -1
- exonware/xwsystem/structures/tree_walker.py +2 -1
- exonware/xwsystem/threading/__init__.py +21 -4
- exonware/xwsystem/threading/async_primitives.py +6 -5
- exonware/xwsystem/threading/base.py +3 -2
- exonware/xwsystem/threading/contracts.py +87 -143
- exonware/xwsystem/threading/defs.py +2 -1
- exonware/xwsystem/threading/errors.py +2 -1
- exonware/xwsystem/threading/facade.py +175 -0
- exonware/xwsystem/threading/locks.py +1 -0
- exonware/xwsystem/threading/safe_factory.py +1 -0
- exonware/xwsystem/utils/__init__.py +40 -0
- exonware/xwsystem/utils/base.py +22 -21
- exonware/xwsystem/utils/contracts.py +50 -73
- exonware/xwsystem/utils/dt/__init__.py +19 -3
- exonware/xwsystem/utils/dt/base.py +5 -4
- exonware/xwsystem/utils/dt/contracts.py +22 -29
- exonware/xwsystem/utils/dt/defs.py +2 -1
- exonware/xwsystem/utils/dt/errors.py +2 -5
- exonware/xwsystem/utils/dt/formatting.py +88 -2
- exonware/xwsystem/utils/dt/humanize.py +10 -9
- exonware/xwsystem/utils/dt/parsing.py +56 -5
- exonware/xwsystem/utils/dt/timezone_utils.py +2 -24
- exonware/xwsystem/utils/errors.py +2 -4
- exonware/xwsystem/utils/paths.py +1 -0
- exonware/xwsystem/utils/string.py +49 -0
- exonware/xwsystem/utils/test_runner.py +185 -0
- exonware/xwsystem/utils/utils_contracts.py +2 -1
- exonware/xwsystem/utils/web.py +110 -0
- exonware/xwsystem/validation/__init__.py +25 -1
- exonware/xwsystem/validation/base.py +6 -5
- exonware/xwsystem/validation/contracts.py +29 -41
- exonware/xwsystem/validation/data_validator.py +1 -0
- exonware/xwsystem/validation/declarative.py +11 -8
- exonware/xwsystem/validation/defs.py +2 -1
- exonware/xwsystem/validation/errors.py +2 -1
- exonware/xwsystem/validation/facade.py +198 -0
- exonware/xwsystem/validation/fluent_validator.py +22 -19
- exonware/xwsystem/validation/schema_discovery.py +210 -0
- exonware/xwsystem/validation/type_safety.py +2 -1
- exonware/xwsystem/version.py +2 -2
- {exonware_xwsystem-0.1.0.1.dist-info → exonware_xwsystem-0.1.0.4.dist-info}/METADATA +71 -4
- exonware_xwsystem-0.1.0.4.dist-info/RECORD +337 -0
- exonware/xwsystem/cli/__init__.py +0 -43
- exonware/xwsystem/cli/console.py +0 -113
- exonware/xwsystem/cli/defs.py +0 -134
- exonware/xwsystem/conf.py +0 -44
- exonware/xwsystem/security/auth.py +0 -484
- exonware_xwsystem-0.1.0.1.dist-info/RECORD +0 -284
- {exonware_xwsystem-0.1.0.1.dist-info → exonware_xwsystem-0.1.0.4.dist-info}/WHEEL +0 -0
- {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.
|
|
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.
|
|
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
|
|
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) ->
|
|
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) ->
|
|
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.
|
|
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,
|
|
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.
|
|
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
|
|
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) ->
|
|
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) ->
|
|
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.
|
|
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
|
|
12
|
-
|
|
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
|
-
|
|
27
|
+
@runtime_checkable
|
|
28
|
+
class IHttpClient(Protocol):
|
|
26
29
|
"""Interface for HTTP client operations."""
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
async def get(self, url: str, **kwargs) -> 'IHttpResponse':
|
|
31
|
+
async def get(self, url: str, **kwargs) -> IHttpResponse:
|
|
30
32
|
"""Make GET request."""
|
|
31
|
-
|
|
33
|
+
...
|
|
32
34
|
|
|
33
|
-
|
|
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
|
-
|
|
37
|
+
...
|
|
37
38
|
|
|
38
|
-
|
|
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
|
-
|
|
41
|
+
...
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
async def delete(self, url: str, **kwargs) -> 'IHttpResponse':
|
|
43
|
+
async def delete(self, url: str, **kwargs) -> IHttpResponse:
|
|
45
44
|
"""Make DELETE request."""
|
|
46
|
-
|
|
45
|
+
...
|
|
47
46
|
|
|
48
|
-
|
|
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
|
-
|
|
49
|
+
...
|
|
52
50
|
|
|
53
51
|
|
|
54
|
-
|
|
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
|
-
|
|
59
|
+
...
|
|
62
60
|
|
|
63
61
|
@property
|
|
64
|
-
@abstractmethod
|
|
65
62
|
def headers(self) -> dict[str, str]:
|
|
66
63
|
"""Response headers."""
|
|
67
|
-
|
|
64
|
+
...
|
|
68
65
|
|
|
69
66
|
@property
|
|
70
|
-
@abstractmethod
|
|
71
67
|
def content(self) -> bytes:
|
|
72
68
|
"""Response content as bytes."""
|
|
73
|
-
|
|
69
|
+
...
|
|
74
70
|
|
|
75
71
|
@property
|
|
76
|
-
@abstractmethod
|
|
77
72
|
def text(self) -> str:
|
|
78
73
|
"""Response content as text."""
|
|
79
|
-
|
|
74
|
+
...
|
|
80
75
|
|
|
81
|
-
@abstractmethod
|
|
82
76
|
def json(self) -> Any:
|
|
83
77
|
"""Response content as JSON."""
|
|
84
|
-
|
|
78
|
+
...
|
|
85
79
|
|
|
86
|
-
@abstractmethod
|
|
87
80
|
async def stream(self) -> AsyncGenerator[bytes, None]:
|
|
88
81
|
"""Stream response content."""
|
|
89
|
-
|
|
82
|
+
...
|
|
90
83
|
|
|
91
84
|
|
|
92
|
-
|
|
85
|
+
@runtime_checkable
|
|
86
|
+
class IHttpSession(Protocol):
|
|
93
87
|
"""Interface for HTTP session management."""
|
|
94
88
|
|
|
95
|
-
|
|
96
|
-
async def __aenter__(self) -> 'IHttpSession':
|
|
89
|
+
async def __aenter__(self) -> IHttpSession:
|
|
97
90
|
"""Async context manager entry."""
|
|
98
|
-
|
|
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
|
-
|
|
95
|
+
...
|
|
104
96
|
|
|
105
|
-
@abstractmethod
|
|
106
97
|
def set_auth(self, auth_type: AuthType, **kwargs) -> None:
|
|
107
98
|
"""Set authentication."""
|
|
108
|
-
|
|
99
|
+
...
|
|
109
100
|
|
|
110
|
-
@abstractmethod
|
|
111
101
|
def set_headers(self, headers: dict[str, str]) -> None:
|
|
112
102
|
"""Set default headers."""
|
|
113
|
-
|
|
103
|
+
...
|
|
114
104
|
|
|
115
|
-
@abstractmethod
|
|
116
105
|
def set_timeout(self, timeout: float) -> None:
|
|
117
106
|
"""Set request timeout."""
|
|
118
|
-
|
|
107
|
+
...
|
|
119
108
|
|
|
120
109
|
|
|
121
|
-
|
|
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
|
-
|
|
117
|
+
...
|
|
129
118
|
|
|
130
119
|
@property
|
|
131
|
-
@abstractmethod
|
|
132
120
|
def strategy(self) -> RetryStrategy:
|
|
133
121
|
"""Retry strategy."""
|
|
134
|
-
|
|
122
|
+
...
|
|
135
123
|
|
|
136
124
|
@property
|
|
137
|
-
@abstractmethod
|
|
138
125
|
def backoff_factor(self) -> float:
|
|
139
126
|
"""Backoff factor for retries."""
|
|
140
|
-
|
|
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
|
-
|
|
132
|
+
...
|
|
147
133
|
|
|
148
134
|
|
|
149
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|