py10x-universe 0.1.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.
- core_10x/__init__.py +42 -0
- core_10x/backbone/__init__.py +0 -0
- core_10x/backbone/backbone_store.py +59 -0
- core_10x/backbone/backbone_traitable.py +30 -0
- core_10x/backbone/backbone_user.py +66 -0
- core_10x/backbone/bound_data_domain.py +49 -0
- core_10x/backbone/namespace.py +101 -0
- core_10x/backbone/vault.py +38 -0
- core_10x/code_samples/__init__.py +0 -0
- core_10x/code_samples/_package_manifest.py +3 -0
- core_10x/code_samples/directories.py +181 -0
- core_10x/code_samples/person.py +76 -0
- core_10x/concrete_traits.py +356 -0
- core_10x/conftest.py +12 -0
- core_10x/curve.py +321 -0
- core_10x/data_domain.py +48 -0
- core_10x/data_domain_binder.py +45 -0
- core_10x/directory.py +250 -0
- core_10x/entity.py +8 -0
- core_10x/entity_filter.py +5 -0
- core_10x/environment_variables.py +147 -0
- core_10x/exec_control.py +84 -0
- core_10x/experimental/__init__.py +0 -0
- core_10x/experimental/data_protocol_ex.py +34 -0
- core_10x/global_cache.py +121 -0
- core_10x/manual_tests/__init__.py +0 -0
- core_10x/manual_tests/calendar_test.py +35 -0
- core_10x/manual_tests/ctor_update_bug.py +58 -0
- core_10x/manual_tests/debug_graph_on.py +17 -0
- core_10x/manual_tests/debug_graphoff_inside_graph_on.py +28 -0
- core_10x/manual_tests/enum_bits_test.py +17 -0
- core_10x/manual_tests/env_vars_trivial_test.py +12 -0
- core_10x/manual_tests/existing_traitable.py +33 -0
- core_10x/manual_tests/k10x_test1.py +13 -0
- core_10x/manual_tests/named_constant_test.py +121 -0
- core_10x/manual_tests/nucleus_trivial_test.py +42 -0
- core_10x/manual_tests/polars_test.py +14 -0
- core_10x/manual_tests/py_class_test.py +4 -0
- core_10x/manual_tests/rc_test.py +42 -0
- core_10x/manual_tests/rdate_test.py +12 -0
- core_10x/manual_tests/reference_serialization_bug.py +19 -0
- core_10x/manual_tests/resource_trivial_test.py +10 -0
- core_10x/manual_tests/store_uri_test.py +6 -0
- core_10x/manual_tests/trait_definition_test.py +19 -0
- core_10x/manual_tests/trait_filter_test.py +15 -0
- core_10x/manual_tests/trait_flag_modification_test.py +42 -0
- core_10x/manual_tests/trait_modification_bug.py +26 -0
- core_10x/manual_tests/traitable_as_of_test.py +82 -0
- core_10x/manual_tests/traitable_heir_test.py +39 -0
- core_10x/manual_tests/traitable_history_test.py +41 -0
- core_10x/manual_tests/traitable_serialization_test.py +54 -0
- core_10x/manual_tests/traitable_trivial_test.py +71 -0
- core_10x/manual_tests/trivial_graph_test.py +16 -0
- core_10x/manual_tests/ts_class_association_test.py +64 -0
- core_10x/manual_tests/ts_trivial_test.py +35 -0
- core_10x/named_constant.py +425 -0
- core_10x/nucleus.py +81 -0
- core_10x/package_manifest.py +85 -0
- core_10x/package_refactoring.py +153 -0
- core_10x/py_class.py +431 -0
- core_10x/rc.py +155 -0
- core_10x/rdate.py +339 -0
- core_10x/resource.py +189 -0
- core_10x/roman_number.py +67 -0
- core_10x/testlib/__init__.py +0 -0
- core_10x/testlib/test_store.py +240 -0
- core_10x/testlib/traitable_history_tests.py +787 -0
- core_10x/testlib/ts_tests.py +280 -0
- core_10x/trait.py +377 -0
- core_10x/trait_definition.py +176 -0
- core_10x/trait_filter.py +205 -0
- core_10x/trait_method_error.py +36 -0
- core_10x/traitable.py +1082 -0
- core_10x/traitable_cli.py +153 -0
- core_10x/traitable_heir.py +33 -0
- core_10x/traitable_id.py +31 -0
- core_10x/ts_store.py +172 -0
- core_10x/ts_store_type.py +26 -0
- core_10x/ts_union.py +147 -0
- core_10x/ui_hint.py +153 -0
- core_10x/unit_tests/test_concrete_traits.py +156 -0
- core_10x/unit_tests/test_converters.py +51 -0
- core_10x/unit_tests/test_curve.py +157 -0
- core_10x/unit_tests/test_directory.py +54 -0
- core_10x/unit_tests/test_documentation.py +172 -0
- core_10x/unit_tests/test_environment_variables.py +15 -0
- core_10x/unit_tests/test_filters.py +239 -0
- core_10x/unit_tests/test_graph.py +348 -0
- core_10x/unit_tests/test_named_constant.py +98 -0
- core_10x/unit_tests/test_rc.py +11 -0
- core_10x/unit_tests/test_rdate.py +484 -0
- core_10x/unit_tests/test_trait_method_error.py +80 -0
- core_10x/unit_tests/test_trait_modification.py +19 -0
- core_10x/unit_tests/test_traitable.py +959 -0
- core_10x/unit_tests/test_traitable_history.py +1 -0
- core_10x/unit_tests/test_ts_store.py +1 -0
- core_10x/unit_tests/test_ts_union.py +369 -0
- core_10x/unit_tests/test_ui_nodes.py +81 -0
- core_10x/unit_tests/test_xxcalendar.py +471 -0
- core_10x/vault/__init__.py +0 -0
- core_10x/vault/sec_keys.py +133 -0
- core_10x/vault/security_keys_old.py +168 -0
- core_10x/vault/vault.py +56 -0
- core_10x/vault/vault_traitable.py +56 -0
- core_10x/vault/vault_user.py +70 -0
- core_10x/xdate_time.py +136 -0
- core_10x/xnone.py +71 -0
- core_10x/xxcalendar.py +228 -0
- infra_10x/__init__.py +0 -0
- infra_10x/manual_tests/__init__.py +0 -0
- infra_10x/manual_tests/test_misc.py +16 -0
- infra_10x/manual_tests/test_prepare_filter_and_pipeline.py +25 -0
- infra_10x/mongodb_admin.py +111 -0
- infra_10x/mongodb_store.py +346 -0
- infra_10x/mongodb_utils.py +129 -0
- infra_10x/unit_tests/conftest.py +13 -0
- infra_10x/unit_tests/test_mongo_db.py +36 -0
- infra_10x/unit_tests/test_mongo_history.py +1 -0
- py10x_universe-0.1.3.dist-info/METADATA +406 -0
- py10x_universe-0.1.3.dist-info/RECORD +214 -0
- py10x_universe-0.1.3.dist-info/WHEEL +4 -0
- py10x_universe-0.1.3.dist-info/licenses/LICENSE +21 -0
- ui_10x/__init__.py +0 -0
- ui_10x/apps/__init__.py +0 -0
- ui_10x/apps/collection_editor_app.py +100 -0
- ui_10x/choice.py +212 -0
- ui_10x/collection_editor.py +135 -0
- ui_10x/concrete_trait_widgets.py +220 -0
- ui_10x/conftest.py +8 -0
- ui_10x/entity_stocker.py +173 -0
- ui_10x/examples/__init__.py +0 -0
- ui_10x/examples/_guess_word_data.py +14076 -0
- ui_10x/examples/collection_editor.py +17 -0
- ui_10x/examples/date_selector.py +14 -0
- ui_10x/examples/entity_stocker.py +18 -0
- ui_10x/examples/guess_word.py +392 -0
- ui_10x/examples/message_box.py +20 -0
- ui_10x/examples/multi_choice.py +17 -0
- ui_10x/examples/py_data_browser.py +66 -0
- ui_10x/examples/radiobox.py +29 -0
- ui_10x/examples/single_choice.py +31 -0
- ui_10x/examples/style_sheet.py +47 -0
- ui_10x/examples/trivial_entity_editor.py +18 -0
- ui_10x/platform.py +20 -0
- ui_10x/platform_interface.py +517 -0
- ui_10x/py_data_browser.py +249 -0
- ui_10x/qt6/__init__.py +0 -0
- ui_10x/qt6/conftest.py +8 -0
- ui_10x/qt6/manual_tests/__init__.py +0 -0
- ui_10x/qt6/manual_tests/basic_test.py +35 -0
- ui_10x/qt6/platform_implementation.py +275 -0
- ui_10x/qt6/utils.py +665 -0
- ui_10x/rio/__init__.py +0 -0
- ui_10x/rio/apps/examples/examples/__init__.py +22 -0
- ui_10x/rio/apps/examples/examples/components/__init__.py +3 -0
- ui_10x/rio/apps/examples/examples/components/collection_editor.py +15 -0
- ui_10x/rio/apps/examples/examples/pages/collection_editor.py +21 -0
- ui_10x/rio/apps/examples/examples/pages/login_page.py +88 -0
- ui_10x/rio/apps/examples/examples/pages/style_sheet.py +21 -0
- ui_10x/rio/apps/examples/rio.toml +14 -0
- ui_10x/rio/component_builder.py +497 -0
- ui_10x/rio/components/__init__.py +9 -0
- ui_10x/rio/components/group_box.py +31 -0
- ui_10x/rio/components/labeled_checkbox.py +18 -0
- ui_10x/rio/components/line_edit.py +37 -0
- ui_10x/rio/components/radio_button.py +32 -0
- ui_10x/rio/components/separator.py +24 -0
- ui_10x/rio/components/splitter.py +121 -0
- ui_10x/rio/components/tree_view.py +75 -0
- ui_10x/rio/conftest.py +35 -0
- ui_10x/rio/internals/__init__.py +0 -0
- ui_10x/rio/internals/app.py +192 -0
- ui_10x/rio/manual_tests/__init__.py +0 -0
- ui_10x/rio/manual_tests/basic_test.py +24 -0
- ui_10x/rio/manual_tests/splitter.py +27 -0
- ui_10x/rio/platform_implementation.py +91 -0
- ui_10x/rio/style_sheet.py +53 -0
- ui_10x/rio/unit_tests/test_collection_editor.py +68 -0
- ui_10x/rio/unit_tests/test_internals.py +630 -0
- ui_10x/rio/unit_tests/test_style_sheet.py +37 -0
- ui_10x/rio/widgets/__init__.py +46 -0
- ui_10x/rio/widgets/application.py +109 -0
- ui_10x/rio/widgets/button.py +48 -0
- ui_10x/rio/widgets/button_group.py +60 -0
- ui_10x/rio/widgets/calendar.py +23 -0
- ui_10x/rio/widgets/checkbox.py +24 -0
- ui_10x/rio/widgets/dialog.py +137 -0
- ui_10x/rio/widgets/group_box.py +27 -0
- ui_10x/rio/widgets/layout.py +34 -0
- ui_10x/rio/widgets/line_edit.py +37 -0
- ui_10x/rio/widgets/list.py +105 -0
- ui_10x/rio/widgets/message_box.py +70 -0
- ui_10x/rio/widgets/scroll_area.py +31 -0
- ui_10x/rio/widgets/spacer.py +6 -0
- ui_10x/rio/widgets/splitter.py +45 -0
- ui_10x/rio/widgets/text_edit.py +28 -0
- ui_10x/rio/widgets/tree.py +89 -0
- ui_10x/rio/widgets/unit_tests/test_button.py +101 -0
- ui_10x/rio/widgets/unit_tests/test_button_group.py +33 -0
- ui_10x/rio/widgets/unit_tests/test_calendar.py +114 -0
- ui_10x/rio/widgets/unit_tests/test_checkbox.py +109 -0
- ui_10x/rio/widgets/unit_tests/test_group_box.py +158 -0
- ui_10x/rio/widgets/unit_tests/test_label.py +43 -0
- ui_10x/rio/widgets/unit_tests/test_line_edit.py +140 -0
- ui_10x/rio/widgets/unit_tests/test_list.py +146 -0
- ui_10x/table_header_view.py +305 -0
- ui_10x/table_view.py +174 -0
- ui_10x/trait_editor.py +189 -0
- ui_10x/trait_widget.py +131 -0
- ui_10x/traitable_editor.py +200 -0
- ui_10x/traitable_view.py +131 -0
- ui_10x/unit_tests/conftest.py +8 -0
- ui_10x/unit_tests/test_platform.py +9 -0
- ui_10x/utils.py +661 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: py10x-universe
|
|
3
|
+
Version: 0.1.3
|
|
4
|
+
Summary: 10x Universe Core Packages
|
|
5
|
+
Project-URL: Homepage, https://github.com/10X-LLC/py10x
|
|
6
|
+
Project-URL: Repository, https://github.com/10X-LLC/py10x
|
|
7
|
+
Project-URL: Issues, https://github.com/10X-LLC/py10x/issues
|
|
8
|
+
Project-URL: Documentation, https://github.com/10X-LLC/py10x#readme
|
|
9
|
+
Author-email: "10X Software, LLC" <founders@10x-software.org>
|
|
10
|
+
Maintainer-email: Sasha Davidovich & Ilya Pevzner <py10x@10x-software.com>
|
|
11
|
+
License: MIT
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Classifier: Topic :: Software Development :: User Interfaces
|
|
22
|
+
Requires-Python: <3.13,>=3.11
|
|
23
|
+
Requires-Dist: cryptography<45.1.0,>=45.0.7
|
|
24
|
+
Requires-Dist: hatch-build-scripts>=1.0.0
|
|
25
|
+
Requires-Dist: hatchling>=1.27.0
|
|
26
|
+
Requires-Dist: importlib-resources<6.6.0,>=6.5.2
|
|
27
|
+
Requires-Dist: keyring>=25.6.0
|
|
28
|
+
Requires-Dist: numpy<2.3.0,>=2.2.2
|
|
29
|
+
Requires-Dist: py10x-core~=0.1
|
|
30
|
+
Requires-Dist: py10x-infra~=0.1
|
|
31
|
+
Requires-Dist: pymongo>=4.7.3
|
|
32
|
+
Requires-Dist: python-dateutil<2.10.0,>=2.9.0
|
|
33
|
+
Requires-Dist: requests>=2.32.5
|
|
34
|
+
Requires-Dist: scipy>=1.15.3
|
|
35
|
+
Requires-Dist: typing-extensions>=4.15.0
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: alt-pytest-asyncio==0.7.2; extra == 'dev'
|
|
38
|
+
Requires-Dist: asyncio-atexit<2.0,>=1.0.1; extra == 'dev'
|
|
39
|
+
Requires-Dist: hatch-build-scripts>=1.0.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: hatchling>=1.27.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: playwright<1.56,>=1.44; extra == 'dev'
|
|
42
|
+
Requires-Dist: pytest-cov<8.0,>=6.0; extra == 'dev'
|
|
43
|
+
Requires-Dist: pytest<9.0,>=8.3.4; extra == 'dev'
|
|
44
|
+
Requires-Dist: ruff<0.14,>=0.13; extra == 'dev'
|
|
45
|
+
Requires-Dist: uv>=0.9; extra == 'dev'
|
|
46
|
+
Provides-Extra: qt
|
|
47
|
+
Requires-Dist: pyqt6-qt6==6.8.2; extra == 'qt'
|
|
48
|
+
Requires-Dist: pyqt6-sip==13.10.0; extra == 'qt'
|
|
49
|
+
Requires-Dist: pyqt6==6.8.1; extra == 'qt'
|
|
50
|
+
Provides-Extra: rio
|
|
51
|
+
Requires-Dist: aiofiles>=24.1; extra == 'rio'
|
|
52
|
+
Requires-Dist: matplotlib~=3.10.6; extra == 'rio'
|
|
53
|
+
Requires-Dist: rio-ui==0.12; extra == 'rio'
|
|
54
|
+
Requires-Dist: webview-proc>=0.1.0rc6; extra == 'rio'
|
|
55
|
+
Description-Content-Type: text/markdown
|
|
56
|
+
|
|
57
|
+
# py10x
|
|
58
|
+
|
|
59
|
+
**10x Universe Ecosystem Core**
|
|
60
|
+
|
|
61
|
+
The core package of the 10x Universe software ecosystem, designed to make 10x engineers even more productive. The structure mirrors the real world: from particles (basic data types) to atoms (object models) and molecules (fundamental programming paradigms), extending to stars and planets (subject domains).
|
|
62
|
+
|
|
63
|
+
## Overview
|
|
64
|
+
|
|
65
|
+
py10x is organized into three main packages:
|
|
66
|
+
|
|
67
|
+
- **core_10x**: Core data modeling with traits, traitables, and serialization
|
|
68
|
+
- **ui_10x**: Cross-platform UI components focused on traitable editing and management
|
|
69
|
+
- **infra_10x**: Infrastructure components including MongoDB storage integration
|
|
70
|
+
|
|
71
|
+
**Note**: This is a pre-release version. Future releases will include enhanced tests, documentation and examples; trait validation; and automatic resource management via enterprise backbone.
|
|
72
|
+
|
|
73
|
+
## Installation
|
|
74
|
+
|
|
75
|
+
For detailed installation instructions including all prerequisites and platform-specific setup, see [INSTALLATION.md](INSTALLATION.md).
|
|
76
|
+
|
|
77
|
+
### Quick Prerequisites
|
|
78
|
+
|
|
79
|
+
- Python 3.12 (recommended), 3.10+ supported
|
|
80
|
+
- [UV](https://docs.astral.sh/uv/) - Python installer and package manager
|
|
81
|
+
- MongoDB (for running tests and examples)
|
|
82
|
+
- Local passwordless MongoDB instance required for running tests and examples
|
|
83
|
+
|
|
84
|
+
## Component Licensing
|
|
85
|
+
This package (`py10x`) relies on and automatically installs `py10x_core` and `py10x_infra`, also supplied by **10x Software, LLC**.
|
|
86
|
+
|
|
87
|
+
While these packages are provided free of charge, they have different legal terms:
|
|
88
|
+
- **py10x (Framework):** Licensed under the [MIT License](https://10x-software.org/py10x/LICENSE).
|
|
89
|
+
- **py10x-core (Core dependencies):** Proprietary; governed by the [10x Proprietary License](https://10x-llc.com/py_10x_core/LICENSE).
|
|
90
|
+
- **py10x-infra (Infrastructure dependencies):** Proprietary; governed by the [10x Proprietary License](https://10x-llc.com/py_10x_infra/LICENSE).
|
|
91
|
+
|
|
92
|
+
By installing `py10x`, you agree to the terms of the proprietary licenses for the core and infrastructure components.
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
### Install with UV (Recommended)
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Clone the repository
|
|
99
|
+
git clone https://github.com/10X-LLC/py10x.git
|
|
100
|
+
cd py10x
|
|
101
|
+
|
|
102
|
+
# Install everything (recommended for development)
|
|
103
|
+
uv sync --all-extras
|
|
104
|
+
|
|
105
|
+
# Or install specific combinations
|
|
106
|
+
uv sync --extra dev --extra rio # Development + Rio UI
|
|
107
|
+
uv sync --extra dev --extra qt # Development + Qt6 UI
|
|
108
|
+
uv sync --extra rio # Rio UI only
|
|
109
|
+
uv sync --extra qt # Qt6 UI only
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Install with pip
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
git clone https://github.com/10X-LLC/py10x.git
|
|
116
|
+
cd py10x
|
|
117
|
+
pip install -e .
|
|
118
|
+
|
|
119
|
+
# With optional dependencies
|
|
120
|
+
pip install -e ".[rio]" # Rio UI backend
|
|
121
|
+
pip install -e ".[qt]" # Qt6 UI backend
|
|
122
|
+
pip install -e ".[dev]" # Development tools
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Quick Start
|
|
126
|
+
|
|
127
|
+
For a comprehensive introduction to py10x, see our [Getting Started Guide](GETTING_STARTED.md).
|
|
128
|
+
|
|
129
|
+
### Core Data Modeling with Object Identification
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
from core_10x.traitable import Traitable, T, RT, RC, RC_TRUE
|
|
133
|
+
from core_10x.exec_control import CACHE_ONLY
|
|
134
|
+
from datetime import date, datetime
|
|
135
|
+
|
|
136
|
+
# Endogenous traitable example
|
|
137
|
+
class Person(Traitable):
|
|
138
|
+
# ID traits - entities with same ID share values globally
|
|
139
|
+
first_name: str = T(T.ID)
|
|
140
|
+
last_name: str = T(T.ID)
|
|
141
|
+
|
|
142
|
+
# Regular traits (T() is required for persistence)
|
|
143
|
+
dob: date = T()
|
|
144
|
+
weight_lbs: float = T()
|
|
145
|
+
|
|
146
|
+
# Runtime traits (not stored, computed on-demand)
|
|
147
|
+
age: int = RT() # RT() is optional for runtime traits
|
|
148
|
+
full_name: str # RT() omitted - still a runtime trait
|
|
149
|
+
|
|
150
|
+
def age_get(self) -> int:
|
|
151
|
+
"""Getter method - computes age from date of birth."""
|
|
152
|
+
if not self.dob:
|
|
153
|
+
return 0
|
|
154
|
+
today = date.today()
|
|
155
|
+
return today.year - self.dob.year
|
|
156
|
+
|
|
157
|
+
def full_name_get(self) -> str:
|
|
158
|
+
"""Getter method - combines first and last name."""
|
|
159
|
+
return f"{self.first_name} {self.last_name}"
|
|
160
|
+
|
|
161
|
+
def age_set(self, trait, value: int) -> RC:
|
|
162
|
+
"""Setter method - validates age and updates date of birth."""
|
|
163
|
+
if value < 0:
|
|
164
|
+
return RC(False, "Age cannot be negative")
|
|
165
|
+
if value > 150:
|
|
166
|
+
return RC(False, "Age cannot exceed 150")
|
|
167
|
+
|
|
168
|
+
# Calculate year of birth from age
|
|
169
|
+
today = date.today()
|
|
170
|
+
birth_year = today.year - value
|
|
171
|
+
dob = self.dob
|
|
172
|
+
self.dob = date(birth_year, dob.month, dob.day)
|
|
173
|
+
return RC_TRUE
|
|
174
|
+
|
|
175
|
+
# Note: Verification methods (e.g., age_verify) are not currently
|
|
176
|
+
# called automatically by the framework. Use setters with validation instead.
|
|
177
|
+
|
|
178
|
+
# Exogeneous traitable example
|
|
179
|
+
class DataCaptureEvent(Traitable):
|
|
180
|
+
capture_time: datetime = T()
|
|
181
|
+
raw_data: str = T()
|
|
182
|
+
processed_data: str # Runtime trait - RT() omitted (still not stored)
|
|
183
|
+
|
|
184
|
+
def processed_data_get(self) -> str:
|
|
185
|
+
"""Runtime computation - not stored in database."""
|
|
186
|
+
return self.raw_data.upper().strip()
|
|
187
|
+
|
|
188
|
+
# Use CACHE_ONLY mode - no backing database required
|
|
189
|
+
with CACHE_ONLY():
|
|
190
|
+
# Endogenous traitables (with ID traits) share trait values globally
|
|
191
|
+
person1 = Person(first_name="Alice", last_name="Smith")
|
|
192
|
+
person1.dob = date(1990, 5, 15) # Set a non-ID trait
|
|
193
|
+
print( '---',person1.dob)
|
|
194
|
+
|
|
195
|
+
# Using setter method for age validation
|
|
196
|
+
person1.age = 25 # Set age, updates date of birth
|
|
197
|
+
print(f"Age: {person1.age}") # 25
|
|
198
|
+
print(f"Date of birth: {person1.dob}") # Calculated from age
|
|
199
|
+
|
|
200
|
+
# Test validation
|
|
201
|
+
try:
|
|
202
|
+
person1.age = -5 # This will fail validation
|
|
203
|
+
except Exception as e:
|
|
204
|
+
print(f"Validation error: {e}")
|
|
205
|
+
|
|
206
|
+
person2 = Person(first_name="Alice", last_name="Smith") # Same ID traits
|
|
207
|
+
# person2 automatically has the same dob value as person1
|
|
208
|
+
assert person2.dob == date(2001, 5, 15) # Shared trait values
|
|
209
|
+
assert person1 == person2 # Equal due to same ID traits
|
|
210
|
+
# Note: person1 is person2 would be False - they're different objects
|
|
211
|
+
|
|
212
|
+
# Exogenous traitables (no ID traits) get auto-generated UUID
|
|
213
|
+
class DataCaptureEvent(Traitable):
|
|
214
|
+
data: str
|
|
215
|
+
timestamp: float
|
|
216
|
+
|
|
217
|
+
# Endogenous vs Exogenous demonstration
|
|
218
|
+
person = Person(first_name="Alice", last_name="Smith") # Endogenous
|
|
219
|
+
event = DataCaptureEvent(data="sensor_reading", timestamp=1234567890.0) # Exogenous
|
|
220
|
+
|
|
221
|
+
print(f"Person ID: {person.id()}") # Based on ID traits (first_name, last_name)
|
|
222
|
+
print(f"Event ID: {event.id()}") # Auto-generated UUID
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Dependency Graph and Execution Control
|
|
226
|
+
|
|
227
|
+
```python
|
|
228
|
+
from core_10x.exec_control import GRAPH_ON, GRAPH_OFF, INTERACTIVE
|
|
229
|
+
from core_10x.traitable import Traitable, RT
|
|
230
|
+
|
|
231
|
+
class Calculator(Traitable):
|
|
232
|
+
x: int = RT()
|
|
233
|
+
y: int = RT()
|
|
234
|
+
sum: int = RT() # Computed via sum_get()
|
|
235
|
+
product: int = RT() # Computed via product_get()
|
|
236
|
+
|
|
237
|
+
def sum_get(self) -> int:
|
|
238
|
+
return self.x + self.y
|
|
239
|
+
|
|
240
|
+
def product_get(self) -> int:
|
|
241
|
+
return self.x * self.y
|
|
242
|
+
|
|
243
|
+
# Enable dependency graph for automatic computation
|
|
244
|
+
with GRAPH_ON():
|
|
245
|
+
calc = Calculator(x=5, y=3)
|
|
246
|
+
# sum and product computed automatically when accessed
|
|
247
|
+
print(calc.sum) # 8
|
|
248
|
+
print(calc.product) # 15
|
|
249
|
+
|
|
250
|
+
calc.x = 10 # Automatically recomputes dependent traits
|
|
251
|
+
print(calc.sum) # 13
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### MongoDB Integration
|
|
255
|
+
|
|
256
|
+
```python
|
|
257
|
+
from infra_10x.mongodb_store import MongoStore
|
|
258
|
+
from core_10x.traitable import Traitable
|
|
259
|
+
from core_10x.code_samples.person import Person
|
|
260
|
+
from datetime import date
|
|
261
|
+
|
|
262
|
+
# Connect to MongoDB
|
|
263
|
+
traitable_store = MongoStore.instance(
|
|
264
|
+
hostname="localhost",
|
|
265
|
+
dbname="myapp",
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
# Use traitable store context for persistence
|
|
269
|
+
with traitable_store:
|
|
270
|
+
person = Person(first_name="Alice", last_name="Smith")
|
|
271
|
+
person.dob = date(1990, 5, 15)
|
|
272
|
+
person.save() # Persists to traitable store backed by Mongo
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Core Features
|
|
276
|
+
|
|
277
|
+
### Object Identification System
|
|
278
|
+
|
|
279
|
+
- **Endogenous Traitables**: Traitables with ID computed from ID traits, traits shared by ID
|
|
280
|
+
- **Exogenous Traitables**: Traitables without ID traits get auto-generated UUIDs, traits shared by ID
|
|
281
|
+
- **Anonymous Traitables**: Traitables without ID - cannot be shared or persisted alone, can be embedded in other traitables
|
|
282
|
+
- **ID Method**: `traitable.id()` returns ID based on ID traits (endogenous) or auto-generated UUID (exogenous)
|
|
283
|
+
- **Global Cache**: Automatic sharing of trait values for traitables with the same ID
|
|
284
|
+
|
|
285
|
+
### Traitable Framework
|
|
286
|
+
|
|
287
|
+
The `Traitable` base class provides:
|
|
288
|
+
|
|
289
|
+
- **Trait-based attributes**: Define typed attributes with validation
|
|
290
|
+
- **ID Traits**: Mark traits as identifiers for global sharing
|
|
291
|
+
- **Regular Traits**: Used for data storage and searching
|
|
292
|
+
- **Runtime Traits**: Not stored, computed on-demand (RT() is optional)
|
|
293
|
+
- **Caching**: Built-in caching system for trait values and entity state
|
|
294
|
+
- **Serialization**: Automatic serialization/deserialization
|
|
295
|
+
- **Versioning**: Automatic revision tracking
|
|
296
|
+
- **Validation**: Type checking and integrity validation
|
|
297
|
+
|
|
298
|
+
### Dependency Graph System
|
|
299
|
+
|
|
300
|
+
- **Automatic Computation**: Traits computed automatically when accessed
|
|
301
|
+
- **Dependency Tracking**: Changes to traits trigger dependent trait updates
|
|
302
|
+
- **Execution Control**: Fine-grained control over computation modes
|
|
303
|
+
- **Performance**: Expensive computations cached and reused
|
|
304
|
+
|
|
305
|
+
### Seamless UI Framework
|
|
306
|
+
|
|
307
|
+
Cross-platform UI with automatic framework selection:
|
|
308
|
+
|
|
309
|
+
- **Auto-Detection**: Framework chosen based on installed packages
|
|
310
|
+
- **Environment Variables**: Override framework selection
|
|
311
|
+
- **Unified API**: Same code works with Rio or Qt6 backends
|
|
312
|
+
- **Traitable Integration**: Built-in entity editors and viewers
|
|
313
|
+
|
|
314
|
+
### Infrastructure
|
|
315
|
+
|
|
316
|
+
- **Storage Integration**: MongoDB store with revision tracking and flexible data persistence
|
|
317
|
+
- **Resource Management**: Manual resource management using context managers (enterprise resource management planned for future release)
|
|
318
|
+
|
|
319
|
+
## Development
|
|
320
|
+
|
|
321
|
+
### Running Tests
|
|
322
|
+
|
|
323
|
+
**Note**: The `infra_10x/unit_tests/` suite requires a local MongoDB instance running on the default port (27017).
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
# Run all unit tests (with coverage by default)
|
|
327
|
+
pytest
|
|
328
|
+
|
|
329
|
+
# Run specific test suites
|
|
330
|
+
pytest core_10x/unit_tests/
|
|
331
|
+
pytest ui_10x/unit_tests/
|
|
332
|
+
pytest infra_10x/unit_tests/ # Requires MongoDB
|
|
333
|
+
|
|
334
|
+
# Manual tests are debugging scripts (run directly)
|
|
335
|
+
python core_10x/manual_tests/trivial_graph_test.py
|
|
336
|
+
python ui_10x/rio/manual_tests/basic_test.py
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Code Style
|
|
340
|
+
|
|
341
|
+
The project uses `ruff` for linting and formatting:
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# Check style
|
|
345
|
+
ruff check .
|
|
346
|
+
|
|
347
|
+
# Fix issues
|
|
348
|
+
ruff check --fix .
|
|
349
|
+
|
|
350
|
+
# Format code
|
|
351
|
+
ruff format .
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Building
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# Build wheel
|
|
358
|
+
python -m build
|
|
359
|
+
|
|
360
|
+
# Build with UV
|
|
361
|
+
uv build
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## Architecture
|
|
365
|
+
|
|
366
|
+
### Core Components
|
|
367
|
+
|
|
368
|
+
- **Nucleus**: Base serialization and type system
|
|
369
|
+
- **Traitable**: Entity modeling with traits
|
|
370
|
+
- **Trait System**: Type-safe attribute definitions
|
|
371
|
+
- **Storage Layer**: Pluggable storage backends
|
|
372
|
+
|
|
373
|
+
### UI Architecture
|
|
374
|
+
|
|
375
|
+
- **Platform Interface**: Abstract UI component interface
|
|
376
|
+
- **Component Builder**: Widget construction and layout
|
|
377
|
+
- **Backend Implementations**: Rio and Qt6 specific implementations
|
|
378
|
+
|
|
379
|
+
## Contributing
|
|
380
|
+
|
|
381
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines.
|
|
382
|
+
|
|
383
|
+
## License
|
|
384
|
+
|
|
385
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
386
|
+
|
|
387
|
+
## Contact
|
|
388
|
+
|
|
389
|
+
- **Project Contact**: py10x@10x-software.com
|
|
390
|
+
|
|
391
|
+
## Community
|
|
392
|
+
|
|
393
|
+
Join our community on [Discord](https://discord.gg/m7AQSXfFwf) for discussion, support, and collaboration.
|
|
394
|
+
|
|
395
|
+
## Getting Help
|
|
396
|
+
|
|
397
|
+
- Check existing issues and discussions
|
|
398
|
+
- Ask questions in GitHub Discussions
|
|
399
|
+
- Join our community on [Discord](https://discord.gg/m7AQSXfFwf) for discussion, support, and collaboration
|
|
400
|
+
- Contact maintainers for complex issues
|
|
401
|
+
|
|
402
|
+
## Authors
|
|
403
|
+
|
|
404
|
+
- Sasha Davidovich <sasha.davidovich@10x-software.com>
|
|
405
|
+
- Ilya Pevzner <ilya.pevzner@10x-software.com>
|
|
406
|
+
- **Project Contact**: py10x@10x-software.com
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
core_10x/__init__.py,sha256=q1Cpk4Buk1Zhx7zIkktIWiMa4z_xO1IoK1DVh2aRwf8,1489
|
|
2
|
+
core_10x/concrete_traits.py,sha256=OoN8VSBb76WMtqpsV7RDRWDNEGNg8x7sDP6nUSUjoko,9391
|
|
3
|
+
core_10x/conftest.py,sha256=IbhvvW6HSq4mNVSTOXbMU_kprew5AbQccsme88NAZ7s,259
|
|
4
|
+
core_10x/curve.py,sha256=t2pot3aivc1Pb3yGL2mg_OBRwqVeO9SKuKDYdUtELkg,10382
|
|
5
|
+
core_10x/data_domain.py,sha256=VB5gZUL0Xd6S7WO7UVB4JtF9yr1wnZPEvg9wUWfgono,1542
|
|
6
|
+
core_10x/data_domain_binder.py,sha256=4rGXhF3TWCGJSs9SfZtvYxuE9Tnv41q7zZZNl0NcwBA,1745
|
|
7
|
+
core_10x/directory.py,sha256=AemIBny6-jV9dik5N2WbMXed_wZ1ZTRLm_YLgT2RUz4,7577
|
|
8
|
+
core_10x/entity.py,sha256=li0vkk1ALAQc4juh9XNQozVVhaNrDOp9rjA8bNPnFVc,254
|
|
9
|
+
core_10x/entity_filter.py,sha256=8pcUuiqCvnqlO9HCuLjtTyAcWledjWey-hyq566yKbQ,102
|
|
10
|
+
core_10x/environment_variables.py,sha256=YK0rzjcUmV2Pj-npiG0Ze01N0hGwbaeOsJGjBPpMxFY,5335
|
|
11
|
+
core_10x/exec_control.py,sha256=XD7VgJTICbPb7FbAifIohZkhreD-TCHzPrFJOuNeKWE,2409
|
|
12
|
+
core_10x/global_cache.py,sha256=MMesGd87g6JOOum4RpU6sfeQEgAkmmRGq6MVQg-7bts,3314
|
|
13
|
+
core_10x/named_constant.py,sha256=prAv3wKzrB_wwBg5hm6tcg2_rFhoMFE_xTAiWWAI8ZI,13080
|
|
14
|
+
core_10x/nucleus.py,sha256=yr4P4-HgTrgl6EwioiCnBxSZjUSNd__KZzGKE0ToyeE,2608
|
|
15
|
+
core_10x/package_manifest.py,sha256=n1DHlDEXRY3guXTOHE3rBojLmdm9IP5lAeWfv2kfPiA,2882
|
|
16
|
+
core_10x/package_refactoring.py,sha256=9i2KW9YDL2go89uCmTEvl7L0_042tCHxjIKXej1ET2U,5818
|
|
17
|
+
core_10x/py_class.py,sha256=IveecfwUoqXfpceJkWEZ4daN9uPtPqNhE91Bq21I9Xo,16353
|
|
18
|
+
core_10x/rc.py,sha256=jpSYv5dCM6V1kk739A6Tb0CYDCzkhnyxzQIIuaokCGw,3976
|
|
19
|
+
core_10x/rdate.py,sha256=VVd17wmZVoOMwC2FimUZKpcmP0UFL6DjsVxdZokbXfQ,13558
|
|
20
|
+
core_10x/resource.py,sha256=b9dZiuHBWWSZ0jP1CbjWhBNzQpDUZUkJKlb56-9W8L4,6728
|
|
21
|
+
core_10x/roman_number.py,sha256=2_S19vMmIvOKIkdrAuDUQuESDu8bQg7ZoQE053chgCQ,1857
|
|
22
|
+
core_10x/trait.py,sha256=aJfPDugymUE8YkwPVEZwHWWNLaE8SKN3kWGsIB3xjS4,13583
|
|
23
|
+
core_10x/trait_definition.py,sha256=16KdC3KVY0DTuawbJs24AgqiC_aXXeFuIRhms99EAeU,5685
|
|
24
|
+
core_10x/trait_filter.py,sha256=41KraF0cC-LN0UWBKHFqZii6vEaAe-rsCG2kyKtxyac,6663
|
|
25
|
+
core_10x/trait_method_error.py,sha256=cu5lbFC4CoSrHTUGonOmf2_cGh5pC7FOIkYpUgcH71Q,1061
|
|
26
|
+
core_10x/traitable.py,sha256=GSo9-egS5QPb6zW36EUzgab4_VyrlVlKThfbt92ptlg,40847
|
|
27
|
+
core_10x/traitable_cli.py,sha256=7FJDR7BygN50LbG2nDIMG-8j6iT7Wr4sDeT3mZcKYuo,5611
|
|
28
|
+
core_10x/traitable_heir.py,sha256=gNa2TSbp-UKUyIpOv7VuuJuUtSkH9C9YUODVeGpRHvc,1319
|
|
29
|
+
core_10x/traitable_id.py,sha256=lv_jySidaG8SLeL6Rk6VRu8SLfdMvmIjFNODCdlSwXY,965
|
|
30
|
+
core_10x/ts_store.py,sha256=RnBDW8ipa2wqK_dBpKn3Mb11A7_7qIpw_9sdYKEV9Cc,6296
|
|
31
|
+
core_10x/ts_store_type.py,sha256=k5f6_3KDAEXaKdIfLTdXTD-GH-YGgR6KJgNxghqPO40,727
|
|
32
|
+
core_10x/ts_union.py,sha256=XKBJ0P1jOv6_lLbGyVOo3g3e6bqKznwx-47T00Wwfbg,6308
|
|
33
|
+
core_10x/ui_hint.py,sha256=SNIRvxXDc8qBOE_CimyYHEGWsWgBVS9WfPafXBP8PdE,5542
|
|
34
|
+
core_10x/xdate_time.py,sha256=r0vFSNgJb-r5eO_s4swJJmNqvyBs6tzXSeRklA4tS6A,3683
|
|
35
|
+
core_10x/xnone.py,sha256=BdngBX13wvsBE3PbRFzHuIBX493lNfL_U5Se5ZQ_e34,3316
|
|
36
|
+
core_10x/xxcalendar.py,sha256=wEXVtp-Tewt2AAlci-TuEhWMPJZ_0CAZJsfAr069XyM,7692
|
|
37
|
+
core_10x/backbone/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
+
core_10x/backbone/backbone_store.py,sha256=p3aBfeSYXzfyAfBJCxW3CZh-jGONv-xaybInwS06JsM,2131
|
|
39
|
+
core_10x/backbone/backbone_traitable.py,sha256=JaMoSYjoMHCxfyA9kEqvOAp0TVO-BwiD4nq4B1DkO9E,827
|
|
40
|
+
core_10x/backbone/backbone_user.py,sha256=Z8TqOcK_Ew4lF_jY2wVegZys9KmuQ-eTwTwgueE-8KU,1882
|
|
41
|
+
core_10x/backbone/bound_data_domain.py,sha256=l0s1DVjoN6Tc5q3rVtyRuwOCrqM-RuTdwGbbUDwndhI,1537
|
|
42
|
+
core_10x/backbone/namespace.py,sha256=zzcn6o45_Ot1UlU_aTPwV6jYxFT00wjmJj8h2JSDuzs,3363
|
|
43
|
+
core_10x/backbone/vault.py,sha256=bbncfM4BgjW3AP6VK1F2VA6FdzB7LzxGS0qyJXJtITw,1141
|
|
44
|
+
core_10x/code_samples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
+
core_10x/code_samples/_package_manifest.py,sha256=-f9yTx0TquIfz31txumbHr0ZDf6CcKIEv5SJTI7w7C0,32
|
|
46
|
+
core_10x/code_samples/directories.py,sha256=csqzXbaYmvAfovM9BmvObk0jJ3IB2O6CyL4CiIibopQ,4348
|
|
47
|
+
core_10x/code_samples/person.py,sha256=4dVXBHae3cgcaMQNlUQ1PkIDblUQylfaJqAf81NsXHg,2264
|
|
48
|
+
core_10x/experimental/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
+
core_10x/experimental/data_protocol_ex.py,sha256=AS5M7rdwSEn624_6wderOHmO38lVNHB7Mn0DvF_aDn0,663
|
|
50
|
+
core_10x/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
+
core_10x/manual_tests/calendar_test.py,sha256=vsrsydHlUTHW-bIwc_UkuboAdlbd7Uvua-TA5e1ixYM,1081
|
|
52
|
+
core_10x/manual_tests/ctor_update_bug.py,sha256=0qYp6qZfVoA9DVz_ESU6asW6YCkTwwmMygnjYAxKC6U,1801
|
|
53
|
+
core_10x/manual_tests/debug_graph_on.py,sha256=OsVVHgIj2iXMNJ2wABn1v--_14PtDN2_lKRj91UCPxM,557
|
|
54
|
+
core_10x/manual_tests/debug_graphoff_inside_graph_on.py,sha256=7N8_P2eNh92Aln-xs_iXqeKvcJWpsTqJlbzJ9O82ZLM,691
|
|
55
|
+
core_10x/manual_tests/enum_bits_test.py,sha256=jq17RCNzgj-H2x24zpFE9xHUuiNqRzGrVC8xsMrjuK0,308
|
|
56
|
+
core_10x/manual_tests/env_vars_trivial_test.py,sha256=ALyjJt0CekDSMmYTd8Ms22-MhU7tA2ep-zklp6rqiHA,254
|
|
57
|
+
core_10x/manual_tests/existing_traitable.py,sha256=_qh7UXf7ZJiCtj6bWJoE09kkIiDwv3IiFJ5VkJlGz38,1215
|
|
58
|
+
core_10x/manual_tests/k10x_test1.py,sha256=yJz72segodYcOEX03hG6ySAHjJ0sD5ysv621tvbvfGg,250
|
|
59
|
+
core_10x/manual_tests/named_constant_test.py,sha256=beVjWr-7ufBa1pMte7IsqUjTLN3sQmskVpNyXm_wgio,3628
|
|
60
|
+
core_10x/manual_tests/nucleus_trivial_test.py,sha256=EAu6dZYyTcHfIzEhvtEv2P0vl-eKT4Fp_RccTNMVjyU,1559
|
|
61
|
+
core_10x/manual_tests/polars_test.py,sha256=tSi8kAvTfDBO4wHQEA6B0CEYhSKqmXIdAnxcn1OqHOg,594
|
|
62
|
+
core_10x/manual_tests/py_class_test.py,sha256=vNTyM2qmqQ18B92Js56JUgnDvU9Q9br1ZmO6q-UYfxQ,136
|
|
63
|
+
core_10x/manual_tests/rc_test.py,sha256=XK_76XW4X-hp5dKwvBG4y9VoKm3du7flwV0y5Htpdhg,839
|
|
64
|
+
core_10x/manual_tests/rdate_test.py,sha256=z4eoKA9n4VvuBlB5Ah_Ya1S1KudHGomf9DuZn71nbM0,199
|
|
65
|
+
core_10x/manual_tests/reference_serialization_bug.py,sha256=xJfSLT3Wc_7tx9Zxz-N5iNWWwkfsOAcArGkgGi7Qces,629
|
|
66
|
+
core_10x/manual_tests/resource_trivial_test.py,sha256=frnInm6f_gPAydFwKxfTlUMx70t3i6vWvS7WU3-om3k,321
|
|
67
|
+
core_10x/manual_tests/store_uri_test.py,sha256=YA9NZtB9O2uMhkAd61gy4IWoOQmQE8vCFMpyKIdo39k,135
|
|
68
|
+
core_10x/manual_tests/trait_definition_test.py,sha256=KMcyrKDMjpNY1izRuCbxUSDiNY6GjKZKT_sNhk1M_U0,402
|
|
69
|
+
core_10x/manual_tests/trait_filter_test.py,sha256=wQhvWlOl2BU11xBkv_tlWzy1LfZsmsOo-7b67AZ2QLQ,409
|
|
70
|
+
core_10x/manual_tests/trait_flag_modification_test.py,sha256=_6AWCLnSjpkmSM_GbhZAuyenXaAl0BJI3Ulyl3vDvxY,1095
|
|
71
|
+
core_10x/manual_tests/trait_modification_bug.py,sha256=YDkK-d7A6_RkaUiDHdizUpAsWCFw3Z8AgQOJxHDihtM,535
|
|
72
|
+
core_10x/manual_tests/traitable_as_of_test.py,sha256=LKIoC56qXJoLhvyWIBXPFi3ZRxwPoDmkHHDV-7qvCZk,3170
|
|
73
|
+
core_10x/manual_tests/traitable_heir_test.py,sha256=TXUys0BIjqvtnbaKp9sW0Y8ct0WSLxKRUUz0YfivwKA,899
|
|
74
|
+
core_10x/manual_tests/traitable_history_test.py,sha256=FHHO_QBCcQFMKNM0fNxQaqU1Og02FYhg4wtj-ANSlUA,1324
|
|
75
|
+
core_10x/manual_tests/traitable_serialization_test.py,sha256=mbnb95XpZ_2tr1GEx79Qb-1J-STmojOqVFwiRK7AcxA,1666
|
|
76
|
+
core_10x/manual_tests/traitable_trivial_test.py,sha256=jw6u2GGzd-LjTAhPHUaC--Zm3l58MmnB7w9Kz7x2YIY,1788
|
|
77
|
+
core_10x/manual_tests/trivial_graph_test.py,sha256=p9_58JDilpXWNJdysPSHJw3EbOen2piOWa8qVuaCg0c,441
|
|
78
|
+
core_10x/manual_tests/ts_class_association_test.py,sha256=n4tgBXILtKRLBM2S-xsYAvceXrDYUJgJG4l_A7rKvrk,2500
|
|
79
|
+
core_10x/manual_tests/ts_trivial_test.py,sha256=QIMY6sgbsRIaP0ochpu0kHR4bEOMCMsof_4d1dJrxy0,597
|
|
80
|
+
core_10x/testlib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
|
+
core_10x/testlib/test_store.py,sha256=nG5dbUIpLOa9z1ZWQvFd32k_RFhbUrSN_5CSt4VTDGA,8624
|
|
82
|
+
core_10x/testlib/traitable_history_tests.py,sha256=clrsT1lZUUK82n4Emt5BU40VtmwwG8VDVEnOVGwJwZM,28853
|
|
83
|
+
core_10x/testlib/ts_tests.py,sha256=0Zd6Oij-jTDKsZGcMP4nzMrisHM2LCwO3Lw25lggxNs,11107
|
|
84
|
+
core_10x/unit_tests/test_concrete_traits.py,sha256=S2pGP-l_eyXl3pQHf2FG70LdpweQ6XFbC9xV7WvtpeE,4432
|
|
85
|
+
core_10x/unit_tests/test_converters.py,sha256=Vz0h44ueRxTnggO3D4F946vH5E3imGaXiu9E0i-_pKQ,1898
|
|
86
|
+
core_10x/unit_tests/test_curve.py,sha256=diOtPN00ELYZ6yOCn5v-Zvt-Zr1cXtXAjyai7dde2bo,4920
|
|
87
|
+
core_10x/unit_tests/test_directory.py,sha256=Fw9fAa1R4G2vWOJYlH3efMk68Ph_1EEvG8DbeCFbEMI,1919
|
|
88
|
+
core_10x/unit_tests/test_documentation.py,sha256=ERQXIP0VLCUWDYmUHucwwJTMmMjVXaldfD2Q6F5dHDo,5747
|
|
89
|
+
core_10x/unit_tests/test_environment_variables.py,sha256=O8j-_-JuyA7Pyqh75z1SAUEqusVg0K_rUzvyxXexYIY,538
|
|
90
|
+
core_10x/unit_tests/test_filters.py,sha256=ZLZ6wZH5P63vfwq2DT03SO-ps6GK9LGP0y_4wbQo3lY,6903
|
|
91
|
+
core_10x/unit_tests/test_graph.py,sha256=WJLF7oMct57PLz0vU5sBZ_R_hXvWDIqT-6ZImODW_AI,11591
|
|
92
|
+
core_10x/unit_tests/test_named_constant.py,sha256=FbMoQwhWM1O5UpZpVJhGqFRI9oU4m2dgXTfjdl0PWp8,2778
|
|
93
|
+
core_10x/unit_tests/test_rc.py,sha256=XmftlBkt03SPzOCobJ7IWyjM-RTlCbbGBzG2tAX31zc,146
|
|
94
|
+
core_10x/unit_tests/test_rdate.py,sha256=z9ziagp0pEb5cdXT0DgNyxf1b2sc8rBevqpihviiZK8,14861
|
|
95
|
+
core_10x/unit_tests/test_trait_method_error.py,sha256=dR-l-_xODrpP9Qh0PCRQTpL4NZNHVRWgPiWN8aUI8dI,2704
|
|
96
|
+
core_10x/unit_tests/test_trait_modification.py,sha256=4U6RR1_D2zqKLSmai-mwp3AfQ-cQluewmnlsfJEVC1s,333
|
|
97
|
+
core_10x/unit_tests/test_traitable.py,sha256=HTEOGSovnctjeXjWKPOvbc5MiDg8rRwJQHNvds834AI,29636
|
|
98
|
+
core_10x/unit_tests/test_traitable_history.py,sha256=8G7Fj-hYV4jtGwTSEA_21y4E6sX8OTadB3R1k4ug4tQ,103
|
|
99
|
+
core_10x/unit_tests/test_ts_store.py,sha256=oF65y7mJvSyLsgcPTj0wFfkItMB_3JefwiIBydLGFjY,60
|
|
100
|
+
core_10x/unit_tests/test_ts_union.py,sha256=4zCahXpOeMpieVJ95RIfZgt8AlDEnfXXTbrzhtcoyA8,12541
|
|
101
|
+
core_10x/unit_tests/test_ui_nodes.py,sha256=xEvnpQV4j2i6PG8U8HTfSftNsVk8DWDdoy5fbug6wl8,2300
|
|
102
|
+
core_10x/unit_tests/test_xxcalendar.py,sha256=Yl4CyvPvuDCkxmpItxzj8QEBuNrHbI1yuH1KOWRn85k,18278
|
|
103
|
+
core_10x/vault/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
104
|
+
core_10x/vault/sec_keys.py,sha256=gZI3fcI13j9sViJ-UZyEfyusUdS4L7fzVyN5H8BXcHA,4779
|
|
105
|
+
core_10x/vault/security_keys_old.py,sha256=wd3tBtAJd088swyGvqO4DWbSkwmX5Cee21oXBetB61g,5434
|
|
106
|
+
core_10x/vault/vault.py,sha256=P9Gn297uDVvKxJH1YezdVJHkSVaAc7aBN5fOs_QVgN4,1831
|
|
107
|
+
core_10x/vault/vault_traitable.py,sha256=8F9QaKO0Ap2qd4xUYKkjVeS_MKe2OB2C4VtcIC8KG-0,1855
|
|
108
|
+
core_10x/vault/vault_user.py,sha256=r5w8NO6kc6HuHFKviOofXhsVd6ehx8Xq2AYNaEnqMUQ,2628
|
|
109
|
+
infra_10x/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
|
+
infra_10x/mongodb_admin.py,sha256=Llmtl5-gkBE9ghtb7tOtBCP2gs3pj08JDWVJ0JTvpaQ,4702
|
|
111
|
+
infra_10x/mongodb_store.py,sha256=tfKFBjd7xs-iPkyU-jT2BijrAB61IQ3UjmxTWwZSdSY,12233
|
|
112
|
+
infra_10x/mongodb_utils.py,sha256=D_jaqCoSQEuH3JuHGTXsRdO70uOwwDnaaO7IJZN3Izg,4604
|
|
113
|
+
infra_10x/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
114
|
+
infra_10x/manual_tests/test_misc.py,sha256=gpg9NLJAkdCbU9MEDQ4Mc-pWIf1pO5KyRO6mE-t0xhg,560
|
|
115
|
+
infra_10x/manual_tests/test_prepare_filter_and_pipeline.py,sha256=giMQssqsIUEVwVPPYKhCmf5NNieFd_yV-jYCdLzRgrs,699
|
|
116
|
+
infra_10x/unit_tests/conftest.py,sha256=4rTIgVQiR3kSTGQ1zYGBOSla1EGC347A0_sufD8s2RQ,502
|
|
117
|
+
infra_10x/unit_tests/test_mongo_db.py,sha256=veqwPkYW88ij4Tv1GoU6A8ccb0gMWsUxY0f3eGYMQY4,1407
|
|
118
|
+
infra_10x/unit_tests/test_mongo_history.py,sha256=8G7Fj-hYV4jtGwTSEA_21y4E6sX8OTadB3R1k4ug4tQ,103
|
|
119
|
+
ui_10x/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
120
|
+
ui_10x/choice.py,sha256=4BaNOVquOjdr9ccmdjpDeBVgasxhbBmCZc8MKmI6RCc,7608
|
|
121
|
+
ui_10x/collection_editor.py,sha256=d1mYEm0OgPauI2di5iRFxG3mfoX2FjFrEJAStVp336Y,4176
|
|
122
|
+
ui_10x/concrete_trait_widgets.py,sha256=HN5l6U0v6cCu_0twg_NgcLBwNw3WDDwrTUrNHR9ZaG0,6446
|
|
123
|
+
ui_10x/conftest.py,sha256=a2MnUbTN55s6GIsrVo_ZpLh7ZA-tcq-k3YA-eoYd870,164
|
|
124
|
+
ui_10x/entity_stocker.py,sha256=_hhKZwUGjrHTeqWnq_CoJ4PLZ4iI-uWQ8jjCMHw15W8,5741
|
|
125
|
+
ui_10x/platform.py,sha256=vagZ3i9m9D0wgfhZ3W9JEIQTlYKrj9RVe8_a1VwZWkc,492
|
|
126
|
+
ui_10x/platform_interface.py,sha256=La6L4-uLPw0NaNPOiOuvqB6vXNrUPW6lStXLV037qYc,11874
|
|
127
|
+
ui_10x/py_data_browser.py,sha256=xfZ176joV59vFt6HU_HIEr5Rq7wBYVIAm9EPt85r_xM,7731
|
|
128
|
+
ui_10x/table_header_view.py,sha256=rlXtg4nHhvwjT2vLfnmbBFviAoEhsjcKQwLg53WyJWQ,12622
|
|
129
|
+
ui_10x/table_view.py,sha256=94BybC1hL-kse3CTDUH0PT5FO5je8bf9cJQtilM67Ao,5865
|
|
130
|
+
ui_10x/trait_editor.py,sha256=v-m7GFFUcp-CYTRGnbiNmyUBW7E4I1hwBD3Ev_AxONw,6538
|
|
131
|
+
ui_10x/trait_widget.py,sha256=eW2zew2PiOpBJPmQyxPnd-IqLmoMubbpvN9XLTAh6Ps,4210
|
|
132
|
+
ui_10x/traitable_editor.py,sha256=el0wW5nqowcxmfJafbhxfFlL022kS1Z9oyKvJS8flaU,7830
|
|
133
|
+
ui_10x/traitable_view.py,sha256=LeuSCqA5IZHewApSf7kICHsz8dNXbxkO1iS73hBC0Lw,5203
|
|
134
|
+
ui_10x/utils.py,sha256=ioDlHKdYUjXx3HySD4v7qdlxmpQf0r-m-jrCO3TLqKw,22488
|
|
135
|
+
ui_10x/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
136
|
+
ui_10x/apps/collection_editor_app.py,sha256=fBmmxwIO6CoMij76znnFfvsYTEYwBuC9lm1wDHAa8xU,3144
|
|
137
|
+
ui_10x/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
138
|
+
ui_10x/examples/_guess_word_data.py,sha256=Q78Zn2LHn4ILujQ6HXsSg-ePhEmatt5ryqJ0u0HXgmI,162526
|
|
139
|
+
ui_10x/examples/collection_editor.py,sha256=DdQkgIf-MP0vV6f0IIYlyL0TYE_rGdLT5GPh6S-Cwro,611
|
|
140
|
+
ui_10x/examples/date_selector.py,sha256=nfidq9OL7Z2ZtrsZwY8rDHOHmUOsChZBxb8kopUM23c,314
|
|
141
|
+
ui_10x/examples/entity_stocker.py,sha256=8N8wax4X57rILMdtq5S2JPhOi0lC4WXqUi2XQ-KhC0k,621
|
|
142
|
+
ui_10x/examples/guess_word.py,sha256=3sFCTCYo05I3fAJRWwtpWUKXEHgFxGZaaaPP8fxpYsM,11259
|
|
143
|
+
ui_10x/examples/message_box.py,sha256=mjAexxwxLF4SQHzFDnRmWRrQqRnS060Y5Y8SVimyPW8,546
|
|
144
|
+
ui_10x/examples/multi_choice.py,sha256=iz5NVYhXI_XO1pEl_npi-khmHcsIS7QpRqg2CHQAoFc,385
|
|
145
|
+
ui_10x/examples/py_data_browser.py,sha256=stnZ68OAAHMgy_BGgQ-wkVF4ucdgdJmNhkQKLUdx8Hc,1720
|
|
146
|
+
ui_10x/examples/radiobox.py,sha256=PRFP9k6k4VLcCDXjdQruLs5QWPpUFjC3N4uUjUtLjIg,684
|
|
147
|
+
ui_10x/examples/single_choice.py,sha256=qSUaLsW2Usu_nlRwVXWRNCie5bxp-gP50QtysW_kQ8A,717
|
|
148
|
+
ui_10x/examples/style_sheet.py,sha256=Lzu6HOsX18kUOEekDY2su49E-CHJyI4YdnIZUrI2KOk,2079
|
|
149
|
+
ui_10x/examples/trivial_entity_editor.py,sha256=5NUH7pPikB5FEUUYlXbdtsxM2WJZ5iY0psVgwtDsLW4,523
|
|
150
|
+
ui_10x/qt6/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
151
|
+
ui_10x/qt6/conftest.py,sha256=k3bH4StT333wioFk038mLICwsuj3aNVyYoZZAzgU_m4,159
|
|
152
|
+
ui_10x/qt6/platform_implementation.py,sha256=Tm0CSEC-tCi2r8IOr2-yb6dC9-Mqod5HoUkBQCBYs6Y,10033
|
|
153
|
+
ui_10x/qt6/utils.py,sha256=hFRE_mqs073p1zClZgnpnoiQ-4aZ1-KnMbuS6VOF0yQ,23964
|
|
154
|
+
ui_10x/qt6/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
155
|
+
ui_10x/qt6/manual_tests/basic_test.py,sha256=lMYABhWr9gCzZmibb92amBj1QEhvMfsrZxkvWKFMJ5o,1188
|
|
156
|
+
ui_10x/rio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
157
|
+
ui_10x/rio/component_builder.py,sha256=KTLDslWo7vELDGrNStdK3ryvN-73jxAiIO4WVdlxw1A,16238
|
|
158
|
+
ui_10x/rio/conftest.py,sha256=U5ZaQx85MGZSViApC93Y5kbzJujvBRQh3HIEqwCfs9I,999
|
|
159
|
+
ui_10x/rio/platform_implementation.py,sha256=FATBsQqR5xDeu_2qN6HN6B4GDW5s9Yg9yuWwEF0BD50,1802
|
|
160
|
+
ui_10x/rio/style_sheet.py,sha256=9KDHsayXyWHvPTvhB7dgZGzheHi2RllBjVbCmpfqAe0,1719
|
|
161
|
+
ui_10x/rio/apps/examples/rio.toml,sha256=CuXD3cazKcqf2xZsx_CR0_mv-93KB9w3vOygi54ensA,394
|
|
162
|
+
ui_10x/rio/apps/examples/examples/__init__.py,sha256=Sp6uB8KDKhU9yJevCwgjcY6vGdqFNZQVZ5_Asmr0Ebk,568
|
|
163
|
+
ui_10x/rio/apps/examples/examples/components/__init__.py,sha256=kGtJsE7lclQsZvr7inO82YT_MlaNMJ8XG1o5ZXzUKHg,98
|
|
164
|
+
ui_10x/rio/apps/examples/examples/components/collection_editor.py,sha256=xTYyONTeNtTCTB9fOq5EtMLXP9hxvjlRX9lhY-LP45s,502
|
|
165
|
+
ui_10x/rio/apps/examples/examples/pages/collection_editor.py,sha256=_sFFKiEBm0SALtV05-a54x3wcyaS4Ct6-ppgRTxcm1Y,535
|
|
166
|
+
ui_10x/rio/apps/examples/examples/pages/login_page.py,sha256=HH-UDYfnCMxbLTjRwm9AwETc7bi09wMwzY5HXGqFoa4,2974
|
|
167
|
+
ui_10x/rio/apps/examples/examples/pages/style_sheet.py,sha256=m72qV1cblPPAWepUsjWBAmiaX8dbx44rAI1TKSGIS68,686
|
|
168
|
+
ui_10x/rio/components/__init__.py,sha256=IRLxzeb-UFbfk7iAR7nKtm_tQ6DHXtNbMV77tI_hUMI,403
|
|
169
|
+
ui_10x/rio/components/group_box.py,sha256=QPHyCS0Ekk0hjR8DiK5-JvTU_jzwZF0e7NEIVRisVLo,894
|
|
170
|
+
ui_10x/rio/components/labeled_checkbox.py,sha256=RXmRfhHobkVv2g1f7I7VeYDxFG87NR6Uul0TGYYEyvs,451
|
|
171
|
+
ui_10x/rio/components/line_edit.py,sha256=KigqhoVHlqbtBTEpzgXv7gfUu4WcxxfZpRgEx-wCjCM,1115
|
|
172
|
+
ui_10x/rio/components/radio_button.py,sha256=SRpQK8eDU3vGZ-mMHhL2mCoZzja6aGs8ZDHce7bJrZs,910
|
|
173
|
+
ui_10x/rio/components/separator.py,sha256=FHk09Spf-4elVqzMqdTkQwlg8GIoWjhvqZ18v2Fhr-4,856
|
|
174
|
+
ui_10x/rio/components/splitter.py,sha256=GgZEH8vr5pWvqmMhojdlbG-cPJW2tY5ytzrSsy03zIQ,5495
|
|
175
|
+
ui_10x/rio/components/tree_view.py,sha256=tXqrh7LsHFSdkdm_js-TNVl2YJulVS6SNjSaBDAkqwQ,2313
|
|
176
|
+
ui_10x/rio/internals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
177
|
+
ui_10x/rio/internals/app.py,sha256=idgenOO_QAkRoBr30vjmP4DgbUBLpAVpjk-JdDRE4IQ,6574
|
|
178
|
+
ui_10x/rio/manual_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
179
|
+
ui_10x/rio/manual_tests/basic_test.py,sha256=M84xe7TGsmkWR6uhcQtdVzF2oCYM9_r4C7R9dhS0ZTA,704
|
|
180
|
+
ui_10x/rio/manual_tests/splitter.py,sha256=2TcdFBMmtcKz9X9Txq_L2ibY0GFkrSBV3VtBFi8bJiE,944
|
|
181
|
+
ui_10x/rio/unit_tests/test_collection_editor.py,sha256=AmacRA28rqjnbxuvFqzVyOqY3SOkhxpne9UVHlOkDlc,3508
|
|
182
|
+
ui_10x/rio/unit_tests/test_internals.py,sha256=Y-6whaWa7IEZOHFmkLH5PiBZW7Et5lqKAYiNXkR5vbw,26451
|
|
183
|
+
ui_10x/rio/unit_tests/test_style_sheet.py,sha256=8Z3Nj-5h15AAo6HbH_pYRnU3Z__rFUBWJ0o5Pt6pXZQ,1193
|
|
184
|
+
ui_10x/rio/widgets/__init__.py,sha256=1Kz_JwadC3_ULDDbbdfAYm_Aa0PQDjelglDdmVAoyow,1097
|
|
185
|
+
ui_10x/rio/widgets/application.py,sha256=K_yui5thBC3neX8YdDRZVMOjeZeV0ebAfnAZxtPsdoA,4078
|
|
186
|
+
ui_10x/rio/widgets/button.py,sha256=5VZNMyX4sjmDvTfmkaa_MQG_asHk8kevkusgr-u0A7c,1567
|
|
187
|
+
ui_10x/rio/widgets/button_group.py,sha256=0As4pE0FwDWslj_zz__aYb87K6fAvEBauE55jr5o44E,1895
|
|
188
|
+
ui_10x/rio/widgets/calendar.py,sha256=9avHFSDIVCJmOPBQd2wVm6vGKwNxt8I5uD4G-kbXcaA,577
|
|
189
|
+
ui_10x/rio/widgets/checkbox.py,sha256=nFyvlexLDRx3fbJoXvohQwY-HTB0SiAa-c6D692Rhlk,662
|
|
190
|
+
ui_10x/rio/widgets/dialog.py,sha256=HlYf74fwF12233W3TqJ36tbkwCwg7K6pBPIxUj2JWgo,4540
|
|
191
|
+
ui_10x/rio/widgets/group_box.py,sha256=qg7jE4yh_zBkfQPZDs7S6Iamp8EfFDidJXF6ESUqXHY,807
|
|
192
|
+
ui_10x/rio/widgets/layout.py,sha256=2nCP-pLBUy-CbVElL2lK8W2qLTYDguDATQMGDfQ8Vt4,850
|
|
193
|
+
ui_10x/rio/widgets/line_edit.py,sha256=T639y2uPqMCv9o7qzj5zbpfVC1Xcnyi7fluasFlowgY,1203
|
|
194
|
+
ui_10x/rio/widgets/list.py,sha256=IdC-C7fW2Jy50m_P9fPKzIvzrbyexaeMhIyBsU49Pqc,3390
|
|
195
|
+
ui_10x/rio/widgets/message_box.py,sha256=RoGa8TA0BAjiS2jXQ_THRBufchFc8-hdQrAcEzzLNDs,2844
|
|
196
|
+
ui_10x/rio/widgets/scroll_area.py,sha256=Y4QE7AgNgHalUgArAz6gBsfDodrxDvc2IdPYsXJ4jzk,772
|
|
197
|
+
ui_10x/rio/widgets/spacer.py,sha256=BBrfghzl7cwxnpyDtiB-csaeK9GARIauH3VisjleKFI,118
|
|
198
|
+
ui_10x/rio/widgets/splitter.py,sha256=moISIg9eZ1aGNq7ONoeZj4E048vB9kXBQyPoG2OP6AE,1353
|
|
199
|
+
ui_10x/rio/widgets/text_edit.py,sha256=6InNVXDvaBPuzRQOZslgKhpO1B63VSFoPAtCuEbigG8,817
|
|
200
|
+
ui_10x/rio/widgets/tree.py,sha256=dTFWDe9ur15CGW3zP1HCfr6vs8B6Z-Q5S6BKG1BsIDM,3199
|
|
201
|
+
ui_10x/rio/widgets/unit_tests/test_button.py,sha256=mp0K6eyI2gGagIz_C4vMTGCi6uKE1egCTQ9Nd53ISaQ,3403
|
|
202
|
+
ui_10x/rio/widgets/unit_tests/test_button_group.py,sha256=G9cyiSOee59yyjLBoN4d55p8-AjHT6-gLqDXfivuyso,1040
|
|
203
|
+
ui_10x/rio/widgets/unit_tests/test_calendar.py,sha256=CvZ4aT96CDfjyn5YL62tFM-MlBl2zVjAMLV70pFd8L8,3915
|
|
204
|
+
ui_10x/rio/widgets/unit_tests/test_checkbox.py,sha256=RtSBHKllAhdYYYTUQPYI9KpnsKhQZKi9EyGvuc22iwg,4004
|
|
205
|
+
ui_10x/rio/widgets/unit_tests/test_group_box.py,sha256=eQfbPSdWTPF8J8AtedpNV8AOTnhR1KcyU3I2-JqbQ1I,6485
|
|
206
|
+
ui_10x/rio/widgets/unit_tests/test_label.py,sha256=MtXD-Ua6Vc7wPukMH_NPNtwCSU8LdL3KV0qFnkV8L1Q,1450
|
|
207
|
+
ui_10x/rio/widgets/unit_tests/test_line_edit.py,sha256=fTv19hJ3w0-PMgGNvdjLScqWIr7zWqTq3Q7gSEYwe_0,5486
|
|
208
|
+
ui_10x/rio/widgets/unit_tests/test_list.py,sha256=mAu6baoidi28YToKUsRJO-96mwkF1dLo0N8ty7vfxCM,5376
|
|
209
|
+
ui_10x/unit_tests/conftest.py,sha256=a2MnUbTN55s6GIsrVo_ZpLh7ZA-tcq-k3YA-eoYd870,164
|
|
210
|
+
ui_10x/unit_tests/test_platform.py,sha256=ndOqwUSbsNFhbdQskcsAaS32HbsJYqMowBRgF2baec4,266
|
|
211
|
+
py10x_universe-0.1.3.dist-info/METADATA,sha256=E2nvoJRHSvmzYPXRBNsdCi3cXjQUwMAXXNXt-s-J9LA,14081
|
|
212
|
+
py10x_universe-0.1.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
213
|
+
py10x_universe-0.1.3.dist-info/licenses/LICENSE,sha256=dgQk7OU1c79UlHJazsOFIXusH29mw3EHkvKSQZ08woE,1075
|
|
214
|
+
py10x_universe-0.1.3.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 10x Software, LLC.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
ui_10x/__init__.py
ADDED
|
File without changes
|
ui_10x/apps/__init__.py
ADDED
|
File without changes
|