exonware-xwsystem 0.0.1.410__py3-none-any.whl → 0.1.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. exonware/__init__.py +1 -1
  2. exonware/conf.py +1 -1
  3. exonware/xwsystem/__init__.py +2 -2
  4. exonware/xwsystem/caching/__init__.py +1 -1
  5. exonware/xwsystem/caching/base.py +2 -2
  6. exonware/xwsystem/caching/bloom_cache.py +2 -2
  7. exonware/xwsystem/caching/cache_manager.py +1 -1
  8. exonware/xwsystem/caching/conditional.py +2 -2
  9. exonware/xwsystem/caching/contracts.py +1 -1
  10. exonware/xwsystem/caching/decorators.py +2 -2
  11. exonware/xwsystem/caching/defs.py +1 -1
  12. exonware/xwsystem/caching/disk_cache.py +1 -1
  13. exonware/xwsystem/caching/distributed.py +1 -1
  14. exonware/xwsystem/caching/errors.py +1 -1
  15. exonware/xwsystem/caching/events.py +2 -2
  16. exonware/xwsystem/caching/eviction_strategies.py +1 -1
  17. exonware/xwsystem/caching/fluent.py +1 -1
  18. exonware/xwsystem/caching/integrity.py +1 -1
  19. exonware/xwsystem/caching/lfu_cache.py +2 -2
  20. exonware/xwsystem/caching/lfu_optimized.py +3 -3
  21. exonware/xwsystem/caching/lru_cache.py +2 -2
  22. exonware/xwsystem/caching/memory_bounded.py +2 -2
  23. exonware/xwsystem/caching/metrics_exporter.py +2 -2
  24. exonware/xwsystem/caching/observable_cache.py +1 -1
  25. exonware/xwsystem/caching/pluggable_cache.py +2 -2
  26. exonware/xwsystem/caching/rate_limiter.py +1 -1
  27. exonware/xwsystem/caching/read_through.py +2 -2
  28. exonware/xwsystem/caching/secure_cache.py +1 -1
  29. exonware/xwsystem/caching/serializable.py +2 -2
  30. exonware/xwsystem/caching/stats.py +1 -1
  31. exonware/xwsystem/caching/tagging.py +2 -2
  32. exonware/xwsystem/caching/ttl_cache.py +1 -1
  33. exonware/xwsystem/caching/two_tier_cache.py +1 -1
  34. exonware/xwsystem/caching/utils.py +1 -1
  35. exonware/xwsystem/caching/validation.py +1 -1
  36. exonware/xwsystem/caching/warming.py +2 -2
  37. exonware/xwsystem/caching/write_behind.py +2 -2
  38. exonware/xwsystem/cli/__init__.py +1 -1
  39. exonware/xwsystem/cli/args.py +1 -1
  40. exonware/xwsystem/cli/base.py +1 -1
  41. exonware/xwsystem/cli/colors.py +1 -1
  42. exonware/xwsystem/cli/console.py +1 -1
  43. exonware/xwsystem/cli/contracts.py +1 -1
  44. exonware/xwsystem/cli/defs.py +1 -1
  45. exonware/xwsystem/cli/errors.py +1 -1
  46. exonware/xwsystem/cli/progress.py +1 -1
  47. exonware/xwsystem/cli/prompts.py +1 -1
  48. exonware/xwsystem/cli/tables.py +1 -1
  49. exonware/xwsystem/config/__init__.py +1 -1
  50. exonware/xwsystem/config/base.py +2 -2
  51. exonware/xwsystem/config/contracts.py +1 -1
  52. exonware/xwsystem/config/defaults.py +1 -1
  53. exonware/xwsystem/config/defs.py +1 -1
  54. exonware/xwsystem/config/errors.py +2 -2
  55. exonware/xwsystem/config/logging.py +1 -1
  56. exonware/xwsystem/config/logging_setup.py +2 -2
  57. exonware/xwsystem/config/performance.py +115 -388
  58. exonware/xwsystem/http_client/__init__.py +1 -1
  59. exonware/xwsystem/http_client/advanced_client.py +2 -2
  60. exonware/xwsystem/http_client/base.py +2 -2
  61. exonware/xwsystem/http_client/client.py +2 -2
  62. exonware/xwsystem/http_client/contracts.py +1 -1
  63. exonware/xwsystem/http_client/defs.py +1 -1
  64. exonware/xwsystem/http_client/errors.py +2 -2
  65. exonware/xwsystem/io/__init__.py +1 -1
  66. exonware/xwsystem/io/archive/__init__.py +1 -1
  67. exonware/xwsystem/io/archive/archive.py +1 -1
  68. exonware/xwsystem/io/archive/archive_files.py +1 -1
  69. exonware/xwsystem/io/archive/archivers.py +2 -2
  70. exonware/xwsystem/io/archive/base.py +6 -6
  71. exonware/xwsystem/io/archive/codec_integration.py +1 -1
  72. exonware/xwsystem/io/archive/compression.py +1 -1
  73. exonware/xwsystem/io/archive/formats/__init__.py +1 -1
  74. exonware/xwsystem/io/archive/formats/brotli_format.py +6 -3
  75. exonware/xwsystem/io/archive/formats/lz4_format.py +6 -3
  76. exonware/xwsystem/io/archive/formats/rar.py +6 -3
  77. exonware/xwsystem/io/archive/formats/sevenzip.py +6 -3
  78. exonware/xwsystem/io/archive/formats/squashfs_format.py +1 -1
  79. exonware/xwsystem/io/archive/formats/tar.py +1 -1
  80. exonware/xwsystem/io/archive/formats/wim_format.py +6 -3
  81. exonware/xwsystem/io/archive/formats/zip.py +1 -1
  82. exonware/xwsystem/io/archive/formats/zpaq_format.py +1 -1
  83. exonware/xwsystem/io/archive/formats/zstandard.py +6 -3
  84. exonware/xwsystem/io/base.py +1 -1
  85. exonware/xwsystem/io/codec/__init__.py +1 -1
  86. exonware/xwsystem/io/codec/base.py +6 -6
  87. exonware/xwsystem/io/codec/contracts.py +1 -1
  88. exonware/xwsystem/io/codec/registry.py +5 -5
  89. exonware/xwsystem/io/common/__init__.py +1 -1
  90. exonware/xwsystem/io/common/base.py +1 -1
  91. exonware/xwsystem/io/common/lock.py +1 -1
  92. exonware/xwsystem/io/common/watcher.py +1 -1
  93. exonware/xwsystem/io/contracts.py +1 -1
  94. exonware/xwsystem/io/data_operations.py +746 -0
  95. exonware/xwsystem/io/defs.py +1 -1
  96. exonware/xwsystem/io/errors.py +1 -1
  97. exonware/xwsystem/io/facade.py +2 -2
  98. exonware/xwsystem/io/file/__init__.py +1 -1
  99. exonware/xwsystem/io/file/base.py +1 -1
  100. exonware/xwsystem/io/file/conversion.py +1 -1
  101. exonware/xwsystem/io/file/file.py +8 -6
  102. exonware/xwsystem/io/file/paged_source.py +8 -1
  103. exonware/xwsystem/io/file/paging/__init__.py +1 -1
  104. exonware/xwsystem/io/file/paging/byte_paging.py +1 -1
  105. exonware/xwsystem/io/file/paging/line_paging.py +1 -1
  106. exonware/xwsystem/io/file/paging/record_paging.py +1 -1
  107. exonware/xwsystem/io/file/paging/registry.py +4 -4
  108. exonware/xwsystem/io/file/source.py +20 -9
  109. exonware/xwsystem/io/filesystem/__init__.py +1 -1
  110. exonware/xwsystem/io/filesystem/base.py +1 -1
  111. exonware/xwsystem/io/filesystem/local.py +9 -1
  112. exonware/xwsystem/io/folder/__init__.py +1 -1
  113. exonware/xwsystem/io/folder/base.py +1 -1
  114. exonware/xwsystem/io/folder/folder.py +2 -2
  115. exonware/xwsystem/io/serialization/__init__.py +1 -1
  116. exonware/xwsystem/io/serialization/auto_serializer.py +52 -39
  117. exonware/xwsystem/io/serialization/base.py +165 -1
  118. exonware/xwsystem/io/serialization/contracts.py +88 -1
  119. exonware/xwsystem/io/serialization/defs.py +1 -1
  120. exonware/xwsystem/io/serialization/errors.py +1 -1
  121. exonware/xwsystem/io/serialization/flyweight.py +10 -10
  122. exonware/xwsystem/io/serialization/format_detector.py +8 -5
  123. exonware/xwsystem/io/serialization/formats/__init__.py +1 -1
  124. exonware/xwsystem/io/serialization/formats/binary/bson.py +1 -1
  125. exonware/xwsystem/io/serialization/formats/binary/cbor.py +1 -1
  126. exonware/xwsystem/io/serialization/formats/binary/marshal.py +1 -1
  127. exonware/xwsystem/io/serialization/formats/binary/msgpack.py +1 -1
  128. exonware/xwsystem/io/serialization/formats/binary/pickle.py +1 -1
  129. exonware/xwsystem/io/serialization/formats/binary/plistlib.py +1 -1
  130. exonware/xwsystem/io/serialization/formats/database/dbm.py +53 -1
  131. exonware/xwsystem/io/serialization/formats/database/shelve.py +48 -1
  132. exonware/xwsystem/io/serialization/formats/database/sqlite3.py +85 -1
  133. exonware/xwsystem/io/serialization/formats/text/append_only_log.py +201 -0
  134. exonware/xwsystem/io/serialization/formats/text/configparser.py +1 -1
  135. exonware/xwsystem/io/serialization/formats/text/csv.py +1 -1
  136. exonware/xwsystem/io/serialization/formats/text/formdata.py +1 -1
  137. exonware/xwsystem/io/serialization/formats/text/json.py +43 -20
  138. exonware/xwsystem/io/serialization/formats/text/json5.py +7 -5
  139. exonware/xwsystem/io/serialization/formats/text/jsonlines.py +316 -22
  140. exonware/xwsystem/io/serialization/formats/text/multipart.py +1 -1
  141. exonware/xwsystem/io/serialization/formats/text/toml.py +19 -3
  142. exonware/xwsystem/io/serialization/formats/text/xml.py +8 -1
  143. exonware/xwsystem/io/serialization/formats/text/yaml.py +52 -2
  144. exonware/xwsystem/io/serialization/parsers/__init__.py +15 -0
  145. exonware/xwsystem/io/serialization/parsers/base.py +59 -0
  146. exonware/xwsystem/io/serialization/parsers/hybrid_parser.py +61 -0
  147. exonware/xwsystem/io/serialization/parsers/msgspec_parser.py +45 -0
  148. exonware/xwsystem/io/serialization/parsers/orjson_direct_parser.py +53 -0
  149. exonware/xwsystem/io/serialization/parsers/orjson_parser.py +59 -0
  150. exonware/xwsystem/io/serialization/parsers/pysimdjson_parser.py +51 -0
  151. exonware/xwsystem/io/serialization/parsers/rapidjson_parser.py +50 -0
  152. exonware/xwsystem/io/serialization/parsers/registry.py +90 -0
  153. exonware/xwsystem/io/serialization/parsers/standard.py +43 -0
  154. exonware/xwsystem/io/serialization/parsers/ujson_parser.py +50 -0
  155. exonware/xwsystem/io/serialization/registry.py +1 -1
  156. exonware/xwsystem/io/serialization/serializer.py +175 -3
  157. exonware/xwsystem/io/serialization/utils/__init__.py +1 -1
  158. exonware/xwsystem/io/serialization/utils/path_ops.py +1 -1
  159. exonware/xwsystem/io/stream/__init__.py +1 -1
  160. exonware/xwsystem/io/stream/async_operations.py +1 -1
  161. exonware/xwsystem/io/stream/base.py +1 -1
  162. exonware/xwsystem/io/stream/codec_io.py +1 -1
  163. exonware/xwsystem/ipc/async_fabric.py +1 -2
  164. exonware/xwsystem/ipc/base.py +2 -2
  165. exonware/xwsystem/ipc/contracts.py +2 -2
  166. exonware/xwsystem/ipc/defs.py +1 -1
  167. exonware/xwsystem/ipc/errors.py +2 -2
  168. exonware/xwsystem/ipc/pipes.py +2 -2
  169. exonware/xwsystem/ipc/shared_memory.py +2 -2
  170. exonware/xwsystem/monitoring/base.py +2 -2
  171. exonware/xwsystem/monitoring/contracts.py +1 -1
  172. exonware/xwsystem/monitoring/defs.py +1 -1
  173. exonware/xwsystem/monitoring/error_recovery.py +2 -2
  174. exonware/xwsystem/monitoring/errors.py +2 -2
  175. exonware/xwsystem/monitoring/memory_monitor.py +1 -1
  176. exonware/xwsystem/monitoring/performance_manager_generic.py +2 -2
  177. exonware/xwsystem/monitoring/performance_validator.py +1 -1
  178. exonware/xwsystem/monitoring/system_monitor.py +2 -2
  179. exonware/xwsystem/monitoring/tracing.py +2 -2
  180. exonware/xwsystem/monitoring/tracker.py +1 -1
  181. exonware/xwsystem/operations/__init__.py +1 -1
  182. exonware/xwsystem/operations/base.py +1 -1
  183. exonware/xwsystem/operations/defs.py +1 -1
  184. exonware/xwsystem/operations/diff.py +1 -1
  185. exonware/xwsystem/operations/merge.py +1 -1
  186. exonware/xwsystem/operations/patch.py +1 -1
  187. exonware/xwsystem/patterns/base.py +2 -2
  188. exonware/xwsystem/patterns/context_manager.py +2 -2
  189. exonware/xwsystem/patterns/contracts.py +9 -9
  190. exonware/xwsystem/patterns/defs.py +1 -1
  191. exonware/xwsystem/patterns/dynamic_facade.py +8 -8
  192. exonware/xwsystem/patterns/errors.py +5 -5
  193. exonware/xwsystem/patterns/handler_factory.py +6 -6
  194. exonware/xwsystem/patterns/object_pool.py +7 -7
  195. exonware/xwsystem/patterns/registry.py +3 -3
  196. exonware/xwsystem/plugins/__init__.py +1 -1
  197. exonware/xwsystem/plugins/base.py +5 -5
  198. exonware/xwsystem/plugins/contracts.py +5 -5
  199. exonware/xwsystem/plugins/defs.py +1 -1
  200. exonware/xwsystem/plugins/errors.py +4 -4
  201. exonware/xwsystem/runtime/__init__.py +1 -1
  202. exonware/xwsystem/runtime/base.py +6 -6
  203. exonware/xwsystem/runtime/contracts.py +6 -6
  204. exonware/xwsystem/runtime/defs.py +1 -1
  205. exonware/xwsystem/runtime/env.py +2 -2
  206. exonware/xwsystem/runtime/errors.py +1 -1
  207. exonware/xwsystem/runtime/reflection.py +8 -8
  208. exonware/xwsystem/security/auth.py +1 -1
  209. exonware/xwsystem/security/base.py +2 -2
  210. exonware/xwsystem/security/contracts.py +1 -1
  211. exonware/xwsystem/security/crypto.py +2 -2
  212. exonware/xwsystem/security/defs.py +1 -1
  213. exonware/xwsystem/security/errors.py +2 -2
  214. exonware/xwsystem/security/hazmat.py +2 -2
  215. exonware/xwsystem/shared/__init__.py +1 -1
  216. exonware/xwsystem/shared/base.py +1 -1
  217. exonware/xwsystem/shared/contracts.py +1 -1
  218. exonware/xwsystem/shared/defs.py +1 -1
  219. exonware/xwsystem/shared/errors.py +1 -1
  220. exonware/xwsystem/structures/__init__.py +1 -1
  221. exonware/xwsystem/structures/base.py +2 -2
  222. exonware/xwsystem/structures/contracts.py +1 -1
  223. exonware/xwsystem/structures/defs.py +1 -1
  224. exonware/xwsystem/structures/errors.py +2 -2
  225. exonware/xwsystem/threading/async_primitives.py +2 -2
  226. exonware/xwsystem/threading/base.py +2 -2
  227. exonware/xwsystem/threading/contracts.py +1 -1
  228. exonware/xwsystem/threading/defs.py +1 -1
  229. exonware/xwsystem/threading/errors.py +2 -2
  230. exonware/xwsystem/threading/safe_factory.py +6 -6
  231. exonware/xwsystem/utils/base.py +2 -2
  232. exonware/xwsystem/utils/contracts.py +1 -1
  233. exonware/xwsystem/utils/dt/__init__.py +1 -1
  234. exonware/xwsystem/utils/dt/base.py +2 -2
  235. exonware/xwsystem/utils/dt/contracts.py +1 -1
  236. exonware/xwsystem/utils/dt/defs.py +1 -1
  237. exonware/xwsystem/utils/dt/errors.py +2 -2
  238. exonware/xwsystem/utils/dt/formatting.py +1 -1
  239. exonware/xwsystem/utils/dt/humanize.py +2 -2
  240. exonware/xwsystem/utils/dt/parsing.py +1 -1
  241. exonware/xwsystem/utils/dt/timezone_utils.py +1 -1
  242. exonware/xwsystem/utils/errors.py +2 -2
  243. exonware/xwsystem/utils/utils_contracts.py +1 -1
  244. exonware/xwsystem/validation/__init__.py +1 -1
  245. exonware/xwsystem/validation/base.py +15 -15
  246. exonware/xwsystem/validation/contracts.py +1 -1
  247. exonware/xwsystem/validation/data_validator.py +10 -0
  248. exonware/xwsystem/validation/declarative.py +9 -9
  249. exonware/xwsystem/validation/defs.py +1 -1
  250. exonware/xwsystem/validation/errors.py +2 -2
  251. exonware/xwsystem/validation/fluent_validator.py +4 -4
  252. exonware/xwsystem/version.py +4 -4
  253. {exonware_xwsystem-0.0.1.410.dist-info → exonware_xwsystem-0.1.0.1.dist-info}/METADATA +3 -3
  254. exonware_xwsystem-0.1.0.1.dist-info/RECORD +284 -0
  255. exonware/xwsystem/caching/USAGE_GUIDE.md +0 -779
  256. exonware/xwsystem/utils/test_runner.py +0 -526
  257. exonware_xwsystem-0.0.1.410.dist-info/RECORD +0 -273
  258. {exonware_xwsystem-0.0.1.410.dist-info → exonware_xwsystem-0.1.0.1.dist-info}/WHEEL +0 -0
  259. {exonware_xwsystem-0.0.1.410.dist-info → exonware_xwsystem-0.1.0.1.dist-info}/licenses/LICENSE +0 -0
@@ -3,7 +3,7 @@
3
3
  Company: eXonware.com
4
4
  Author: Eng. Muhammad AlShehri
5
5
  Email: connect@exonware.com
6
- Version: 0.0.1.410
6
+ Version: 0.1.0.1
7
7
  Generation Date: September 04, 2025
8
8
 
9
9
  Configuration protocol interfaces for XWSystem.
@@ -2,7 +2,7 @@
2
2
  Company: eXonware.com
3
3
  Author: Eng. Muhammad AlShehri
4
4
  Email: connect@exonware.com
5
- Version: 0.0.1.410
5
+ Version: 0.1.0.1
6
6
  Generation Date: September 04, 2025
7
7
 
8
8
  Default configuration constants for XSystem framework.
@@ -4,7 +4,7 @@
4
4
  Company: eXonware.com
5
5
  Author: Eng. Muhammad AlShehri
6
6
  Email: connect@exonware.com
7
- Version: 0.0.1.410
7
+ Version: 0.1.0.1
8
8
  Generation Date: 07-Sep-2025
9
9
 
10
10
  Config types and enums for XWSystem.
@@ -1,9 +1,9 @@
1
- #exonware/xsystem/config/errors.py
1
+ #exonware/xwsystem/config/errors.py
2
2
  """
3
3
  Company: eXonware.com
4
4
  Author: Eng. Muhammad AlShehri
5
5
  Email: connect@exonware.com
6
- Version: 0.0.1.410
6
+ Version: 0.1.0.1
7
7
  Generation Date: September 04, 2025
8
8
 
9
9
  Configuration module errors - exception classes for configuration functionality.
@@ -2,7 +2,7 @@
2
2
  Company: eXonware.com
3
3
  Author: Eng. Muhammad AlShehri
4
4
  Email: connect@exonware.com
5
- Version: 0.0.1.410
5
+ Version: 0.1.0.1
6
6
  Generation Date: September 04, 2025
7
7
 
8
8
  Logging configuration for XSystem.
@@ -2,7 +2,7 @@
2
2
  Company: eXonware.com
3
3
  Author: Eng. Muhammad AlShehri
4
4
  Email: connect@exonware.com
5
- Version: 0.0.1.410
5
+ Version: 0.1.0.1
6
6
  Generation Date: September 05, 2025
7
7
 
8
8
  Logging configuration setup for XSystem.
@@ -19,7 +19,7 @@ from .defaults import LOGGING_ENABLED, LOGGING_LEVEL
19
19
 
20
20
 
21
21
  def setup_logging(
22
- log_file="logs/xsystem.log",
22
+ log_file="logs/xwsystem.log",
23
23
  level=logging.INFO,
24
24
  max_bytes=10 * 1024 * 1024,
25
25
  backup_count=5,
@@ -1,406 +1,133 @@
1
- """
2
- Company: eXonware.com
3
- Author: Eng. Muhammad AlShehri
4
- Email: connect@exonware.com
5
- Version: 0.0.1.410
6
- Generation Date: September 04, 2025
7
-
8
- Performance Configuration Management
1
+ """Performance optimization configuration for xwsystem I/O operations.
9
2
 
10
- Centralized configuration for XSystem performance limits, timeouts, and optimization settings.
3
+ This module provides configuration options to enable/disable performance
4
+ optimizations (parallel index building, append-only logs) with automatic
5
+ fallback to original implementations.
11
6
  """
12
7
 
13
- from typing import Any, Final, Optional
14
- from dataclasses import dataclass, field
15
- import os
16
- from pathlib import Path
17
-
18
- from ..config.logging_setup import get_logger
19
-
20
- logger = get_logger(__name__)
21
-
22
-
23
- @dataclass
24
- class SerializationLimits:
25
- """Configuration limits for serialization operations."""
26
-
27
- # Data size limits
28
- max_size_mb: float = 50.0 # Maximum data size in MB
29
- max_depth: int = 100 # Maximum nesting depth
30
- max_string_length: int = 1_000_000 # Maximum string length
31
- max_list_items: int = 100_000 # Maximum list/array items
32
- max_dict_keys: int = 10_000 # Maximum dictionary keys
33
-
34
- # File operation limits
35
- max_file_size_mb: float = 100.0 # Maximum file size for operations
36
- max_path_length: int = 4096 # Maximum file path length
37
-
38
- # Performance settings
39
- use_atomic_writes: bool = True # Use atomic file operations by default
40
- validate_input: bool = True # Enable input validation by default
41
- validate_paths: bool = True # Enable path validation by default
42
-
43
- # Memory management
44
- max_memory_mb: float = 200.0 # Maximum memory usage for operations
45
- enable_compression: bool = False # Enable compression by default
46
-
47
-
48
- @dataclass
49
- class NetworkLimits:
50
- """Configuration limits for network operations."""
51
-
52
- # Timeout settings (seconds)
53
- connect_timeout: float = 30.0 # Connection timeout
54
- read_timeout: float = 60.0 # Read timeout
55
- total_timeout: float = 300.0 # Total request timeout
56
-
57
- # Retry settings
58
- max_retries: int = 3 # Maximum retry attempts
59
- retry_backoff_factor: float = 2.0 # Exponential backoff factor
60
- retry_max_delay: float = 60.0 # Maximum retry delay
61
-
62
- # Size limits
63
- max_response_size_mb: float = 100.0 # Maximum response size
64
- max_request_size_mb: float = 50.0 # Maximum request size
65
-
66
- # Connection pool settings
67
- max_connections: int = 100 # Maximum connections in pool
68
- max_keepalive_connections: int = 20 # Maximum keep-alive connections
69
-
8
+ from __future__ import annotations
70
9
 
71
- @dataclass
72
- class SecurityLimits:
73
- """Configuration limits for security operations."""
74
-
75
- # Path validation
76
- allow_absolute_paths: bool = False # Allow absolute paths
77
- allow_symlinks: bool = False # Allow symbolic links
78
- blocked_extensions: tuple = field(default_factory=lambda: (
79
- '.exe', '.bat', '.cmd', '.com', '.scr', '.dll', '.sys'
80
- ))
81
-
82
- # Input validation
83
- max_input_complexity: int = 1000 # Maximum input complexity score
84
- enable_xss_protection: bool = True # Enable XSS protection
85
- enable_injection_protection: bool = True # Enable injection protection
86
-
87
- # Cryptography settings
88
- min_key_size: int = 2048 # Minimum key size for RSA
89
- hash_iterations: int = 100_000 # PBKDF2 iterations
90
- salt_length: int = 32 # Salt length in bytes
10
+ from dataclasses import dataclass
11
+ import os
91
12
 
92
13
 
93
14
  @dataclass
94
- class PerformanceLimits:
95
- """Master configuration for all XSystem performance limits."""
96
-
97
- # Component-specific limits
98
- serialization: SerializationLimits = field(default_factory=SerializationLimits)
99
- network: NetworkLimits = field(default_factory=NetworkLimits)
100
- security: SecurityLimits = field(default_factory=SecurityLimits)
101
-
102
- # Global settings
103
- enable_monitoring: bool = True # Enable performance monitoring
104
- enable_metrics: bool = True # Enable metrics collection
105
- log_performance_warnings: bool = True # Log performance warnings
106
-
107
- # Memory management
108
- max_total_memory_mb: float = 500.0 # Maximum total memory usage
109
- gc_threshold_mb: float = 100.0 # Garbage collection threshold
110
-
111
- # Concurrency settings
112
- max_threads: int = 50 # Maximum thread pool size
113
- max_async_tasks: int = 100 # Maximum async tasks
114
-
115
-
116
- # Default configuration instance
117
- DEFAULT_LIMITS: Final[PerformanceLimits] = PerformanceLimits()
118
-
119
-
120
15
  class PerformanceConfig:
121
- """
122
- Centralized performance configuration manager.
123
-
124
- Manages performance limits, timeouts, and optimization settings for XSystem.
125
- Supports environment variable overrides and runtime configuration updates.
126
- """
127
-
128
- def __init__(self, config_file: Optional[str] = None) -> None:
129
- """
130
- Initialize performance configuration.
131
-
132
- Args:
133
- config_file: Optional path to configuration file
134
- """
135
- self._limits = PerformanceLimits()
136
- self._config_file = config_file
137
- self._mode = "balanced" # Default mode
138
- self._load_from_environment()
139
-
140
- if config_file:
141
- self._load_from_file(config_file)
142
-
143
- logger.info("Performance configuration initialized")
144
-
145
- def _load_from_environment(self) -> None:
146
- """Load configuration overrides from environment variables."""
147
-
148
- # Serialization limits
149
- if val := os.getenv('XSYSTEM_MAX_SIZE_MB'):
150
- self._limits.serialization.max_size_mb = float(val)
151
-
152
- if val := os.getenv('XSYSTEM_MAX_DEPTH'):
153
- self._limits.serialization.max_depth = int(val)
154
-
155
- if val := os.getenv('XSYSTEM_MAX_FILE_SIZE_MB'):
156
- self._limits.serialization.max_file_size_mb = float(val)
157
-
158
- # Network limits
159
- if val := os.getenv('XSYSTEM_CONNECT_TIMEOUT'):
160
- self._limits.network.connect_timeout = float(val)
161
-
162
- if val := os.getenv('XSYSTEM_READ_TIMEOUT'):
163
- self._limits.network.read_timeout = float(val)
164
-
165
- if val := os.getenv('XSYSTEM_MAX_RETRIES'):
166
- self._limits.network.max_retries = int(val)
167
-
168
- # Security limits
169
- if val := os.getenv('XSYSTEM_ALLOW_ABSOLUTE_PATHS'):
170
- self._limits.security.allow_absolute_paths = val.lower() in ('true', '1', 'yes')
171
-
172
- if val := os.getenv('XSYSTEM_MIN_KEY_SIZE'):
173
- self._limits.security.min_key_size = int(val)
174
-
175
- # Global settings
176
- if val := os.getenv('XSYSTEM_MAX_MEMORY_MB'):
177
- self._limits.max_total_memory_mb = float(val)
178
-
179
- if val := os.getenv('XSYSTEM_MAX_THREADS'):
180
- self._limits.max_threads = int(val)
181
-
182
- def _load_from_file(self, config_file: str) -> None:
183
- """
184
- Load configuration from file.
185
-
186
- Args:
187
- config_file: Path to configuration file (JSON/YAML/TOML)
188
- """
189
- try:
190
- config_path = Path(config_file)
191
- if not config_path.exists():
192
- logger.warning(f"Configuration file not found: {config_file}")
193
- return
194
-
195
- # Import here to avoid circular imports
196
- from ..io.serialization import JsonSerializer, YamlSerializer, TomlSerializer
197
-
198
- # Determine format by extension
199
- if config_path.suffix.lower() in ('.json',):
200
- serializer = JsonSerializer(validate_paths=False)
201
- elif config_path.suffix.lower() in ('.yaml', '.yml'):
202
- serializer = YamlSerializer(validate_paths=False)
203
- elif config_path.suffix.lower() in ('.toml',):
204
- serializer = TomlSerializer(validate_paths=False)
205
- else:
206
- logger.warning(f"Unsupported config file format: {config_path.suffix}")
207
- return
208
-
209
- config_data = serializer.load_file(config_file)
210
- self._apply_config_data(config_data)
211
-
212
- logger.info(f"Loaded configuration from: {config_file}")
213
-
214
- except Exception as e:
215
- logger.error(f"Failed to load configuration file {config_file}: {e}")
216
-
217
- def _apply_config_data(self, config_data: dict[str, Any]) -> None:
218
- """Apply configuration data to limits."""
219
-
220
- if 'serialization' in config_data:
221
- ser_config = config_data['serialization']
222
- for key, value in ser_config.items():
223
- if hasattr(self._limits.serialization, key):
224
- setattr(self._limits.serialization, key, value)
225
-
226
- if 'network' in config_data:
227
- net_config = config_data['network']
228
- for key, value in net_config.items():
229
- if hasattr(self._limits.network, key):
230
- setattr(self._limits.network, key, value)
231
-
232
- if 'security' in config_data:
233
- sec_config = config_data['security']
234
- for key, value in sec_config.items():
235
- if hasattr(self._limits.security, key):
236
- setattr(self._limits.security, key, value)
237
-
238
- # Global settings
239
- for key in ['enable_monitoring', 'enable_metrics', 'max_total_memory_mb', 'max_threads']:
240
- if key in config_data:
241
- setattr(self._limits, key, config_data[key])
242
-
243
- @property
244
- def limits(self) -> PerformanceLimits:
245
- """Get current performance limits."""
246
- return self._limits
247
-
248
- def get_serialization_config(self) -> dict[str, Any]:
249
- """Get serialization configuration dictionary."""
250
- return {
251
- 'max_size_mb': self._limits.serialization.max_size_mb,
252
- 'max_depth': self._limits.serialization.max_depth,
253
- 'max_file_size_mb': self._limits.serialization.max_file_size_mb,
254
- 'use_atomic_writes': self._limits.serialization.use_atomic_writes,
255
- 'validate_input': self._limits.serialization.validate_input,
256
- 'validate_paths': self._limits.serialization.validate_paths,
257
- }
258
-
259
- def get_network_config(self) -> dict[str, Any]:
260
- """Get network configuration dictionary."""
261
- return {
262
- 'connect_timeout': self._limits.network.connect_timeout,
263
- 'read_timeout': self._limits.network.read_timeout,
264
- 'total_timeout': self._limits.network.total_timeout,
265
- 'max_retries': self._limits.network.max_retries,
266
- 'max_response_size_mb': self._limits.network.max_response_size_mb,
267
- }
268
-
269
- def get_security_config(self) -> dict[str, Any]:
270
- """Get security configuration dictionary."""
271
- return {
272
- 'allow_absolute_paths': self._limits.security.allow_absolute_paths,
273
- 'allow_symlinks': self._limits.security.allow_symlinks,
274
- 'blocked_extensions': self._limits.security.blocked_extensions,
275
- 'min_key_size': self._limits.security.min_key_size,
276
- }
277
-
278
- def update_limits(self, **kwargs) -> None:
279
- """
280
- Update performance limits at runtime.
281
-
282
- Args:
283
- **kwargs: Limit values to update
284
- """
285
- for key, value in kwargs.items():
286
- if '.' in key:
287
- # Handle nested attributes like 'serialization.max_size_mb'
288
- parts = key.split('.')
289
- obj = self._limits
290
- for part in parts[:-1]:
291
- obj = getattr(obj, part)
292
- setattr(obj, parts[-1], value)
293
- else:
294
- # Handle top-level attributes
295
- if hasattr(self._limits, key):
296
- setattr(self._limits, key, value)
297
-
298
- logger.info(f"Updated performance limits: {kwargs}")
299
-
300
- def set_mode(self, mode: str) -> None:
301
- """Set performance mode."""
302
- self._mode = mode
303
- logger.info(f"Performance mode set to: {mode}")
304
-
305
- def get_mode(self) -> str:
306
- """Get current performance mode."""
307
- return self._mode
308
-
309
- def optimize(self) -> None:
310
- """Optimize performance settings based on current mode."""
311
- if self._mode == "fast":
312
- # Optimize for speed
313
- self._limits.serialization.max_size_mb = 100.0
314
- self._limits.serialization.max_depth = 200
315
- elif self._mode == "memory_optimized":
316
- # Optimize for memory
317
- self._limits.serialization.max_size_mb = 25.0
318
- self._limits.serialization.max_depth = 50
319
- else: # balanced
320
- # Balanced settings
321
- self._limits.serialization.max_size_mb = 50.0
322
- self._limits.serialization.max_depth = 100
323
-
324
- logger.info(f"Performance optimized for mode: {self._mode}")
325
-
326
- def export_config(self, format: str = 'json') -> dict[str, Any]:
327
- """
328
- Export current configuration.
329
-
330
- Args:
331
- format: Export format ('json', 'yaml', 'toml')
332
-
333
- Returns:
334
- Configuration dictionary
335
- """
336
- return {
337
- 'serialization': {
338
- 'max_size_mb': self._limits.serialization.max_size_mb,
339
- 'max_depth': self._limits.serialization.max_depth,
340
- 'max_file_size_mb': self._limits.serialization.max_file_size_mb,
341
- 'use_atomic_writes': self._limits.serialization.use_atomic_writes,
342
- 'validate_input': self._limits.serialization.validate_input,
343
- 'validate_paths': self._limits.serialization.validate_paths,
344
- },
345
- 'network': {
346
- 'connect_timeout': self._limits.network.connect_timeout,
347
- 'read_timeout': self._limits.network.read_timeout,
348
- 'total_timeout': self._limits.network.total_timeout,
349
- 'max_retries': self._limits.network.max_retries,
350
- 'max_response_size_mb': self._limits.network.max_response_size_mb,
351
- },
352
- 'security': {
353
- 'allow_absolute_paths': self._limits.security.allow_absolute_paths,
354
- 'allow_symlinks': self._limits.security.allow_symlinks,
355
- 'min_key_size': self._limits.security.min_key_size,
356
- },
357
- 'global': {
358
- 'enable_monitoring': self._limits.enable_monitoring,
359
- 'enable_metrics': self._limits.enable_metrics,
360
- 'max_total_memory_mb': self._limits.max_total_memory_mb,
361
- 'max_threads': self._limits.max_threads,
362
- }
363
- }
364
-
365
-
366
- # Global configuration instance
367
- _global_config: Optional[PerformanceConfig] = None
16
+ """Configuration for performance optimizations."""
17
+
18
+ # Parallel index building
19
+ enable_parallel_index: bool = True # Auto-enabled for large files
20
+ parallel_index_workers: int | None = None # None = auto (CPU count)
21
+ parallel_index_chunk_size_mb: int = 100 # 100MB chunks
22
+ parallel_index_threshold_mb: int = 200 # Use parallel for files >200MB
23
+
24
+ # Append-only log for atomic updates
25
+ enable_append_log: bool = True # Auto-enabled for large files
26
+ append_log_threshold_mb: int = 100 # Use append-only log for files >100MB
27
+ append_log_compaction_threshold_mb: int = 100 # Compact when log > 100MB
28
+
29
+ # Fallback behavior
30
+ fallback_on_error: bool = True # Fall back to original if optimization fails
31
+
32
+ @classmethod
33
+ def from_env(cls) -> PerformanceConfig:
34
+ """Create config from environment variables."""
35
+ return cls(
36
+ enable_parallel_index=os.getenv("XWSYSTEM_PARALLEL_INDEX", "true").lower() == "true",
37
+ parallel_index_workers=int(os.getenv("XWSYSTEM_PARALLEL_WORKERS", "0")) or None,
38
+ parallel_index_chunk_size_mb=int(os.getenv("XWSYSTEM_CHUNK_SIZE_MB", "100")),
39
+ parallel_index_threshold_mb=int(os.getenv("XWSYSTEM_PARALLEL_THRESHOLD_MB", "200")),
40
+ enable_append_log=os.getenv("XWSYSTEM_APPEND_LOG", "true").lower() == "true",
41
+ append_log_threshold_mb=int(os.getenv("XWSYSTEM_APPEND_LOG_THRESHOLD_MB", "100")),
42
+ append_log_compaction_threshold_mb=int(os.getenv("XWSYSTEM_LOG_THRESHOLD_MB", "100")),
43
+ fallback_on_error=os.getenv("XWSYSTEM_FALLBACK", "true").lower() == "true",
44
+ )
45
+
46
+ @classmethod
47
+ def conservative(cls) -> PerformanceConfig:
48
+ """Conservative config (disable optimizations, use originals)."""
49
+ return cls(
50
+ enable_parallel_index=False,
51
+ enable_append_log=False,
52
+ fallback_on_error=True,
53
+ )
54
+
55
+ @classmethod
56
+ def aggressive(cls) -> PerformanceConfig:
57
+ """Aggressive config (enable all optimizations, no fallback)."""
58
+ return cls(
59
+ enable_parallel_index=True,
60
+ enable_append_log=True,
61
+ fallback_on_error=False,
62
+ )
63
+
64
+
65
+ # Global config instance
66
+ _config: PerformanceConfig | None = None
368
67
 
369
68
 
370
69
  def get_performance_config() -> PerformanceConfig:
371
- """Get the global performance configuration instance."""
372
- global _global_config
373
- if _global_config is None:
374
- _global_config = PerformanceConfig()
375
- return _global_config
376
-
70
+ """Get global performance config."""
71
+ global _config
72
+ if _config is None:
73
+ _config = PerformanceConfig.from_env()
74
+ return _config
377
75
 
378
- def configure_performance(config_file: Optional[str] = None, **kwargs) -> None:
379
- """
380
- Configure global performance settings.
381
-
382
- Args:
383
- config_file: Optional configuration file path
384
- **kwargs: Performance limit overrides
385
- """
386
- global _global_config
387
- _global_config = PerformanceConfig(config_file)
388
-
389
- if kwargs:
390
- _global_config.update_limits(**kwargs)
391
76
 
77
+ def set_performance_config(config: PerformanceConfig) -> None:
78
+ """Set global performance config."""
79
+ global _config
80
+ _config = config
392
81
 
393
- # Convenience functions for getting specific limits
394
- def get_serialization_limits() -> SerializationLimits:
395
- """Get current serialization limits."""
396
- return get_performance_config().limits.serialization
397
82
 
83
+ # Placeholder classes for backward compatibility with existing config system
84
+ # These are not used by the new optimization system but are required by __init__.py
85
+ @dataclass
86
+ class PerformanceLimits:
87
+ """Placeholder for backward compatibility."""
88
+ pass
398
89
 
399
- def get_network_limits() -> NetworkLimits:
400
- """Get current network limits."""
401
- return get_performance_config().limits.network
90
+ @dataclass
91
+ class SerializationLimits:
92
+ """Placeholder for backward compatibility."""
93
+ pass
402
94
 
95
+ @dataclass
96
+ class NetworkLimits:
97
+ """Placeholder for backward compatibility."""
98
+ pass
403
99
 
404
- def get_security_limits() -> SecurityLimits:
405
- """Get current security limits."""
406
- return get_performance_config().limits.security
100
+ @dataclass
101
+ class SecurityLimits:
102
+ """Placeholder for backward compatibility."""
103
+ pass
104
+
105
+ def configure_performance(**kwargs):
106
+ """Placeholder for backward compatibility."""
107
+ pass
108
+
109
+ def get_serialization_limits():
110
+ """Placeholder for backward compatibility."""
111
+ return SerializationLimits()
112
+
113
+ def get_network_limits():
114
+ """Placeholder for backward compatibility."""
115
+ return NetworkLimits()
116
+
117
+ def get_security_limits():
118
+ """Placeholder for backward compatibility."""
119
+ return SecurityLimits()
120
+
121
+ __all__ = [
122
+ "PerformanceConfig",
123
+ "PerformanceLimits",
124
+ "SerializationLimits",
125
+ "NetworkLimits",
126
+ "SecurityLimits",
127
+ "get_performance_config",
128
+ "set_performance_config",
129
+ "configure_performance",
130
+ "get_serialization_limits",
131
+ "get_network_limits",
132
+ "get_security_limits",
133
+ ]
@@ -2,7 +2,7 @@
2
2
  Company: eXonware.com
3
3
  Author: Eng. Muhammad AlShehri
4
4
  Email: connect@exonware.com
5
- Version: 0.0.1.410
5
+ Version: 0.1.0.1
6
6
  Generation Date: September 04, 2025
7
7
 
8
8
  XSystem HTTP Package
@@ -2,7 +2,7 @@
2
2
  Company: eXonware.com
3
3
  Author: Eng. Muhammad AlShehri
4
4
  Email: connect@exonware.com
5
- Version: 0.0.1.410
5
+ Version: 0.1.0.1
6
6
  Generation Date: September 04, 2025
7
7
 
8
8
  Advanced HTTP client with HTTP/2, streaming, pluggable transports, and modern features.
@@ -28,7 +28,7 @@ from ..config.logging_setup import get_logger
28
28
  from ..monitoring.error_recovery import retry_with_backoff
29
29
  from .client import HttpError, RetryConfig
30
30
 
31
- logger = get_logger("xsystem.http_client.advanced_client")
31
+ logger = get_logger("xwsystem.http_client.advanced_client")
32
32
 
33
33
 
34
34
 
@@ -1,9 +1,9 @@
1
- #exonware/xsystem/http/base.py
1
+ #exonware/xwsystem/http/base.py
2
2
  """
3
3
  Company: eXonware.com
4
4
  Author: Eng. Muhammad AlShehri
5
5
  Email: connect@exonware.com
6
- Version: 0.0.1.410
6
+ Version: 0.1.0.1
7
7
  Generation Date: September 04, 2025
8
8
 
9
9
  HTTP module base classes - abstract classes for HTTP client functionality.
@@ -2,7 +2,7 @@
2
2
  Company: eXonware.com
3
3
  Author: Eng. Muhammad AlShehri
4
4
  Email: connect@exonware.com
5
- Version: 0.0.1.410
5
+ Version: 0.1.0.1
6
6
  Generation Date: September 04, 2025
7
7
 
8
8
  HTTP client with retry mechanisms, connection pooling, and error handling.
@@ -24,7 +24,7 @@ from ..config.logging_setup import get_logger
24
24
  from ..monitoring.error_recovery import retry_with_backoff
25
25
  from .errors import HttpError
26
26
 
27
- logger = get_logger("xsystem.http_client.client")
27
+ logger = get_logger("xwsystem.http_client.client")
28
28
 
29
29
 
30
30
  @dataclass
@@ -2,7 +2,7 @@
2
2
  Company: eXonware.com
3
3
  Author: Eng. Muhammad AlShehri
4
4
  Email: connect@exonware.com
5
- Version: 0.0.1.410
5
+ Version: 0.1.0.1
6
6
  Generation Date: September 04, 2025
7
7
 
8
8
  HTTP module contracts - interfaces and enums for HTTP client functionality.
@@ -4,7 +4,7 @@
4
4
  Company: eXonware.com
5
5
  Author: Eng. Muhammad AlShehri
6
6
  Email: connect@exonware.com
7
- Version: 0.0.1.410
7
+ Version: 0.1.0.1
8
8
  Generation Date: 07-Sep-2025
9
9
 
10
10
  HTTP types and enums for XWSystem.