exonware-xwsystem 0.0.1.411__py3-none-any.whl → 0.1.0.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +73 -391
- 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 +279 -14
- 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 +199 -0
- 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 +65 -33
- exonware/xwsystem/io/serialization/formats/text/json5.py +8 -4
- exonware/xwsystem/io/serialization/formats/text/jsonlines.py +113 -25
- 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 +16 -0
- exonware/xwsystem/io/serialization/parsers/base.py +60 -0
- exonware/xwsystem/io/serialization/parsers/hybrid_parser.py +62 -0
- exonware/xwsystem/io/serialization/parsers/msgspec_parser.py +48 -0
- exonware/xwsystem/io/serialization/parsers/orjson_direct_parser.py +54 -0
- exonware/xwsystem/io/serialization/parsers/orjson_parser.py +62 -0
- exonware/xwsystem/io/serialization/parsers/pysimdjson_parser.py +55 -0
- exonware/xwsystem/io/serialization/parsers/rapidjson_parser.py +53 -0
- exonware/xwsystem/io/serialization/parsers/registry.py +91 -0
- exonware/xwsystem/io/serialization/parsers/standard.py +44 -0
- exonware/xwsystem/io/serialization/parsers/ujson_parser.py +53 -0
- 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 +139 -480
- 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 +4 -4
- {exonware_xwsystem-0.0.1.411.dist-info → exonware_xwsystem-0.1.0.3.dist-info}/METADATA +71 -4
- exonware_xwsystem-0.1.0.3.dist-info/RECORD +337 -0
- exonware/xwsystem/caching/USAGE_GUIDE.md +0 -779
- 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.0.1.411.dist-info/RECORD +0 -274
- {exonware_xwsystem-0.0.1.411.dist-info → exonware_xwsystem-0.1.0.3.dist-info}/WHEEL +0 -0
- {exonware_xwsystem-0.0.1.411.dist-info → exonware_xwsystem-0.1.0.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/caching/decorators.py
|
|
2
3
|
#exonware/xwsystem/caching/decorators.py
|
|
3
4
|
"""
|
|
4
5
|
Company: eXonware.com
|
|
5
6
|
Author: Eng. Muhammad AlShehri
|
|
6
7
|
Email: connect@exonware.com
|
|
7
|
-
Version: 0.0.
|
|
8
|
+
Version: 0.1.0.3
|
|
8
9
|
Generation Date: 01-Nov-2025
|
|
9
10
|
|
|
10
11
|
Advanced cache decorators with hooks and customization.
|
|
@@ -55,8 +56,11 @@ def xwcached(
|
|
|
55
56
|
return value * 2
|
|
56
57
|
"""
|
|
57
58
|
# Initialize cache if not provided
|
|
59
|
+
# Use flexible create_cache() to allow configuration via environment/settings
|
|
60
|
+
# Defaults to FunctoolsLRUCache (fastest Python cache)
|
|
58
61
|
if cache is None:
|
|
59
|
-
|
|
62
|
+
from .factory import create_cache
|
|
63
|
+
cache = create_cache(capacity=128, namespace='xwsystem.decorators')
|
|
60
64
|
|
|
61
65
|
def decorator(func: Callable) -> Callable:
|
|
62
66
|
@functools.wraps(func)
|
|
@@ -243,26 +247,9 @@ def xw_async_cache(func: Optional[Callable] = None, ttl: Optional[int] = None):
|
|
|
243
247
|
return xw_async_cached()(func)
|
|
244
248
|
|
|
245
249
|
|
|
246
|
-
# Backward compatibility aliases (deprecated, use xw-prefixed versions)
|
|
247
|
-
cached = xwcached
|
|
248
|
-
async_cached = xw_async_cached
|
|
249
|
-
cache = xwcache
|
|
250
|
-
async_cache = xw_async_cache
|
|
251
|
-
cache_result = xwcache
|
|
252
|
-
async_cache_result = xw_async_cache
|
|
253
|
-
|
|
254
|
-
|
|
255
250
|
__all__ = [
|
|
256
|
-
# New XW-prefixed names (preferred)
|
|
257
251
|
'xwcached',
|
|
258
252
|
'xw_async_cached',
|
|
259
253
|
'xwcache',
|
|
260
254
|
'xw_async_cache',
|
|
261
|
-
# Backward compatibility (deprecated)
|
|
262
|
-
'cached',
|
|
263
|
-
'async_cached',
|
|
264
|
-
'cache',
|
|
265
|
-
'async_cache',
|
|
266
|
-
'cache_result',
|
|
267
|
-
'async_cache_result',
|
|
268
255
|
]
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/caching/defs.py
|
|
2
3
|
#exonware/xwsystem/caching/types.py
|
|
3
4
|
"""
|
|
4
5
|
Company: eXonware.com
|
|
5
6
|
Author: Eng. Muhammad AlShehri
|
|
6
7
|
Email: connect@exonware.com
|
|
7
|
-
Version: 0.0.
|
|
8
|
+
Version: 0.1.0.3
|
|
8
9
|
Generation Date: 07-Sep-2025
|
|
9
10
|
|
|
10
11
|
Caching types and enums for XWSystem.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/caching/disk_cache.py
|
|
2
3
|
"""
|
|
3
4
|
Company: eXonware.com
|
|
4
5
|
Author: Eng. Muhammad AlShehri
|
|
5
6
|
Email: connect@exonware.com
|
|
6
|
-
Version: 0.0.
|
|
7
|
+
Version: 0.1.0.3
|
|
7
8
|
Generation Date: October 26, 2025
|
|
8
9
|
|
|
9
10
|
Disk cache implementation with pickle-based persistence.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/caching/distributed.py
|
|
1
2
|
"""
|
|
2
3
|
Company: eXonware.com
|
|
3
4
|
Author: Eng. Muhammad AlShehri
|
|
4
5
|
Email: connect@exonware.com
|
|
5
|
-
Version: 0.0.
|
|
6
|
+
Version: 0.1.0.3
|
|
6
7
|
Generation Date: 01-Nov-2025
|
|
7
8
|
|
|
8
9
|
Distributed cache implementations - Coming in v1.0.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/caching/errors.py
|
|
1
2
|
"""
|
|
2
3
|
Company: eXonware.com
|
|
3
4
|
Author: Eng. Muhammad AlShehri
|
|
4
5
|
Email: connect@exonware.com
|
|
5
|
-
Version: 0.0.
|
|
6
|
+
Version: 0.1.0.3
|
|
6
7
|
Generation Date: September 04, 2025
|
|
7
8
|
|
|
8
9
|
Caching module errors - exception classes for caching functionality.
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/caching/events.py
|
|
2
3
|
#exonware/xwsystem/caching/events.py
|
|
3
4
|
"""
|
|
4
5
|
Company: eXonware.com
|
|
5
6
|
Author: Eng. Muhammad AlShehri
|
|
6
7
|
Email: connect@exonware.com
|
|
7
|
-
Version: 0.0.
|
|
8
|
+
Version: 0.1.0.3
|
|
8
9
|
Generation Date: 01-Nov-2025
|
|
9
10
|
|
|
10
11
|
Event system for caching module.
|
|
@@ -14,6 +15,7 @@ Extensibility Priority #5 - Event-driven architecture for custom behaviors.
|
|
|
14
15
|
from typing import Callable, Any, Optional
|
|
15
16
|
from enum import Enum
|
|
16
17
|
from ..config.logging_setup import get_logger
|
|
18
|
+
from ..console import ConsoleEventLogger
|
|
17
19
|
|
|
18
20
|
logger = get_logger("xwsystem.caching.events")
|
|
19
21
|
|
|
@@ -139,56 +141,138 @@ class EventLogger:
|
|
|
139
141
|
Built-in event logger for debugging.
|
|
140
142
|
|
|
141
143
|
Logs all cache events for debugging and monitoring.
|
|
144
|
+
Uses ConsoleEventLogger internally for XWUIConsole compatibility.
|
|
142
145
|
"""
|
|
143
146
|
|
|
144
|
-
|
|
147
|
+
# Map CacheEvent to ConsoleEventType
|
|
148
|
+
_CACHE_EVENT_TO_CONSOLE_TYPE = {
|
|
149
|
+
CacheEvent.HIT: 'info',
|
|
150
|
+
CacheEvent.MISS: 'warn',
|
|
151
|
+
CacheEvent.PUT: 'log',
|
|
152
|
+
CacheEvent.DELETE: 'log',
|
|
153
|
+
CacheEvent.EVICT: 'warn',
|
|
154
|
+
CacheEvent.EXPIRE: 'warn',
|
|
155
|
+
CacheEvent.CLEAR: 'system',
|
|
156
|
+
CacheEvent.ERROR: 'error',
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
def __init__(self, log_level: str = "DEBUG", max_entries: int = 1000):
|
|
145
160
|
"""
|
|
146
161
|
Initialize event logger.
|
|
147
162
|
|
|
148
163
|
Args:
|
|
149
|
-
log_level: Logging level for events
|
|
164
|
+
log_level: Logging level for events (for compatibility, not used by ConsoleEventLogger)
|
|
165
|
+
max_entries: Maximum number of events to keep
|
|
150
166
|
"""
|
|
151
167
|
self.log_level = log_level
|
|
152
|
-
|
|
168
|
+
# Use ConsoleEventLogger internally
|
|
169
|
+
self._console_logger = ConsoleEventLogger(
|
|
170
|
+
max_entries=max_entries,
|
|
171
|
+
use_milliseconds=True,
|
|
172
|
+
default_source="cache.events"
|
|
173
|
+
)
|
|
153
174
|
|
|
154
175
|
def __call__(self, event: CacheEvent, **kwargs):
|
|
155
176
|
"""Log event."""
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
log_entry = {
|
|
159
|
-
'timestamp': time.time(),
|
|
160
|
-
'event': event.value,
|
|
161
|
-
'data': kwargs
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
self.events_log.append(log_entry)
|
|
177
|
+
# Map CacheEvent to ConsoleEventType
|
|
178
|
+
console_type = self._CACHE_EVENT_TO_CONSOLE_TYPE.get(event, 'log')
|
|
165
179
|
|
|
166
|
-
# Format message
|
|
180
|
+
# Format message based on event type
|
|
167
181
|
key = kwargs.get('key', '?')
|
|
168
182
|
if event == CacheEvent.HIT:
|
|
169
|
-
|
|
183
|
+
msg = f"Cache HIT: {key}"
|
|
184
|
+
logger.debug(f"[EVENT] {msg}")
|
|
170
185
|
elif event == CacheEvent.MISS:
|
|
171
|
-
|
|
186
|
+
msg = f"Cache MISS: {key}"
|
|
187
|
+
logger.debug(f"[EVENT] {msg}")
|
|
172
188
|
elif event == CacheEvent.PUT:
|
|
173
|
-
|
|
189
|
+
msg = f"Cache PUT: {key}"
|
|
190
|
+
logger.debug(f"[EVENT] {msg}")
|
|
174
191
|
elif event == CacheEvent.DELETE:
|
|
175
|
-
|
|
192
|
+
msg = f"Cache DELETE: {key}"
|
|
193
|
+
logger.debug(f"[EVENT] {msg}")
|
|
176
194
|
elif event == CacheEvent.EVICT:
|
|
177
|
-
|
|
195
|
+
msg = f"Cache EVICT: {key}"
|
|
196
|
+
logger.debug(f"[EVENT] {msg}")
|
|
178
197
|
elif event == CacheEvent.EXPIRE:
|
|
179
|
-
|
|
198
|
+
msg = f"Cache EXPIRE: {key}"
|
|
199
|
+
logger.debug(f"[EVENT] {msg}")
|
|
200
|
+
elif event == CacheEvent.CLEAR:
|
|
201
|
+
msg = "Cache CLEAR"
|
|
202
|
+
logger.debug(f"[EVENT] {msg}")
|
|
180
203
|
elif event == CacheEvent.ERROR:
|
|
181
|
-
|
|
204
|
+
error_msg = kwargs.get('error', 'Unknown')
|
|
205
|
+
msg = f"Cache ERROR: {error_msg}"
|
|
206
|
+
logger.error(f"[EVENT] {msg}")
|
|
207
|
+
else:
|
|
208
|
+
msg = f"Cache {event.value.upper()}: {key}"
|
|
209
|
+
|
|
210
|
+
# Log to ConsoleEventLogger
|
|
211
|
+
# Include original cache event type in data for filtering
|
|
212
|
+
event_data = kwargs.copy()
|
|
213
|
+
event_data['_cache_event'] = event.value
|
|
214
|
+
|
|
215
|
+
self._console_logger.add_event(
|
|
216
|
+
event_type=console_type,
|
|
217
|
+
msg=msg,
|
|
218
|
+
source="cache.events",
|
|
219
|
+
data=event_data
|
|
220
|
+
)
|
|
182
221
|
|
|
183
222
|
def get_events(self, event_type: Optional[CacheEvent] = None) -> list[dict[str, Any]]:
|
|
184
|
-
"""
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
223
|
+
"""
|
|
224
|
+
Get logged events, optionally filtered by type.
|
|
225
|
+
|
|
226
|
+
Returns events in a simplified format.
|
|
227
|
+
For XWUIConsole format, use get_console_events() instead.
|
|
228
|
+
"""
|
|
229
|
+
# Get events from ConsoleEventLogger
|
|
230
|
+
console_events = self._console_logger.get_events_raw()
|
|
231
|
+
|
|
232
|
+
# Convert to simplified format
|
|
233
|
+
result = []
|
|
234
|
+
for event in console_events:
|
|
235
|
+
# Extract original event type from data if available
|
|
236
|
+
event_data = event.data or {}
|
|
237
|
+
cache_event_value = event_data.get('_cache_event', None)
|
|
238
|
+
|
|
239
|
+
# Filter by event_type if specified
|
|
240
|
+
if event_type is not None:
|
|
241
|
+
if cache_event_value != event_type.value:
|
|
242
|
+
continue
|
|
243
|
+
|
|
244
|
+
# Convert to old format
|
|
245
|
+
old_format = {
|
|
246
|
+
'timestamp': event.timestamp / 1000 if isinstance(event.timestamp, (int, float)) and event.timestamp > 1e10 else event.timestamp,
|
|
247
|
+
'event': cache_event_value or event.type,
|
|
248
|
+
'data': event.data
|
|
249
|
+
}
|
|
250
|
+
result.append(old_format)
|
|
251
|
+
|
|
252
|
+
return result
|
|
253
|
+
|
|
254
|
+
def get_console_events(self) -> list[dict[str, Any]]:
|
|
255
|
+
"""
|
|
256
|
+
Get logged events in structured format.
|
|
257
|
+
|
|
258
|
+
Returns:
|
|
259
|
+
List of event dictionaries in ConsoleEvent format
|
|
260
|
+
"""
|
|
261
|
+
return self._console_logger.get_events()
|
|
188
262
|
|
|
189
263
|
def clear(self) -> None:
|
|
190
264
|
"""Clear event log."""
|
|
191
|
-
self.
|
|
265
|
+
self._console_logger.clear()
|
|
266
|
+
|
|
267
|
+
@property
|
|
268
|
+
def console_logger(self) -> ConsoleEventLogger:
|
|
269
|
+
"""
|
|
270
|
+
Get the underlying ConsoleEventLogger instance.
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
ConsoleEventLogger instance for direct access
|
|
274
|
+
"""
|
|
275
|
+
return self._console_logger
|
|
192
276
|
|
|
193
277
|
|
|
194
278
|
__all__ = [
|
|
@@ -196,4 +280,3 @@ __all__ = [
|
|
|
196
280
|
'CacheEventEmitter',
|
|
197
281
|
'EventLogger',
|
|
198
282
|
]
|
|
199
|
-
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/caching/eviction_strategies.py
|
|
2
3
|
#exonware/xwsystem/caching/eviction_strategies.py
|
|
3
4
|
"""
|
|
4
5
|
Company: eXonware.com
|
|
5
6
|
Author: Eng. Muhammad AlShehri
|
|
6
7
|
Email: connect@exonware.com
|
|
7
|
-
Version: 0.0.
|
|
8
|
+
Version: 0.1.0.3
|
|
8
9
|
Generation Date: 01-Nov-2025
|
|
9
10
|
|
|
10
11
|
Pluggable eviction strategies for caching module.
|
|
@@ -267,4 +268,3 @@ __all__ = [
|
|
|
267
268
|
'SizeBasedEvictionStrategy',
|
|
268
269
|
'TTLEvictionStrategy',
|
|
269
270
|
]
|
|
270
|
-
|