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
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/plugins/defs.py
|
|
2
3
|
#exonware/xwsystem/plugins/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.
|
|
8
|
+
Version: 0.1.0.4
|
|
8
9
|
Generation Date: 07-Sep-2025
|
|
9
10
|
|
|
10
11
|
Plugins types and enums for XWSystem.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/plugins/errors.py
|
|
1
2
|
#exonware/xwsystem/plugins/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
|
Plugin-specific error classes for XSystem plugin system.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
#exonware/xwsystem/src/exonware/xwsystem/query/__init__.py
|
|
4
|
+
|
|
5
|
+
Query foundation layer for eXonware ecosystem.
|
|
6
|
+
|
|
7
|
+
This package defines query contracts and a small registry that higher-level
|
|
8
|
+
libraries (e.g., xwquery) can register into, while lower-level libraries
|
|
9
|
+
(e.g., xwnode) can depend on without creating circular dependencies.
|
|
10
|
+
|
|
11
|
+
Company: eXonware.com
|
|
12
|
+
Author: Eng. Muhammad AlShehri
|
|
13
|
+
Email: connect@exonware.com
|
|
14
|
+
Version: 0.1.0.4
|
|
15
|
+
Generation Date: 28-Dec-2025
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from .contracts import IQueryProvider, QueryResult
|
|
19
|
+
from .errors import QueryProviderError, QueryProviderNotRegisteredError
|
|
20
|
+
from .registry import (
|
|
21
|
+
get_query_provider,
|
|
22
|
+
get_query_provider_registry,
|
|
23
|
+
register_query_provider,
|
|
24
|
+
reset_query_provider_registry,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
__all__ = [
|
|
28
|
+
"IQueryProvider",
|
|
29
|
+
"QueryResult",
|
|
30
|
+
"QueryProviderError",
|
|
31
|
+
"QueryProviderNotRegisteredError",
|
|
32
|
+
"get_query_provider",
|
|
33
|
+
"get_query_provider_registry",
|
|
34
|
+
"register_query_provider",
|
|
35
|
+
"reset_query_provider_registry",
|
|
36
|
+
]
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
#exonware/xwsystem/src/exonware/xwsystem/query/contracts.py
|
|
4
|
+
|
|
5
|
+
Query contracts (foundation layer).
|
|
6
|
+
|
|
7
|
+
These interfaces live in xwsystem to avoid circular dependencies between:
|
|
8
|
+
- xwnode (data structures / node facade)
|
|
9
|
+
- xwquery (query engine)
|
|
10
|
+
- xwdata (data facade built on xwnode + xwquery)
|
|
11
|
+
|
|
12
|
+
Company: eXonware.com
|
|
13
|
+
Author: Eng. Muhammad AlShehri
|
|
14
|
+
Email: connect@exonware.com
|
|
15
|
+
Version: 0.1.0.4
|
|
16
|
+
Generation Date: 28-Dec-2025
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from typing import Any, Protocol, runtime_checkable, TypeAlias
|
|
22
|
+
|
|
23
|
+
QueryResult: TypeAlias = Any
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@runtime_checkable
|
|
27
|
+
class IQueryProvider(Protocol):
|
|
28
|
+
"""
|
|
29
|
+
Interface for query execution providers.
|
|
30
|
+
|
|
31
|
+
Implementations live in higher-level packages (e.g., xwquery) and register
|
|
32
|
+
themselves via `exonware.xwsystem.query.registry`.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
provider_id: str
|
|
36
|
+
|
|
37
|
+
def execute(
|
|
38
|
+
self,
|
|
39
|
+
query: str,
|
|
40
|
+
data: Any,
|
|
41
|
+
*,
|
|
42
|
+
format: str | None = None,
|
|
43
|
+
auto_detect: bool = True,
|
|
44
|
+
**opts: Any,
|
|
45
|
+
) -> QueryResult:
|
|
46
|
+
"""
|
|
47
|
+
Execute a query against data.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
query: Query string (SQL, GraphQL, xwquery script, etc.)
|
|
51
|
+
data: Target data (XWNode, dict, list, etc.)
|
|
52
|
+
format: Optional explicit format identifier
|
|
53
|
+
auto_detect: Whether provider should auto-detect when format is None
|
|
54
|
+
**opts: Provider-specific options
|
|
55
|
+
"""
|
|
56
|
+
...
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
#exonware/xwsystem/src/exonware/xwsystem/query/errors.py
|
|
4
|
+
|
|
5
|
+
Query provider errors (foundation layer).
|
|
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
|
+
|
|
15
|
+
class QueryProviderError(Exception):
|
|
16
|
+
"""Base error for query provider integration."""
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class QueryProviderNotRegisteredError(QueryProviderError):
|
|
20
|
+
"""
|
|
21
|
+
Raised when a consumer requests a query provider but none is registered.
|
|
22
|
+
"""
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
#exonware/xwsystem/src/exonware/xwsystem/query/registry.py
|
|
4
|
+
|
|
5
|
+
Global query provider registry (foundation layer).
|
|
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
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from threading import RLock
|
|
17
|
+
from typing import Optional
|
|
18
|
+
|
|
19
|
+
from .contracts import IQueryProvider
|
|
20
|
+
from .errors import QueryProviderNotRegisteredError
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class QueryProviderRegistry:
|
|
24
|
+
"""
|
|
25
|
+
Thread-safe registry for query providers.
|
|
26
|
+
|
|
27
|
+
Design notes:
|
|
28
|
+
- Multiple providers may be registered (future-proofing).
|
|
29
|
+
- A default provider may be selected; consumers typically use the default.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def __init__(self) -> None:
|
|
33
|
+
self._lock = RLock()
|
|
34
|
+
self._providers: dict[str, IQueryProvider] = {}
|
|
35
|
+
self._default_provider_id: Optional[str] = None
|
|
36
|
+
|
|
37
|
+
def register(self, provider: IQueryProvider, *, overwrite: bool = False, make_default: bool = True) -> None:
|
|
38
|
+
provider_id = provider.provider_id.strip().lower()
|
|
39
|
+
if not provider_id:
|
|
40
|
+
raise ValueError("provider.provider_id must be a non-empty string")
|
|
41
|
+
|
|
42
|
+
with self._lock:
|
|
43
|
+
if provider_id in self._providers and not overwrite:
|
|
44
|
+
return
|
|
45
|
+
self._providers[provider_id] = provider
|
|
46
|
+
if make_default or self._default_provider_id is None:
|
|
47
|
+
self._default_provider_id = provider_id
|
|
48
|
+
|
|
49
|
+
def unregister(self, provider_id: str) -> bool:
|
|
50
|
+
pid = provider_id.strip().lower()
|
|
51
|
+
with self._lock:
|
|
52
|
+
if pid not in self._providers:
|
|
53
|
+
return False
|
|
54
|
+
del self._providers[pid]
|
|
55
|
+
if self._default_provider_id == pid:
|
|
56
|
+
self._default_provider_id = next(iter(self._providers.keys()), None)
|
|
57
|
+
return True
|
|
58
|
+
|
|
59
|
+
def get(self, provider_id: str) -> Optional[IQueryProvider]:
|
|
60
|
+
pid = provider_id.strip().lower()
|
|
61
|
+
with self._lock:
|
|
62
|
+
return self._providers.get(pid)
|
|
63
|
+
|
|
64
|
+
def get_default(self) -> Optional[IQueryProvider]:
|
|
65
|
+
with self._lock:
|
|
66
|
+
if not self._default_provider_id:
|
|
67
|
+
return None
|
|
68
|
+
return self._providers.get(self._default_provider_id)
|
|
69
|
+
|
|
70
|
+
def require_default(self) -> IQueryProvider:
|
|
71
|
+
provider = self.get_default()
|
|
72
|
+
if provider is None:
|
|
73
|
+
raise QueryProviderNotRegisteredError(
|
|
74
|
+
"No query provider registered. "
|
|
75
|
+
"Install and import exonware-xwquery to register a provider."
|
|
76
|
+
)
|
|
77
|
+
return provider
|
|
78
|
+
|
|
79
|
+
def list_provider_ids(self) -> list[str]:
|
|
80
|
+
with self._lock:
|
|
81
|
+
return list(self._providers.keys())
|
|
82
|
+
|
|
83
|
+
def clear(self) -> None:
|
|
84
|
+
with self._lock:
|
|
85
|
+
self._providers.clear()
|
|
86
|
+
self._default_provider_id = None
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
_global_registry: Optional[QueryProviderRegistry] = None
|
|
90
|
+
_global_lock = RLock()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def get_query_provider_registry() -> QueryProviderRegistry:
|
|
94
|
+
"""
|
|
95
|
+
Get the global query provider registry (thread-safe singleton).
|
|
96
|
+
"""
|
|
97
|
+
global _global_registry
|
|
98
|
+
if _global_registry is None:
|
|
99
|
+
with _global_lock:
|
|
100
|
+
if _global_registry is None:
|
|
101
|
+
_global_registry = QueryProviderRegistry()
|
|
102
|
+
return _global_registry
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def reset_query_provider_registry() -> None:
|
|
106
|
+
"""
|
|
107
|
+
Reset the global registry (primarily for testing).
|
|
108
|
+
"""
|
|
109
|
+
global _global_registry
|
|
110
|
+
with _global_lock:
|
|
111
|
+
_global_registry = None
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def register_query_provider(provider: IQueryProvider, *, overwrite: bool = False, make_default: bool = True) -> None:
|
|
115
|
+
"""
|
|
116
|
+
Register a query provider in the global registry.
|
|
117
|
+
"""
|
|
118
|
+
get_query_provider_registry().register(provider, overwrite=overwrite, make_default=make_default)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def get_query_provider(provider_id: str | None = None) -> Optional[IQueryProvider]:
|
|
122
|
+
"""
|
|
123
|
+
Get a provider by id, or the default provider if provider_id is None.
|
|
124
|
+
"""
|
|
125
|
+
registry = get_query_provider_registry()
|
|
126
|
+
if provider_id is None:
|
|
127
|
+
return registry.get_default()
|
|
128
|
+
return registry.get(provider_id)
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/runtime/base.py
|
|
1
2
|
#exonware/xwsystem/runtime/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
|
Runtime module base classes - abstract classes for runtime functionality.
|
|
10
11
|
"""
|
|
11
12
|
|
|
12
13
|
from abc import ABC, abstractmethod
|
|
13
|
-
from typing import Any, Optional,
|
|
14
|
+
from typing import Any, Optional, Callable
|
|
14
15
|
from .contracts import RuntimeMode, PlatformType, PythonVersion, EnvironmentType
|
|
15
16
|
|
|
16
17
|
|
|
@@ -370,7 +371,7 @@ class ARuntimeManagerBase(ABC):
|
|
|
370
371
|
|
|
371
372
|
|
|
372
373
|
class BaseRuntime(ARuntimeBase):
|
|
373
|
-
"""Base runtime implementation
|
|
374
|
+
"""Base runtime implementation."""
|
|
374
375
|
|
|
375
376
|
def __init__(self, mode: RuntimeMode = RuntimeMode.NORMAL):
|
|
376
377
|
"""Initialize base runtime."""
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/runtime/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
|
Runtime module contracts - interfaces and enums for runtime environment functionality.
|
|
9
10
|
"""
|
|
10
11
|
|
|
11
|
-
from
|
|
12
|
-
from typing import Any, Optional, Union, Callable
|
|
12
|
+
from typing import Any, Optional, Callable, Protocol, runtime_checkable
|
|
13
13
|
import sys
|
|
14
14
|
|
|
15
15
|
# Import enums from types module
|
|
@@ -21,151 +21,130 @@ from .defs import (
|
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
@runtime_checkable
|
|
25
|
+
class IEnvironmentManager(Protocol):
|
|
25
26
|
"""Interface for environment management."""
|
|
26
27
|
|
|
27
|
-
@abstractmethod
|
|
28
28
|
def get_environment_type(self) -> EnvironmentType:
|
|
29
29
|
"""Get current environment type."""
|
|
30
|
-
|
|
30
|
+
...
|
|
31
31
|
|
|
32
|
-
@abstractmethod
|
|
33
32
|
def set_environment_type(self, env_type: EnvironmentType) -> None:
|
|
34
33
|
"""Set environment type."""
|
|
35
|
-
|
|
34
|
+
...
|
|
36
35
|
|
|
37
|
-
@abstractmethod
|
|
38
36
|
def get_environment_variable(self, name: str, default: Optional[str] = None) -> Optional[str]:
|
|
39
37
|
"""Get environment variable."""
|
|
40
|
-
|
|
38
|
+
...
|
|
41
39
|
|
|
42
|
-
@abstractmethod
|
|
43
40
|
def set_environment_variable(self, name: str, value: str) -> None:
|
|
44
41
|
"""Set environment variable."""
|
|
45
|
-
|
|
42
|
+
...
|
|
46
43
|
|
|
47
|
-
@abstractmethod
|
|
48
44
|
def get_all_environment_variables(self) -> dict[str, str]:
|
|
49
45
|
"""Get all environment variables."""
|
|
50
|
-
|
|
46
|
+
...
|
|
51
47
|
|
|
52
48
|
|
|
53
|
-
|
|
49
|
+
@runtime_checkable
|
|
50
|
+
class IPlatformInfo(Protocol):
|
|
54
51
|
"""Interface for platform information."""
|
|
55
52
|
|
|
56
|
-
@abstractmethod
|
|
57
53
|
def get_platform_type(self) -> PlatformType:
|
|
58
54
|
"""Get platform type."""
|
|
59
|
-
|
|
55
|
+
...
|
|
60
56
|
|
|
61
|
-
@abstractmethod
|
|
62
57
|
def get_platform_version(self) -> str:
|
|
63
58
|
"""Get platform version."""
|
|
64
|
-
|
|
59
|
+
...
|
|
65
60
|
|
|
66
|
-
@abstractmethod
|
|
67
61
|
def get_architecture(self) -> str:
|
|
68
62
|
"""Get system architecture."""
|
|
69
|
-
|
|
63
|
+
...
|
|
70
64
|
|
|
71
|
-
@abstractmethod
|
|
72
65
|
def get_hostname(self) -> str:
|
|
73
66
|
"""Get system hostname."""
|
|
74
|
-
|
|
67
|
+
...
|
|
75
68
|
|
|
76
|
-
@abstractmethod
|
|
77
69
|
def get_username(self) -> str:
|
|
78
70
|
"""Get current username."""
|
|
79
|
-
|
|
71
|
+
...
|
|
80
72
|
|
|
81
73
|
|
|
82
|
-
|
|
74
|
+
@runtime_checkable
|
|
75
|
+
class IPythonInfo(Protocol):
|
|
83
76
|
"""Interface for Python information."""
|
|
84
77
|
|
|
85
|
-
@abstractmethod
|
|
86
78
|
def get_python_version(self) -> PythonVersion:
|
|
87
79
|
"""Get Python version."""
|
|
88
|
-
|
|
80
|
+
...
|
|
89
81
|
|
|
90
|
-
@abstractmethod
|
|
91
82
|
def get_python_executable(self) -> str:
|
|
92
83
|
"""Get Python executable path."""
|
|
93
|
-
|
|
84
|
+
...
|
|
94
85
|
|
|
95
|
-
@abstractmethod
|
|
96
86
|
def get_python_path(self) -> list[str]:
|
|
97
87
|
"""Get Python path."""
|
|
98
|
-
|
|
88
|
+
...
|
|
99
89
|
|
|
100
|
-
@abstractmethod
|
|
101
90
|
def get_installed_packages(self) -> dict[str, str]:
|
|
102
91
|
"""Get installed packages."""
|
|
103
|
-
|
|
92
|
+
...
|
|
104
93
|
|
|
105
|
-
@abstractmethod
|
|
106
94
|
def is_package_installed(self, package_name: str) -> bool:
|
|
107
95
|
"""Check if package is installed."""
|
|
108
|
-
|
|
96
|
+
...
|
|
109
97
|
|
|
110
98
|
|
|
111
|
-
|
|
99
|
+
@runtime_checkable
|
|
100
|
+
class IReflectionUtils(Protocol):
|
|
112
101
|
"""Interface for reflection utilities."""
|
|
113
102
|
|
|
114
|
-
@abstractmethod
|
|
115
103
|
def get_class_from_string(self, class_path: str) -> type:
|
|
116
104
|
"""Get class from string path."""
|
|
117
|
-
|
|
105
|
+
...
|
|
118
106
|
|
|
119
|
-
@abstractmethod
|
|
120
107
|
def get_function_from_string(self, function_path: str) -> Callable:
|
|
121
108
|
"""Get function from string path."""
|
|
122
|
-
|
|
109
|
+
...
|
|
123
110
|
|
|
124
|
-
@abstractmethod
|
|
125
111
|
def find_classes_in_module(self, module: Any, base_class: type) -> list[type]:
|
|
126
112
|
"""Find classes in module."""
|
|
127
|
-
|
|
113
|
+
...
|
|
128
114
|
|
|
129
|
-
@abstractmethod
|
|
130
115
|
def get_class_hierarchy(self, cls: type) -> list[type]:
|
|
131
116
|
"""Get class hierarchy."""
|
|
132
|
-
|
|
117
|
+
...
|
|
133
118
|
|
|
134
|
-
@abstractmethod
|
|
135
119
|
def get_class_attributes(self, cls: type) -> dict[str, Any]:
|
|
136
120
|
"""Get class attributes."""
|
|
137
|
-
|
|
121
|
+
...
|
|
138
122
|
|
|
139
123
|
|
|
140
|
-
|
|
124
|
+
@runtime_checkable
|
|
125
|
+
class IRuntimeConfig(Protocol):
|
|
141
126
|
"""Interface for runtime configuration."""
|
|
142
127
|
|
|
143
|
-
@abstractmethod
|
|
144
128
|
def get_runtime_mode(self) -> RuntimeMode:
|
|
145
129
|
"""Get runtime mode."""
|
|
146
|
-
|
|
130
|
+
...
|
|
147
131
|
|
|
148
|
-
@abstractmethod
|
|
149
132
|
def set_runtime_mode(self, mode: RuntimeMode) -> None:
|
|
150
133
|
"""Set runtime mode."""
|
|
151
|
-
|
|
134
|
+
...
|
|
152
135
|
|
|
153
|
-
@abstractmethod
|
|
154
136
|
def get_config_value(self, key: str, default: Optional[Any] = None) -> Any:
|
|
155
137
|
"""Get configuration value."""
|
|
156
|
-
|
|
138
|
+
...
|
|
157
139
|
|
|
158
|
-
@abstractmethod
|
|
159
140
|
def set_config_value(self, key: str, value: Any) -> None:
|
|
160
141
|
"""Set configuration value."""
|
|
161
|
-
|
|
142
|
+
...
|
|
162
143
|
|
|
163
|
-
@abstractmethod
|
|
164
144
|
def load_config_from_file(self, file_path: str) -> None:
|
|
165
145
|
"""Load configuration from file."""
|
|
166
|
-
|
|
146
|
+
...
|
|
167
147
|
|
|
168
|
-
@abstractmethod
|
|
169
148
|
def save_config_to_file(self, file_path: str) -> None:
|
|
170
149
|
"""Save configuration to file."""
|
|
171
|
-
|
|
150
|
+
...
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/runtime/defs.py
|
|
2
3
|
#exonware/xwsystem/runtime/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.
|
|
8
|
+
Version: 0.1.0.4
|
|
8
9
|
Generation Date: 07-Sep-2025
|
|
9
10
|
|
|
10
11
|
Runtime types and enums for XWSystem.
|
exonware/xwsystem/runtime/env.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/runtime/env.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
|
Environment management utilities for runtime configuration and detection.
|
|
@@ -12,7 +13,7 @@ import os
|
|
|
12
13
|
import platform
|
|
13
14
|
import sys
|
|
14
15
|
from pathlib import Path
|
|
15
|
-
from typing import Any, Optional
|
|
16
|
+
from typing import Any, Optional
|
|
16
17
|
|
|
17
18
|
from ..config.logging_setup import get_logger
|
|
18
19
|
|
|
@@ -49,18 +50,18 @@ class EnvironmentManager:
|
|
|
49
50
|
|
|
50
51
|
@property
|
|
51
52
|
def is_windows(self) -> bool:
|
|
52
|
-
"""Check if running on Windows."""
|
|
53
|
-
return platform.system()
|
|
53
|
+
"""Check if running on Windows using Python's native platform module."""
|
|
54
|
+
return platform.system() == 'Windows'
|
|
54
55
|
|
|
55
56
|
@property
|
|
56
57
|
def is_linux(self) -> bool:
|
|
57
|
-
"""Check if running on Linux."""
|
|
58
|
-
return platform.system()
|
|
58
|
+
"""Check if running on Linux using Python's native platform module."""
|
|
59
|
+
return platform.system() == 'Linux'
|
|
59
60
|
|
|
60
61
|
@property
|
|
61
62
|
def is_macos(self) -> bool:
|
|
62
|
-
"""Check if running on macOS."""
|
|
63
|
-
return platform.system()
|
|
63
|
+
"""Check if running on macOS using Python's native platform module."""
|
|
64
|
+
return platform.system() == 'Darwin'
|
|
64
65
|
|
|
65
66
|
@property
|
|
66
67
|
def is_64bit(self) -> bool:
|
|
@@ -262,7 +263,8 @@ class EnvironmentManager:
|
|
|
262
263
|
|
|
263
264
|
def get_temp_dir(self) -> Path:
|
|
264
265
|
"""Get system temporary directory."""
|
|
265
|
-
|
|
266
|
+
import tempfile
|
|
267
|
+
return Path(tempfile.gettempdir())
|
|
266
268
|
|
|
267
269
|
def get_current_working_dir(self) -> Path:
|
|
268
270
|
"""Get current working directory."""
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/runtime/errors.py
|
|
1
2
|
#exonware/xwsystem/runtime/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
|
Runtime module errors - exception classes for runtime functionality.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/runtime/reflection.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
|
Reflection utilities for dynamic code inspection and manipulation.
|
|
@@ -12,7 +13,7 @@ import importlib
|
|
|
12
13
|
import inspect
|
|
13
14
|
import sys
|
|
14
15
|
from pathlib import Path
|
|
15
|
-
from typing import Any, Callable, Optional
|
|
16
|
+
from typing import Any, Callable, Optional
|
|
16
17
|
|
|
17
18
|
from ..config.logging_setup import get_logger
|
|
18
19
|
|