exonware-xwsystem 0.1.0.1__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 +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.3.dist-info}/METADATA +71 -4
- exonware_xwsystem-0.1.0.3.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.3.dist-info}/WHEEL +0 -0
- {exonware_xwsystem-0.1.0.1.dist-info → exonware_xwsystem-0.1.0.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/console/cli/progress.py
|
|
1
2
|
"""
|
|
2
3
|
Progress Bar Utilities
|
|
3
4
|
=====================
|
|
@@ -7,24 +8,27 @@ Production-grade progress indicators for XSystem.
|
|
|
7
8
|
Company: eXonware.com
|
|
8
9
|
Author: Eng. Muhammad AlShehri
|
|
9
10
|
Email: connect@exonware.com
|
|
10
|
-
Version: 0.1.0.
|
|
11
|
+
Version: 0.1.0.3
|
|
11
12
|
Generation Date: September 05, 2025
|
|
12
13
|
"""
|
|
13
14
|
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
14
17
|
import sys
|
|
15
18
|
import time
|
|
16
19
|
import threading
|
|
17
|
-
from typing import Optional, TextIO
|
|
20
|
+
from typing import Optional, TextIO
|
|
18
21
|
from dataclasses import dataclass
|
|
19
22
|
import math
|
|
20
23
|
|
|
21
|
-
# Import
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
# Import general console enums from console level (priority)
|
|
25
|
+
from ..defs import Colors, Style
|
|
26
|
+
# Import CLI-specific color utilities
|
|
27
|
+
from .colors import colorize
|
|
24
28
|
|
|
25
29
|
|
|
26
30
|
@dataclass
|
|
27
|
-
class
|
|
31
|
+
class CliProgressConfig:
|
|
28
32
|
"""Configuration for progress indicators."""
|
|
29
33
|
width: int = 50
|
|
30
34
|
show_percentage: bool = True
|
|
@@ -36,7 +40,7 @@ class ProgressConfig:
|
|
|
36
40
|
style: str = Style.BOLD
|
|
37
41
|
|
|
38
42
|
|
|
39
|
-
class
|
|
43
|
+
class CliProgressBar:
|
|
40
44
|
"""
|
|
41
45
|
Production-grade progress bar with ETA and rate calculation.
|
|
42
46
|
|
|
@@ -52,7 +56,7 @@ class ProgressBar:
|
|
|
52
56
|
def __init__(self,
|
|
53
57
|
total: int,
|
|
54
58
|
description: str = "",
|
|
55
|
-
config:
|
|
59
|
+
config: CliProgressConfig = None,
|
|
56
60
|
file: TextIO = None):
|
|
57
61
|
"""
|
|
58
62
|
Initialize progress bar.
|
|
@@ -65,7 +69,7 @@ class ProgressBar:
|
|
|
65
69
|
"""
|
|
66
70
|
self.total = total
|
|
67
71
|
self.description = description
|
|
68
|
-
self.config = config or
|
|
72
|
+
self.config = config or CliProgressConfig()
|
|
69
73
|
self.file = file or sys.stderr
|
|
70
74
|
|
|
71
75
|
# Progress tracking
|
|
@@ -100,7 +104,7 @@ class ProgressBar:
|
|
|
100
104
|
self._update_rate(current_time)
|
|
101
105
|
self._last_rate_update = current_time
|
|
102
106
|
|
|
103
|
-
# Check if
|
|
107
|
+
# Check if to refresh display
|
|
104
108
|
if (current_time - self.last_update >= self.config.refresh_rate or
|
|
105
109
|
self.current >= self.total):
|
|
106
110
|
self._refresh_display()
|
|
@@ -240,7 +244,7 @@ class ProgressBar:
|
|
|
240
244
|
self.close()
|
|
241
245
|
|
|
242
246
|
|
|
243
|
-
class
|
|
247
|
+
class CliSpinnerProgress:
|
|
244
248
|
"""
|
|
245
249
|
Spinning progress indicator for indeterminate tasks.
|
|
246
250
|
|
|
@@ -283,7 +287,7 @@ class SpinnerProgress:
|
|
|
283
287
|
self._frame_index = 0
|
|
284
288
|
self._lock = threading.Lock()
|
|
285
289
|
|
|
286
|
-
def start(self) ->
|
|
290
|
+
def start(self) -> CliSpinnerProgress:
|
|
287
291
|
"""Start the spinner animation."""
|
|
288
292
|
with self._lock:
|
|
289
293
|
if not self._running:
|
|
@@ -330,7 +334,7 @@ class SpinnerProgress:
|
|
|
330
334
|
self.stop()
|
|
331
335
|
|
|
332
336
|
|
|
333
|
-
class
|
|
337
|
+
class CliMultiProgress:
|
|
334
338
|
"""
|
|
335
339
|
Multiple progress bars manager.
|
|
336
340
|
|
|
@@ -357,7 +361,7 @@ class MultiProgress:
|
|
|
357
361
|
bar_id: str,
|
|
358
362
|
total: int,
|
|
359
363
|
description: str = "",
|
|
360
|
-
config:
|
|
364
|
+
config: CliProgressConfig = None) -> CliProgressBar:
|
|
361
365
|
"""
|
|
362
366
|
Add a new progress bar.
|
|
363
367
|
|
|
@@ -375,7 +379,7 @@ class MultiProgress:
|
|
|
375
379
|
raise ValueError(f"Progress bar '{bar_id}' already exists")
|
|
376
380
|
|
|
377
381
|
# Create progress bar with custom file to prevent direct output
|
|
378
|
-
bar =
|
|
382
|
+
bar = CliProgressBar(total, description, config, file=self)
|
|
379
383
|
self._bars[bar_id] = bar
|
|
380
384
|
self._active = True
|
|
381
385
|
return bar
|
|
@@ -436,14 +440,14 @@ class MultiProgress:
|
|
|
436
440
|
|
|
437
441
|
|
|
438
442
|
# Utility functions
|
|
439
|
-
def create_progress_bar(total: int, description: str = "") ->
|
|
443
|
+
def create_progress_bar(total: int, description: str = "") -> CliProgressBar:
|
|
440
444
|
"""Create a simple progress bar."""
|
|
441
|
-
return
|
|
445
|
+
return CliProgressBar(total, description)
|
|
442
446
|
|
|
443
447
|
|
|
444
|
-
def create_spinner(message: str = "Processing...") ->
|
|
448
|
+
def create_spinner(message: str = "Processing...") -> CliSpinnerProgress:
|
|
445
449
|
"""Create a simple spinner."""
|
|
446
|
-
return
|
|
450
|
+
return CliSpinnerProgress(message)
|
|
447
451
|
|
|
448
452
|
|
|
449
453
|
def progress_range(iterable, description: str = ""):
|
|
@@ -451,12 +455,12 @@ def progress_range(iterable, description: str = ""):
|
|
|
451
455
|
total = len(iterable) if hasattr(iterable, '__len__') else None
|
|
452
456
|
|
|
453
457
|
if total is not None:
|
|
454
|
-
with
|
|
458
|
+
with CliProgressBar(total, description) as pbar:
|
|
455
459
|
for item in iterable:
|
|
456
460
|
yield item
|
|
457
461
|
pbar.update(1)
|
|
458
462
|
else:
|
|
459
463
|
# Use spinner for unknown length iterables
|
|
460
|
-
with
|
|
464
|
+
with CliSpinnerProgress(description) as spinner:
|
|
461
465
|
for item in iterable:
|
|
462
466
|
yield item
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/console/cli/prompts.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.3
|
|
6
7
|
Generation Date: September 04, 2025
|
|
7
8
|
|
|
8
9
|
Interactive prompts - Placeholder.
|
|
@@ -21,7 +22,7 @@ def multiselect(message, choices):
|
|
|
21
22
|
return choices
|
|
22
23
|
|
|
23
24
|
|
|
24
|
-
class
|
|
25
|
+
class CliPrompts:
|
|
25
26
|
"""Interactive prompts manager for CLI operations."""
|
|
26
27
|
|
|
27
28
|
def __init__(self):
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#exonware/xwsystem/src/exonware/xwsystem/console/cli/tables.py
|
|
1
2
|
"""
|
|
2
3
|
Table Formatting Utilities
|
|
3
4
|
==========================
|
|
@@ -7,21 +8,23 @@ Production-grade table formatting for XWSystem.
|
|
|
7
8
|
Company: eXonware.com
|
|
8
9
|
Author: Eng. Muhammad AlShehri
|
|
9
10
|
Email: connect@exonware.com
|
|
10
|
-
Version: 0.1.0.
|
|
11
|
+
Version: 0.1.0.3
|
|
11
12
|
Generation Date: September 05, 2025
|
|
12
13
|
"""
|
|
13
14
|
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
14
17
|
import sys
|
|
15
|
-
from typing import Any, Optional,
|
|
18
|
+
from typing import Any, Optional, TextIO, Callable
|
|
16
19
|
from dataclasses import dataclass
|
|
17
|
-
# Import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
from .
|
|
20
|
+
# Import general console enums from console level (priority)
|
|
21
|
+
from ..defs import Alignment, BorderStyle, Colors, Style
|
|
22
|
+
# Import CLI-specific color utilities
|
|
23
|
+
from .colors import colorize
|
|
21
24
|
|
|
22
25
|
|
|
23
26
|
@dataclass
|
|
24
|
-
class
|
|
27
|
+
class CliColumn:
|
|
25
28
|
"""
|
|
26
29
|
Table column definition.
|
|
27
30
|
|
|
@@ -51,7 +54,7 @@ class Column:
|
|
|
51
54
|
self.width = min(self.width, self.max_width)
|
|
52
55
|
|
|
53
56
|
|
|
54
|
-
class
|
|
57
|
+
class CliTableFormatter:
|
|
55
58
|
"""
|
|
56
59
|
Production-grade table formatter.
|
|
57
60
|
|
|
@@ -90,7 +93,7 @@ class TableFormatter:
|
|
|
90
93
|
self.padding = padding
|
|
91
94
|
self.border_chars = self.BORDER_CHARS.get(border_style, self.BORDER_CHARS[BorderStyle.ROUNDED])
|
|
92
95
|
|
|
93
|
-
def format_cell(self, value: Any, column:
|
|
96
|
+
def format_cell(self, value: Any, column: CliColumn, width: int) -> str:
|
|
94
97
|
"""Format a cell value according to column specifications."""
|
|
95
98
|
# Apply custom formatter if provided
|
|
96
99
|
if column.formatter:
|
|
@@ -116,7 +119,7 @@ class TableFormatter:
|
|
|
116
119
|
|
|
117
120
|
return text
|
|
118
121
|
|
|
119
|
-
def calculate_widths(self, columns: list[
|
|
122
|
+
def calculate_widths(self, columns: list[CliColumn], data: list[list[Any]]) -> list[int]:
|
|
120
123
|
"""Calculate optimal column widths."""
|
|
121
124
|
widths = []
|
|
122
125
|
|
|
@@ -138,7 +141,7 @@ class TableFormatter:
|
|
|
138
141
|
return widths
|
|
139
142
|
|
|
140
143
|
|
|
141
|
-
class
|
|
144
|
+
class CliTable:
|
|
142
145
|
"""
|
|
143
146
|
Production-grade table with advanced formatting capabilities.
|
|
144
147
|
|
|
@@ -150,39 +153,39 @@ class Table:
|
|
|
150
153
|
"""
|
|
151
154
|
|
|
152
155
|
def __init__(self,
|
|
153
|
-
columns: list[
|
|
154
|
-
formatter:
|
|
156
|
+
columns: list[str | CliColumn] = None,
|
|
157
|
+
formatter: CliTableFormatter = None,
|
|
155
158
|
title: str = ""):
|
|
156
159
|
"""Initialize table."""
|
|
157
160
|
self.title = title
|
|
158
|
-
self.formatter = formatter or
|
|
161
|
+
self.formatter = formatter or CliTableFormatter()
|
|
159
162
|
|
|
160
163
|
# Process columns
|
|
161
164
|
self.columns = []
|
|
162
165
|
if columns:
|
|
163
166
|
for col in columns:
|
|
164
167
|
if isinstance(col, str):
|
|
165
|
-
self.columns.append(
|
|
168
|
+
self.columns.append(CliColumn(header=col))
|
|
166
169
|
else:
|
|
167
170
|
self.columns.append(col)
|
|
168
171
|
|
|
169
172
|
# Data storage
|
|
170
173
|
self.rows = []
|
|
171
174
|
|
|
172
|
-
def add_column(self, column:
|
|
175
|
+
def add_column(self, column: str | CliColumn) -> CliTable:
|
|
173
176
|
"""Add a column to the table."""
|
|
174
177
|
if isinstance(column, str):
|
|
175
|
-
self.columns.append(
|
|
178
|
+
self.columns.append(CliColumn(header=column))
|
|
176
179
|
else:
|
|
177
180
|
self.columns.append(column)
|
|
178
181
|
return self
|
|
179
182
|
|
|
180
|
-
def add_row(self, *values) ->
|
|
183
|
+
def add_row(self, *values) -> CliTable:
|
|
181
184
|
"""Add a row to the table."""
|
|
182
185
|
self.rows.append(list(values))
|
|
183
186
|
return self
|
|
184
187
|
|
|
185
|
-
def add_rows(self, rows: list[list[Any]]) ->
|
|
188
|
+
def add_rows(self, rows: list[list[Any]]) -> CliTable:
|
|
186
189
|
"""Add multiple rows to the table."""
|
|
187
190
|
self.rows.extend(rows)
|
|
188
191
|
return self
|
|
@@ -236,18 +239,18 @@ class Table:
|
|
|
236
239
|
|
|
237
240
|
|
|
238
241
|
# Utility functions
|
|
239
|
-
def create_simple_table(headers: list[str], rows: list[list[Any]]) ->
|
|
242
|
+
def create_simple_table(headers: list[str], rows: list[list[Any]]) -> CliTable:
|
|
240
243
|
"""Create a simple table with basic formatting."""
|
|
241
|
-
table =
|
|
244
|
+
table = CliTable(headers)
|
|
242
245
|
table.add_rows(rows)
|
|
243
246
|
return table
|
|
244
247
|
|
|
245
248
|
|
|
246
249
|
def print_key_value_table(data: dict[str, Any], title: str = ""):
|
|
247
250
|
"""Print a key-value table."""
|
|
248
|
-
table =
|
|
249
|
-
|
|
250
|
-
|
|
251
|
+
table = CliTable([
|
|
252
|
+
CliColumn("Property", header_color=Colors.BLUE, header_style=Style.BOLD),
|
|
253
|
+
CliColumn("Value", header_color=Colors.GREEN, header_style=Style.BOLD)
|
|
251
254
|
], title=title)
|
|
252
255
|
|
|
253
256
|
for key, value in data.items():
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/console/contracts.py
|
|
3
|
+
#exonware/xwsystem/console/contracts.py
|
|
4
|
+
"""
|
|
5
|
+
Company: eXonware.com
|
|
6
|
+
Author: Eng. Muhammad AlShehri
|
|
7
|
+
Email: connect@exonware.com
|
|
8
|
+
Version: 0.1.0.3
|
|
9
|
+
Generation Date: 2025-01-27
|
|
10
|
+
|
|
11
|
+
Console module contracts - interfaces for console functionality.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from typing import Protocol, runtime_checkable, Optional, Any
|
|
15
|
+
from .defs import LogLevel, ConsoleEventType, ConsoleEvent
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@runtime_checkable
|
|
19
|
+
class IEventLogger(Protocol):
|
|
20
|
+
"""Interface for event logging operations."""
|
|
21
|
+
|
|
22
|
+
def log(
|
|
23
|
+
self,
|
|
24
|
+
msg: str,
|
|
25
|
+
source: Optional[str] = None,
|
|
26
|
+
data: Optional[Any] = None,
|
|
27
|
+
color: Optional[str] = None,
|
|
28
|
+
label: Optional[str] = None
|
|
29
|
+
) -> ConsoleEvent:
|
|
30
|
+
"""Log a general message."""
|
|
31
|
+
...
|
|
32
|
+
|
|
33
|
+
def info(
|
|
34
|
+
self,
|
|
35
|
+
msg: str,
|
|
36
|
+
source: Optional[str] = None,
|
|
37
|
+
data: Optional[Any] = None
|
|
38
|
+
) -> ConsoleEvent:
|
|
39
|
+
"""Log an info message."""
|
|
40
|
+
...
|
|
41
|
+
|
|
42
|
+
def warn(
|
|
43
|
+
self,
|
|
44
|
+
msg: str,
|
|
45
|
+
source: Optional[str] = None,
|
|
46
|
+
data: Optional[Any] = None
|
|
47
|
+
) -> ConsoleEvent:
|
|
48
|
+
"""Log a warning message."""
|
|
49
|
+
...
|
|
50
|
+
|
|
51
|
+
def error(
|
|
52
|
+
self,
|
|
53
|
+
msg: str,
|
|
54
|
+
source: Optional[str] = None,
|
|
55
|
+
data: Optional[Any] = None,
|
|
56
|
+
stack: Optional[str] = None
|
|
57
|
+
) -> ConsoleEvent:
|
|
58
|
+
"""Log an error message."""
|
|
59
|
+
...
|
|
60
|
+
|
|
61
|
+
def debug(
|
|
62
|
+
self,
|
|
63
|
+
msg: str,
|
|
64
|
+
source: Optional[str] = None,
|
|
65
|
+
data: Optional[Any] = None
|
|
66
|
+
) -> ConsoleEvent:
|
|
67
|
+
"""Log a debug message."""
|
|
68
|
+
...
|
|
69
|
+
|
|
70
|
+
def get_events(
|
|
71
|
+
self,
|
|
72
|
+
event_type: Optional[ConsoleEventType] = None,
|
|
73
|
+
level: Optional[LogLevel] = None,
|
|
74
|
+
source: Optional[str] = None,
|
|
75
|
+
limit: Optional[int] = None
|
|
76
|
+
) -> list[dict]:
|
|
77
|
+
"""Get logged events as dictionaries."""
|
|
78
|
+
...
|
|
79
|
+
|
|
80
|
+
def clear(self) -> None:
|
|
81
|
+
"""Clear all logged events."""
|
|
82
|
+
...
|
|
83
|
+
|
|
84
|
+
def count(self) -> int:
|
|
85
|
+
"""Get the number of logged events."""
|
|
86
|
+
...
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
@runtime_checkable
|
|
90
|
+
class IConsoleWriter(Protocol):
|
|
91
|
+
"""Interface for console writing operations (user interaction, not logging)."""
|
|
92
|
+
|
|
93
|
+
def write(self, text: str, **kwargs) -> None:
|
|
94
|
+
"""Write text to console."""
|
|
95
|
+
...
|
|
96
|
+
|
|
97
|
+
def write_line(self, text: str = "", **kwargs) -> None:
|
|
98
|
+
"""Write a line to console."""
|
|
99
|
+
...
|
|
100
|
+
|
|
101
|
+
def read(self, prompt: str = "") -> str:
|
|
102
|
+
"""Read input from console."""
|
|
103
|
+
...
|
|
104
|
+
|
|
105
|
+
def clear(self) -> None:
|
|
106
|
+
"""Clear console screen."""
|
|
107
|
+
...
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
__all__ = [
|
|
111
|
+
'IEventLogger',
|
|
112
|
+
'IConsoleWriter',
|
|
113
|
+
]
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/console/defs.py
|
|
3
|
+
#exonware/xwsystem/console/defs.py
|
|
4
|
+
"""
|
|
5
|
+
Company: eXonware.com
|
|
6
|
+
Author: Eng. Muhammad AlShehri
|
|
7
|
+
Email: connect@exonware.com
|
|
8
|
+
Version: 0.1.0.3
|
|
9
|
+
Generation Date: 2025-01-27
|
|
10
|
+
|
|
11
|
+
Type definitions and constants for console module.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from typing import Literal, Any, Optional
|
|
15
|
+
from dataclasses import dataclass
|
|
16
|
+
from enum import Enum
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# ============================================================================
|
|
20
|
+
# TYPE DEFINITIONS FOR STRUCTURED LOGGING
|
|
21
|
+
# ============================================================================
|
|
22
|
+
|
|
23
|
+
LogLevel = Literal['log', 'error', 'warn', 'info', 'debug']
|
|
24
|
+
ConsoleEventType = Literal[
|
|
25
|
+
'log', 'info', 'warn', 'error', 'debug', 'trace',
|
|
26
|
+
'group', 'groupCollapsed', 'groupEnd', 'table', 'success', 'system'
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class ConsoleEvent:
|
|
32
|
+
"""
|
|
33
|
+
Console event structure for structured logging.
|
|
34
|
+
|
|
35
|
+
Attributes:
|
|
36
|
+
id: Unique identifier for the event
|
|
37
|
+
type: Type of console event
|
|
38
|
+
timestamp: Unix timestamp (seconds or milliseconds) or ISO string
|
|
39
|
+
color: CSS color for the event display
|
|
40
|
+
label: Short label for the badge
|
|
41
|
+
msg: Human-readable message
|
|
42
|
+
source: Optional source/operation/module name
|
|
43
|
+
level: Optional explicit log level (overrides type mapping)
|
|
44
|
+
data: Optional additional structured data
|
|
45
|
+
"""
|
|
46
|
+
id: int
|
|
47
|
+
type: ConsoleEventType
|
|
48
|
+
timestamp: float | int | str # Unix timestamp or ISO string
|
|
49
|
+
color: str
|
|
50
|
+
label: str
|
|
51
|
+
msg: str
|
|
52
|
+
source: Optional[str] = None
|
|
53
|
+
level: Optional[LogLevel] = None
|
|
54
|
+
data: Optional[Any] = None
|
|
55
|
+
|
|
56
|
+
def to_dict(self) -> dict:
|
|
57
|
+
"""Convert to dictionary for JSON serialization."""
|
|
58
|
+
result = {
|
|
59
|
+
'id': self.id,
|
|
60
|
+
'type': self.type,
|
|
61
|
+
'timestamp': self.timestamp,
|
|
62
|
+
'color': self.color,
|
|
63
|
+
'label': self.label,
|
|
64
|
+
'msg': self.msg,
|
|
65
|
+
}
|
|
66
|
+
if self.source is not None:
|
|
67
|
+
result['source'] = self.source
|
|
68
|
+
if self.level is not None:
|
|
69
|
+
result['level'] = self.level
|
|
70
|
+
if self.data is not None:
|
|
71
|
+
result['data'] = self.data
|
|
72
|
+
return result
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# ============================================================================
|
|
76
|
+
# GENERAL CONSOLE ENUMS (moved from CLI - general console concepts)
|
|
77
|
+
# ============================================================================
|
|
78
|
+
|
|
79
|
+
class Alignment(Enum):
|
|
80
|
+
"""Text alignment options."""
|
|
81
|
+
LEFT = "left"
|
|
82
|
+
CENTER = "center"
|
|
83
|
+
RIGHT = "right"
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class BorderStyle(Enum):
|
|
87
|
+
"""Table border styles."""
|
|
88
|
+
NONE = "none"
|
|
89
|
+
ASCII = "ascii"
|
|
90
|
+
SIMPLE = "simple"
|
|
91
|
+
ROUNDED = "rounded"
|
|
92
|
+
DOUBLE = "double"
|
|
93
|
+
THICK = "thick"
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class Colors(Enum):
|
|
97
|
+
"""ANSI color codes."""
|
|
98
|
+
# Standard colors
|
|
99
|
+
BLACK = "\033[30m"
|
|
100
|
+
RED = "\033[31m"
|
|
101
|
+
GREEN = "\033[32m"
|
|
102
|
+
YELLOW = "\033[33m"
|
|
103
|
+
BLUE = "\033[34m"
|
|
104
|
+
MAGENTA = "\033[35m"
|
|
105
|
+
CYAN = "\033[36m"
|
|
106
|
+
WHITE = "\033[37m"
|
|
107
|
+
|
|
108
|
+
# Bright colors
|
|
109
|
+
BRIGHT_BLACK = "\033[90m"
|
|
110
|
+
BRIGHT_RED = "\033[91m"
|
|
111
|
+
BRIGHT_GREEN = "\033[92m"
|
|
112
|
+
BRIGHT_YELLOW = "\033[93m"
|
|
113
|
+
BRIGHT_BLUE = "\033[94m"
|
|
114
|
+
BRIGHT_MAGENTA = "\033[95m"
|
|
115
|
+
BRIGHT_CYAN = "\033[96m"
|
|
116
|
+
BRIGHT_WHITE = "\033[97m"
|
|
117
|
+
|
|
118
|
+
# Background colors
|
|
119
|
+
BG_BLACK = "\033[40m"
|
|
120
|
+
BG_RED = "\033[41m"
|
|
121
|
+
BG_GREEN = "\033[42m"
|
|
122
|
+
BG_YELLOW = "\033[43m"
|
|
123
|
+
BG_BLUE = "\033[44m"
|
|
124
|
+
BG_MAGENTA = "\033[45m"
|
|
125
|
+
BG_CYAN = "\033[46m"
|
|
126
|
+
BG_WHITE = "\033[47m"
|
|
127
|
+
|
|
128
|
+
# Reset
|
|
129
|
+
RESET = "\033[0m"
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
class Style(Enum):
|
|
133
|
+
"""ANSI style codes."""
|
|
134
|
+
RESET = "\033[0m"
|
|
135
|
+
BOLD = "\033[1m"
|
|
136
|
+
DIM = "\033[2m"
|
|
137
|
+
ITALIC = "\033[3m"
|
|
138
|
+
UNDERLINE = "\033[4m"
|
|
139
|
+
BLINK = "\033[5m"
|
|
140
|
+
REVERSE = "\033[7m"
|
|
141
|
+
STRIKETHROUGH = "\033[9m"
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
__all__ = [
|
|
145
|
+
# Structured logging types
|
|
146
|
+
'LogLevel',
|
|
147
|
+
'ConsoleEventType',
|
|
148
|
+
'ConsoleEvent',
|
|
149
|
+
# General console enums
|
|
150
|
+
'Alignment',
|
|
151
|
+
'BorderStyle',
|
|
152
|
+
'Colors',
|
|
153
|
+
'Style',
|
|
154
|
+
]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
#exonware/xwsystem/src/exonware/xwsystem/console/errors.py
|
|
3
|
+
#exonware/xwsystem/console/errors.py
|
|
4
|
+
"""
|
|
5
|
+
Company: eXonware.com
|
|
6
|
+
Author: Eng. Muhammad AlShehri
|
|
7
|
+
Email: connect@exonware.com
|
|
8
|
+
Version: 0.1.0.3
|
|
9
|
+
Generation Date: 2025-01-27
|
|
10
|
+
|
|
11
|
+
Console module errors - exception classes for console functionality.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ConsoleError(Exception):
|
|
16
|
+
"""Base exception for console errors."""
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class EventLoggerError(ConsoleError):
|
|
21
|
+
"""Raised when event logger operation fails."""
|
|
22
|
+
pass
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ConsoleWriterError(ConsoleError):
|
|
26
|
+
"""Raised when console writer operation fails."""
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
__all__ = [
|
|
31
|
+
'ConsoleError',
|
|
32
|
+
'EventLoggerError',
|
|
33
|
+
'ConsoleWriterError',
|
|
34
|
+
]
|