dmart 1.4.32__py3-none-any.whl → 1.4.35__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.
- {dmart_migrations → alembic}/env.py +3 -12
- bundler.py +0 -3
- {dmart-1.4.32.dist-info → dmart-1.4.35.dist-info}/METADATA +2 -4
- dmart-1.4.35.dist-info/RECORD +264 -0
- {dmart-1.4.32.dist-info → dmart-1.4.35.dist-info}/top_level.txt +2 -1
- dmart.py +47 -102
- main.py +4 -1
- pytests/api_user_models_erros_test.py +16 -0
- pytests/api_user_models_requests_test.py +98 -0
- pytests/archive_test.py +72 -0
- pytests/base_test.py +300 -0
- pytests/get_settings_test.py +14 -0
- pytests/json_to_db_migration_test.py +237 -0
- pytests/service_test.py +26 -0
- pytests/test_info.py +55 -0
- pytests/test_status.py +15 -0
- dmart-1.4.32.dist-info/RECORD +0 -278
- dmart_migrations/README +0 -1
- dmart_migrations/__pycache__/__init__.cpython-314.pyc +0 -0
- dmart_migrations/__pycache__/env.cpython-314.pyc +0 -0
- dmart_migrations/alembic.ini +0 -117
- dmart_migrations/notes.txt +0 -11
- dmart_migrations/script.py.mako +0 -28
- dmart_migrations/versions/__pycache__/0f3d2b1a7c21_add_authz_materialized_views.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/10d2041b94d4_last_checksum_history.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/1cf4e1ee3cb8_ext_permission_with_filter_fields_values.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/26bfe19b49d4_rm_failedloginattempts.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/3c8bca2219cc_add_otp_table.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/6675fd9dfe42_remove_unique_from_sessions_table.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/71bc1df82e6a_adding_user_last_login_at.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/74288ccbd3b5_initial.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/7520a89a8467_rm_activesession_table.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/848b623755a4_make_created_nd_updated_at_required.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/8640dcbebf85_add_notes_to_users.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/91c94250232a_adding_fk_on_owner_shortname.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/98ecd6f56f9a_ext_meta_with_owner_group_shortname.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/9aae9138c4ef_indexing_created_at_updated_at.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/b53f916b3f6d_json_to_jsonb.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/eb5f1ec65156_adding_user_locked_to_device.cpython-314.pyc +0 -0
- dmart_migrations/versions/__pycache__/f7a4949eed19_adding_query_policies_to_meta.cpython-314.pyc +0 -0
- {cxb/client → alembic}/__init__.py +0 -0
- {dmart_migrations → alembic/scripts}/__init__.py +0 -0
- {dmart_migrations → alembic}/scripts/calculate_checksums.py +0 -0
- {dmart_migrations → alembic}/scripts/migration_f7a4949eed19.py +0 -0
- {dmart_migrations → alembic}/versions/0f3d2b1a7c21_add_authz_materialized_views.py +0 -0
- {dmart_migrations → alembic}/versions/10d2041b94d4_last_checksum_history.py +0 -0
- {dmart_migrations → alembic}/versions/1cf4e1ee3cb8_ext_permission_with_filter_fields_values.py +0 -0
- {dmart_migrations → alembic}/versions/26bfe19b49d4_rm_failedloginattempts.py +0 -0
- {dmart_migrations → alembic}/versions/3c8bca2219cc_add_otp_table.py +0 -0
- {dmart_migrations → alembic}/versions/6675fd9dfe42_remove_unique_from_sessions_table.py +0 -0
- {dmart_migrations → alembic}/versions/71bc1df82e6a_adding_user_last_login_at.py +0 -0
- {dmart_migrations → alembic}/versions/74288ccbd3b5_initial.py +0 -0
- {dmart_migrations → alembic}/versions/7520a89a8467_rm_activesession_table.py +0 -0
- {dmart_migrations → alembic}/versions/848b623755a4_make_created_nd_updated_at_required.py +0 -0
- {dmart_migrations → alembic}/versions/8640dcbebf85_add_notes_to_users.py +0 -0
- {dmart_migrations → alembic}/versions/91c94250232a_adding_fk_on_owner_shortname.py +0 -0
- {dmart_migrations → alembic}/versions/98ecd6f56f9a_ext_meta_with_owner_group_shortname.py +0 -0
- {dmart_migrations → alembic}/versions/9aae9138c4ef_indexing_created_at_updated_at.py +0 -0
- {dmart_migrations/scripts → alembic/versions}/__init__.py +0 -0
- {dmart_migrations → alembic}/versions/b53f916b3f6d_json_to_jsonb.py +0 -0
- {dmart_migrations → alembic}/versions/eb5f1ec65156_adding_user_locked_to_device.py +0 -0
- {dmart_migrations → alembic}/versions/f7a4949eed19_adding_query_policies_to_meta.py +0 -0
- /cxb/{client/assets → assets}/@codemirror-Rn7_6DkE.js +0 -0
- /cxb/{client/assets → assets}/@edraj-CS4NwVbD.js +0 -0
- /cxb/{client/assets → assets}/@floating-ui-BwwcF-xh.js +0 -0
- /cxb/{client/assets → assets}/@formatjs-yKEsAtjs.js +0 -0
- /cxb/{client/assets → assets}/@fortawesome-DRW1UCdr.js +0 -0
- /cxb/{client/assets → assets}/@jsonquerylang-laKNoFFq.js +0 -0
- /cxb/{client/assets → assets}/@lezer-za4Q-8Ew.js +0 -0
- /cxb/{client/assets → assets}/@marijn-DXwl3gUT.js +0 -0
- /cxb/{client/assets → assets}/@popperjs-l0sNRNKZ.js +0 -0
- /cxb/{client/assets → assets}/@replit--ERk53eB.js +0 -0
- /cxb/{client/assets → assets}/@roxi-CGMFK4i8.js +0 -0
- /cxb/{client/assets → assets}/@typewriter-cCzskkIv.js +0 -0
- /cxb/{client/assets → assets}/@zerodevx-BlBZjKxu.js +0 -0
- /cxb/{client/assets → assets}/@zerodevx-CVEpe6WZ.css +0 -0
- /cxb/{client/assets → assets}/BreadCrumbLite-DAhOx38v.js +0 -0
- /cxb/{client/assets → assets}/EntryRenderer-25YDhRen.js +0 -0
- /cxb/{client/assets → assets}/EntryRenderer-DXytdFp9.css +0 -0
- /cxb/{client/assets → assets}/ListView-BpAycA2h.js +0 -0
- /cxb/{client/assets → assets}/ListView-U8of-_c-.css +0 -0
- /cxb/{client/assets → assets}/Prism--hMplq-p.js +0 -0
- /cxb/{client/assets → assets}/Prism-Uh6uStUw.css +0 -0
- /cxb/{client/assets → assets}/Table2Cols-BsbwicQm.js +0 -0
- /cxb/{client/assets → assets}/_..-BvT6vdHa.css +0 -0
- /cxb/{client/assets → assets}/_...404_-fuLH_rX9.js +0 -0
- /cxb/{client/assets → assets}/_...fallback_-Ba_NLmAE.js +0 -0
- /cxb/{client/assets → assets}/_module-Bfk8MiCs.js +0 -0
- /cxb/{client/assets → assets}/_module-CEW0D5oI.js +0 -0
- /cxb/{client/assets → assets}/_module-Dgq0ZVtz.js +0 -0
- /cxb/{client/assets → assets}/ajv-Cpj98o6Y.js +0 -0
- /cxb/{client/assets → assets}/axios-CG2WSiiR.js +0 -0
- /cxb/{client/assets → assets}/clsx-B-dksMZM.js +0 -0
- /cxb/{client/assets → assets}/codemirror-wrapped-line-indent-DPhKvljI.js +0 -0
- /cxb/{client/assets → assets}/compare-C3AjiGFR.js +0 -0
- /cxb/{client/assets → assets}/compute-scroll-into-view-Bl8rNFhg.js +0 -0
- /cxb/{client/assets → assets}/consolite-DlCuI0F9.js +0 -0
- /cxb/{client/assets → assets}/crelt-C8TCjufn.js +0 -0
- /cxb/{client/assets → assets}/date-fns-l0sNRNKZ.js +0 -0
- /cxb/{client/assets → assets}/deepmerge-rn4rBaHU.js +0 -0
- /cxb/{client/assets → assets}/dmart_services-AL6-IdDE.js +0 -0
- /cxb/{client/assets → assets}/downloadFile-D08i0YDh.js +0 -0
- /cxb/{client/assets → assets}/easy-signal-BiPFIK3O.js +0 -0
- /cxb/{client/assets → assets}/esm-env-rsSWfq8L.js +0 -0
- /cxb/{client/assets → assets}/export-OF_rTiXu.js +0 -0
- /cxb/{client/assets → assets}/fast-deep-equal-l0sNRNKZ.js +0 -0
- /cxb/{client/assets → assets}/fast-diff-C-IidNf4.js +0 -0
- /cxb/{client/assets → assets}/fast-uri-l0sNRNKZ.js +0 -0
- /cxb/{client/assets → assets}/flowbite-svelte-BLvjb-sa.js +0 -0
- /cxb/{client/assets → assets}/flowbite-svelte-CD54FDqW.css +0 -0
- /cxb/{client/assets → assets}/flowbite-svelte-icons-BI8GVhw_.js +0 -0
- /cxb/{client/assets → assets}/github-slugger-CQ4oX9Ud.js +0 -0
- /cxb/{client/assets → assets}/global-igKv-1g9.js +0 -0
- /cxb/{client/assets → assets}/hookar-BMRD9G9H.js +0 -0
- /cxb/{client/assets → assets}/immutable-json-patch-DtRO2E_S.js +0 -0
- /cxb/{client/assets → assets}/import-1vE3gBat.js +0 -0
- /cxb/{client/assets → assets}/index-B-eTh-ZX.js +0 -0
- /cxb/{client/assets → assets}/index-BVyxzKtH.js +0 -0
- /cxb/{client/assets → assets}/index-BdeNM69f.js +0 -0
- /cxb/{client/assets → assets}/index-C6cPO4op.js +0 -0
- /cxb/{client/assets → assets}/index-CC-A1ipE.js +0 -0
- /cxb/{client/assets → assets}/index-CTxJ-lDp.js +0 -0
- /cxb/{client/assets → assets}/index-Cd-F5j_k.js +0 -0
- /cxb/{client/assets → assets}/index-D742rwaM.js +0 -0
- /cxb/{client/assets → assets}/index-DTfhnhwd.js +0 -0
- /cxb/{client/assets → assets}/index-DdXRK7n9.js +0 -0
- /cxb/{client/assets → assets}/index-DtiCmB4o.js +0 -0
- /cxb/{client/assets → assets}/index-NBrXBlLA.css +0 -0
- /cxb/{client/assets → assets}/index-ac-Buu_H.js +0 -0
- /cxb/{client/assets → assets}/index-iYkH7C67.js +0 -0
- /cxb/{client/assets → assets}/info-B986lRiM.js +0 -0
- /cxb/{client/assets → assets}/intl-messageformat-Dc5UU-HB.js +0 -0
- /cxb/{client/assets → assets}/jmespath-l0sNRNKZ.js +0 -0
- /cxb/{client/assets → assets}/json-schema-traverse-l0sNRNKZ.js +0 -0
- /cxb/{client/assets → assets}/json-source-map-DRgZidqy.js +0 -0
- /cxb/{client/assets → assets}/jsonpath-plus-l0sNRNKZ.js +0 -0
- /cxb/{client/assets → assets}/jsonrepair-B30Dx381.js +0 -0
- /cxb/{client/assets → assets}/lodash-es-DZVAA2ox.js +0 -0
- /cxb/{client/assets → assets}/marked-DKjyhwJX.js +0 -0
- /cxb/{client/assets → assets}/marked-gfm-heading-id-U5zO829x.js +0 -0
- /cxb/{client/assets → assets}/marked-mangle-CDMeiHC6.js +0 -0
- /cxb/{client/assets → assets}/memoize-one-BdPwpGay.js +0 -0
- /cxb/{client/assets → assets}/natural-compare-lite-Bg2Xcf-o.js +0 -0
- /cxb/{client/assets → assets}/pagination-svelte-D5CyoiE_.js +0 -0
- /cxb/{client/assets → assets}/pagination-svelte-v10nAbbM.css +0 -0
- /cxb/{client/assets → assets}/plantuml-encoder-C47mzt9T.js +0 -0
- /cxb/{client/assets → assets}/prismjs-DTUiLGJu.js +0 -0
- /cxb/{client/assets → assets}/profile-BUf-tKMe.js +0 -0
- /cxb/{client/assets → assets}/query-CNmXTsgf.js +0 -0
- /cxb/{client/assets → assets}/queryHelpers-C9iBWwqe.js +0 -0
- /cxb/{client/assets → assets}/scroll-into-view-if-needed-KR58zyjF.js +0 -0
- /cxb/{client/assets → assets}/spaces-0oyGvpii.js +0 -0
- /cxb/{client/assets → assets}/style-mod-Bs6eFhZE.js +0 -0
- /cxb/{client/assets → assets}/svelte-B2XmcTi_.js +0 -0
- /cxb/{client/assets → assets}/svelte-awesome-COLlx0DN.css +0 -0
- /cxb/{client/assets → assets}/svelte-awesome-DhnMA6Q_.js +0 -0
- /cxb/{client/assets → assets}/svelte-datatables-net-CY7LBj6I.js +0 -0
- /cxb/{client/assets → assets}/svelte-floating-ui-BlS3sOAQ.js +0 -0
- /cxb/{client/assets → assets}/svelte-i18n-CT2KkQaN.js +0 -0
- /cxb/{client/assets → assets}/svelte-jsoneditor-BzfX6Usi.css +0 -0
- /cxb/{client/assets → assets}/svelte-jsoneditor-CUGSvWId.js +0 -0
- /cxb/{client/assets → assets}/svelte-select-CegQKzqH.css +0 -0
- /cxb/{client/assets → assets}/svelte-select-CjHAt_85.js +0 -0
- /cxb/{client/assets → assets}/tailwind-merge-CJvxXMcu.js +0 -0
- /cxb/{client/assets → assets}/tailwind-variants-Cj20BoQ3.js +0 -0
- /cxb/{client/assets → assets}/toast-B9WDyfyI.js +0 -0
- /cxb/{client/assets → assets}/tslib-pJfR_DrR.js +0 -0
- /cxb/{client/assets → assets}/typewriter-editor-DkTVIJdm.js +0 -0
- /cxb/{client/assets → assets}/user-DeK_NB5v.js +0 -0
- /cxb/{client/assets → assets}/vanilla-picker-l5rcX3cq.js +0 -0
- /cxb/{client/assets → assets}/w3c-keyname-Vcq4gwWv.js +0 -0
- /cxb/{client/config.json → config.json} +0 -0
- /cxb/{client/config.sample.json → config.sample.json} +0 -0
- /cxb/{client/favicon.ico → favicon.ico} +0 -0
- /cxb/{client/favicon.png → favicon.png} +0 -0
- /cxb/{client/index.html → index.html} +0 -0
- {dmart-1.4.32.dist-info → dmart-1.4.35.dist-info}/WHEEL +0 -0
- {dmart-1.4.32.dist-info → dmart-1.4.35.dist-info}/entry_points.txt +0 -0
- {dmart_migrations/versions → pytests}/__init__.py +0 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import time
|
|
2
|
+
from uuid import uuid4
|
|
3
|
+
import pytest
|
|
4
|
+
import os
|
|
5
|
+
import json
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from sqlmodel import Session, create_engine, text, SQLModel
|
|
8
|
+
from data_adapters.sql.create_tables import Attachments, Entries, Spaces, Histories
|
|
9
|
+
from sqlalchemy.exc import OperationalError
|
|
10
|
+
from utils.settings import settings
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def subpath_checker(subpath: str):
|
|
14
|
+
if subpath.endswith("/"):
|
|
15
|
+
subpath = subpath[:-1]
|
|
16
|
+
if not subpath.startswith("/"):
|
|
17
|
+
subpath = '/' + subpath
|
|
18
|
+
return subpath
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def connect_with_retry(engine, retries=5, delay=2):
|
|
22
|
+
"""
|
|
23
|
+
Try to connect to the database with retries.
|
|
24
|
+
"""
|
|
25
|
+
for attempt in range(retries):
|
|
26
|
+
try:
|
|
27
|
+
with engine.connect() as _:
|
|
28
|
+
print(f"Connected to the database on attempt {attempt + 1}")
|
|
29
|
+
return
|
|
30
|
+
except OperationalError as e:
|
|
31
|
+
print(f"Connection attempt {attempt + 1} failed: {e}")
|
|
32
|
+
time.sleep(delay)
|
|
33
|
+
raise Exception("Could not connect to the database after multiple attempts")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@pytest.fixture(scope="module")
|
|
37
|
+
def setup_database():
|
|
38
|
+
if settings.active_data_db == "file":
|
|
39
|
+
pytest.skip("Skipping test for file-based database")
|
|
40
|
+
return
|
|
41
|
+
|
|
42
|
+
# Use the settings to connect with the main `postgres` user
|
|
43
|
+
postgresql_url = f"{settings.database_driver.replace('+asyncpg','+psycopg')}://{settings.database_username}:{settings.database_password}@{settings.database_host}:{settings.database_port}"
|
|
44
|
+
engine = create_engine(f"{postgresql_url}/postgres", echo=False, isolation_level="AUTOCOMMIT")
|
|
45
|
+
|
|
46
|
+
# Create the database
|
|
47
|
+
with Session(engine) as session:
|
|
48
|
+
try:
|
|
49
|
+
session.exec(text(f"DROP DATABASE IF EXISTS {settings.database_name}"))
|
|
50
|
+
session.commit()
|
|
51
|
+
session.exec(text(f"CREATE DATABASE {settings.database_name}"))
|
|
52
|
+
session.commit() # Ensure the transaction is fully committed
|
|
53
|
+
print(f"Database {settings.database_name} created successfully")
|
|
54
|
+
except Exception as e:
|
|
55
|
+
print(f"Database creation failed: {e}")
|
|
56
|
+
|
|
57
|
+
# Add a small delay to ensure the database is fully ready
|
|
58
|
+
time.sleep(2)
|
|
59
|
+
|
|
60
|
+
yield
|
|
61
|
+
|
|
62
|
+
# Drop the database after tests
|
|
63
|
+
with Session(engine) as session:
|
|
64
|
+
try:
|
|
65
|
+
session.exec(text(f"DROP DATABASE IF EXISTS {settings.database_name}"))
|
|
66
|
+
session.commit()
|
|
67
|
+
print(f"Database {settings.database_name} dropped successfully")
|
|
68
|
+
except Exception as e:
|
|
69
|
+
print(f"Database deletion failed: {e}")
|
|
70
|
+
|
|
71
|
+
engine.dispose()
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@pytest.fixture(scope="module")
|
|
75
|
+
def setup_environment(setup_database):
|
|
76
|
+
if settings.active_data_db == "file":
|
|
77
|
+
pytest.skip("Skipping test for file-based database")
|
|
78
|
+
return
|
|
79
|
+
|
|
80
|
+
# Set the database name from settings
|
|
81
|
+
driver = settings.database_driver.replace('+asyncpg', '+psycopg')
|
|
82
|
+
postgresql_url = f"{driver}://{settings.database_username}:{settings.database_password}@{settings.database_host}:{settings.database_port}"
|
|
83
|
+
engine = create_engine(f"{postgresql_url}/{settings.database_name}", echo=False)
|
|
84
|
+
|
|
85
|
+
# Retry connecting to the newly created database
|
|
86
|
+
connect_with_retry(engine)
|
|
87
|
+
|
|
88
|
+
# Generate tables after ensuring connection
|
|
89
|
+
postgresql_url = f"{driver}://{settings.database_username}:{settings.database_password}@{settings.database_host}:{settings.database_port}/{settings.database_name}"
|
|
90
|
+
engine = create_engine(postgresql_url, echo=False)
|
|
91
|
+
SQLModel.metadata.create_all(engine)
|
|
92
|
+
|
|
93
|
+
yield engine
|
|
94
|
+
|
|
95
|
+
engine.dispose()
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def test_json_to_db_migration(setup_environment):
|
|
99
|
+
if settings.active_data_db == "file":
|
|
100
|
+
pytest.skip("Skipping test for file-based database")
|
|
101
|
+
return
|
|
102
|
+
|
|
103
|
+
engine = setup_environment
|
|
104
|
+
|
|
105
|
+
# Create a complex mock directory structure and files for different entry types
|
|
106
|
+
os.makedirs('/tmp/test_space/.dm', exist_ok=True)
|
|
107
|
+
with open('/tmp/test_space/.dm/meta.space.json', 'w') as f:
|
|
108
|
+
json.dump({"key": "value"}, f)
|
|
109
|
+
|
|
110
|
+
# Create more directories and files for the migration
|
|
111
|
+
os.makedirs('/tmp/test_space/dir1', exist_ok=True)
|
|
112
|
+
with open('/tmp/test_space/dir1/history.jsonl', 'w') as f:
|
|
113
|
+
f.write(json.dumps({"key": "history"}) + '\n')
|
|
114
|
+
|
|
115
|
+
# Create attachments folder and files
|
|
116
|
+
os.makedirs('/tmp/test_space/dir1/attachments', exist_ok=True)
|
|
117
|
+
with open('/tmp/test_space/dir1/attachments/meta.attachments.json', 'w') as f:
|
|
118
|
+
json.dump({
|
|
119
|
+
"uuid": str(uuid4()),
|
|
120
|
+
"space_name": "test_space",
|
|
121
|
+
"subpath": "/dir1",
|
|
122
|
+
"acl": [],
|
|
123
|
+
"relationships": [],
|
|
124
|
+
"payload": {"body": "attachment content"}
|
|
125
|
+
}, f)
|
|
126
|
+
|
|
127
|
+
# Create ticket-related file
|
|
128
|
+
with open('/tmp/test_space/dir1/meta.ticket.json', 'w') as f:
|
|
129
|
+
json.dump({
|
|
130
|
+
"state": "open",
|
|
131
|
+
"is_open": True,
|
|
132
|
+
"reporter": "user1",
|
|
133
|
+
"subpath": "/dir1/ticket"
|
|
134
|
+
}, f)
|
|
135
|
+
|
|
136
|
+
# Create user meta file
|
|
137
|
+
with open('/tmp/test_space/.dm/meta.user.json', 'w') as f:
|
|
138
|
+
json.dump({
|
|
139
|
+
"resource_type": "user",
|
|
140
|
+
"firebase_token": "firebase_token",
|
|
141
|
+
"language": "en"
|
|
142
|
+
}, f)
|
|
143
|
+
|
|
144
|
+
# Create role meta file
|
|
145
|
+
with open('/tmp/test_space/.dm/meta.role.json', 'w') as f:
|
|
146
|
+
json.dump({
|
|
147
|
+
"resource_type": "role",
|
|
148
|
+
"permissions": ["read", "write"]
|
|
149
|
+
}, f)
|
|
150
|
+
|
|
151
|
+
# Create permission meta file
|
|
152
|
+
with open('/tmp/test_space/.dm/meta.permission.json', 'w') as f:
|
|
153
|
+
json.dump({
|
|
154
|
+
"resource_type": "permission",
|
|
155
|
+
"subpaths": {"read": "/read", "write": "/write"},
|
|
156
|
+
"resource_types": ["user", "role"]
|
|
157
|
+
}, f)
|
|
158
|
+
|
|
159
|
+
# Run the migration script
|
|
160
|
+
try:
|
|
161
|
+
with Session(engine) as session:
|
|
162
|
+
for root, dirs, _ in os.walk('/tmp/test_space'):
|
|
163
|
+
tmp = root.replace('/tmp/test_space', '')
|
|
164
|
+
if tmp == '':
|
|
165
|
+
continue
|
|
166
|
+
if tmp[0] == '/':
|
|
167
|
+
tmp = tmp[1:]
|
|
168
|
+
space_name = tmp.split('/')[0]
|
|
169
|
+
subpath = '/'.join(tmp.split('/')[1:])
|
|
170
|
+
if space_name == '..':
|
|
171
|
+
continue
|
|
172
|
+
|
|
173
|
+
if space_name.startswith('.git'):
|
|
174
|
+
continue
|
|
175
|
+
|
|
176
|
+
if subpath == '' or subpath == '/':
|
|
177
|
+
subpath = '/'
|
|
178
|
+
p = os.path.join(root, '.dm', 'meta.space.json')
|
|
179
|
+
entry = {}
|
|
180
|
+
if Path(p).is_file():
|
|
181
|
+
entry = json.load(open(p))
|
|
182
|
+
entry['space_name'] = space_name
|
|
183
|
+
entry['subpath'] = '/'
|
|
184
|
+
session.add(Spaces.model_validate(entry))
|
|
185
|
+
continue
|
|
186
|
+
|
|
187
|
+
subpath = subpath.replace('.dm', '')
|
|
188
|
+
if subpath != '/' and subpath.endswith('/'):
|
|
189
|
+
subpath = subpath[:-1]
|
|
190
|
+
|
|
191
|
+
if subpath == '':
|
|
192
|
+
subpath = '/'
|
|
193
|
+
|
|
194
|
+
for dir in dirs:
|
|
195
|
+
for file in os.listdir(os.path.join(root, dir)):
|
|
196
|
+
if not file.startswith('meta'):
|
|
197
|
+
if file == 'history.jsonl':
|
|
198
|
+
lines = open(os.path.join(root, dir, file), 'r').readlines()
|
|
199
|
+
for line in lines:
|
|
200
|
+
history = json.loads(line)
|
|
201
|
+
history['shortname'] = dir
|
|
202
|
+
history['space_name'] = space_name
|
|
203
|
+
history['subpath'] = subpath_checker(subpath)
|
|
204
|
+
session.add(Histories.model_validate(history))
|
|
205
|
+
continue
|
|
206
|
+
|
|
207
|
+
p = os.path.join(root, dir, file)
|
|
208
|
+
if Path(p).is_file():
|
|
209
|
+
if 'attachments' in p:
|
|
210
|
+
_attachment = json.load(open(os.path.join(root, dir, file)))
|
|
211
|
+
_attachment['space_name'] = space_name
|
|
212
|
+
_attachment['uuid'] = _attachment.get('uuid', uuid4())
|
|
213
|
+
_attachment['subpath'] = subpath_checker(_attachment['subpath'])
|
|
214
|
+
session.add(Attachments.model_validate(_attachment))
|
|
215
|
+
elif file.endswith('.json'):
|
|
216
|
+
entry = json.load(open(p))
|
|
217
|
+
entry['space_name'] = space_name
|
|
218
|
+
entry['subpath'] = subpath_checker(subpath)
|
|
219
|
+
session.add(Entries.model_validate(entry))
|
|
220
|
+
session.commit()
|
|
221
|
+
assert True # Assert that the migration completes without error
|
|
222
|
+
except Exception as e:
|
|
223
|
+
print(f"Migration failed: {e}")
|
|
224
|
+
assert False # Fail the test if there is any exception
|
|
225
|
+
|
|
226
|
+
# Clean up the mock directory structure
|
|
227
|
+
os.remove('/tmp/test_space/.dm/meta.space.json')
|
|
228
|
+
os.remove('/tmp/test_space/dir1/history.jsonl')
|
|
229
|
+
os.remove('/tmp/test_space/dir1/attachments/meta.attachments.json')
|
|
230
|
+
os.remove('/tmp/test_space/dir1/meta.ticket.json')
|
|
231
|
+
os.remove('/tmp/test_space/.dm/meta.user.json')
|
|
232
|
+
os.remove('/tmp/test_space/.dm/meta.role.json')
|
|
233
|
+
os.remove('/tmp/test_space/.dm/meta.permission.json')
|
|
234
|
+
os.rmdir('/tmp/test_space/dir1/attachments')
|
|
235
|
+
os.rmdir('/tmp/test_space/.dm')
|
|
236
|
+
os.rmdir('/tmp/test_space/dir1')
|
|
237
|
+
os.rmdir('/tmp/test_space')
|
pytests/service_test.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from api.user.service import gen_alphanumeric
|
|
2
|
+
import pytest
|
|
3
|
+
|
|
4
|
+
@pytest.mark.run(order=9)
|
|
5
|
+
def test_gen_alphanumeric_length():
|
|
6
|
+
# Test default length
|
|
7
|
+
result = gen_alphanumeric()
|
|
8
|
+
assert len(result) == 16, "Default length should be 16"
|
|
9
|
+
|
|
10
|
+
# Test custom length
|
|
11
|
+
length = 32
|
|
12
|
+
result = gen_alphanumeric(length)
|
|
13
|
+
assert len(result) == length, f"Length should be {length}"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@pytest.mark.run(order=9)
|
|
17
|
+
def test_gen_alphanumeric_characters():
|
|
18
|
+
result = gen_alphanumeric()
|
|
19
|
+
assert all(c.isalnum() for c in result), "Result should only contain alphanumeric characters"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@pytest.mark.run(order=9)
|
|
23
|
+
def test_gen_alphanumeric_unique():
|
|
24
|
+
num_samples = 100
|
|
25
|
+
samples = {gen_alphanumeric() for _ in range(num_samples)}
|
|
26
|
+
assert len(samples) == num_samples, "Generated strings should be unique"
|
pytests/test_info.py
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
from httpx import AsyncClient
|
|
2
|
+
from pytests.base_test import get_superman_cookie
|
|
3
|
+
from fastapi import status
|
|
4
|
+
import pytest
|
|
5
|
+
from utils.internal_error_code import InternalErrorCode
|
|
6
|
+
from utils.jwt import sign_jwt
|
|
7
|
+
from utils.settings import settings
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@pytest.mark.run(order=6)
|
|
12
|
+
@pytest.mark.anyio
|
|
13
|
+
async def test_info_me(client: AsyncClient) -> None:
|
|
14
|
+
|
|
15
|
+
client.cookies.set("auth_token", await get_superman_cookie(client))
|
|
16
|
+
response = await client.get("/info/me")
|
|
17
|
+
assert response.status_code == status.HTTP_200_OK
|
|
18
|
+
json_response = response.json()
|
|
19
|
+
assert json_response["status"] == "success"
|
|
20
|
+
|
|
21
|
+
@pytest.mark.run(order=6)
|
|
22
|
+
@pytest.mark.anyio
|
|
23
|
+
async def test_info_manifest(client: AsyncClient) -> None:
|
|
24
|
+
|
|
25
|
+
client.cookies.set("auth_token", await get_superman_cookie(client))
|
|
26
|
+
response = await client.get("/info/manifest")
|
|
27
|
+
assert response.status_code == status.HTTP_200_OK
|
|
28
|
+
json_response = response.json()
|
|
29
|
+
assert json_response["status"] == "success"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@pytest.mark.run(order=6)
|
|
33
|
+
@pytest.mark.anyio
|
|
34
|
+
async def test_get_settings_should_pass(client: AsyncClient) -> None:
|
|
35
|
+
client.cookies.set("auth_token", await get_superman_cookie(client))
|
|
36
|
+
response = await client.get("/info/settings")
|
|
37
|
+
assert response.status_code == status.HTTP_200_OK
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# @pytest.mark.run(order=6)
|
|
41
|
+
# @pytest.mark.anyio
|
|
42
|
+
# async def test_in_loop_tasks(client: AsyncClient) -> None:
|
|
43
|
+
# client.cookies.set("auth_token", await get_superman_cookie(client))
|
|
44
|
+
# response = await client.get("/info/in-loop-tasks")
|
|
45
|
+
# assert response.status_code == status.HTTP_200_OK
|
|
46
|
+
# json_response = response.json()
|
|
47
|
+
# assert json_response["status"] == "success"
|
|
48
|
+
# assert "tasks_count" in json_response["attributes"]
|
|
49
|
+
# assert isinstance(json_response["attributes"]["tasks_count"], int)
|
|
50
|
+
# assert "tasks" in json_response["attributes"]
|
|
51
|
+
# assert isinstance(json_response["attributes"]["tasks"], list)
|
|
52
|
+
# for task in json_response["attributes"]["tasks"]:
|
|
53
|
+
# assert "name" in task
|
|
54
|
+
# assert "coroutine" in task
|
|
55
|
+
# assert "stack" in task
|
pytests/test_status.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
# from pytests.base_test import client
|
|
3
|
+
from fastapi import status
|
|
4
|
+
from httpx import AsyncClient
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
7
|
+
# @pytest.mark.asyncio(scope="session")
|
|
8
|
+
@pytest.mark.anyio
|
|
9
|
+
async def test_sanity(client: AsyncClient) -> None:
|
|
10
|
+
# async with my_client as client:
|
|
11
|
+
response = await client.get("/")
|
|
12
|
+
assert response.status_code == status.HTTP_200_OK
|
|
13
|
+
json_response = response.json()
|
|
14
|
+
assert json_response["status"] == "success"
|
|
15
|
+
|
dmart-1.4.32.dist-info/RECORD
DELETED
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
bundler.py,sha256=MDTUTVS0WL7gb-i1rDcS4i37KTqaW88TluL4L3rwjRw,1817
|
|
2
|
-
data_generator.py,sha256=CnE-VHEeX7-lAXtqCgbRqR9WHjTuOgeiZcviYrHAmho,2287
|
|
3
|
-
dmart.py,sha256=9tM6DmJUzkngTYWdnG96-yuuqMmMmqxVrEYmvsFYLOE,24445
|
|
4
|
-
get_settings.py,sha256=Sbe2WCoiK398E7HY4SNLfDN_GmE8knR4M-YJWF31jcg,153
|
|
5
|
-
main.py,sha256=KZGhIL6AnEm5ZAPy4IvhBDpzSTjuodilV7NafNOyhzM,19676
|
|
6
|
-
migrate.py,sha256=hn1MZoVby_Jjqhc7y3CrLcGD619QmVZv3PONNvO7VKQ,665
|
|
7
|
-
password_gen.py,sha256=xjx8wi105ZYvhLBBQj7_rugACpxifGXHse6f7YlGXWQ,196
|
|
8
|
-
run_notification_campaign.py,sha256=ZCvHfaimK4W6q4XuHs2r6wavMGipYYw4aUkNlxmGUd8,2652
|
|
9
|
-
scheduled_notification_handler.py,sha256=m26TryqHuvXR5PUPvzY9nFnpJpfbsuRjc_Q6wHdxvE8,4643
|
|
10
|
-
schema_migration.py,sha256=a1w3c-fSm95MVWFzobgy0AxIbhbzMDSfD46easTmwKE,6132
|
|
11
|
-
schema_modulate.py,sha256=vB7NxvqghqNpFe__p0ll03WsvNftzxBbQ6UXB2UfxNU,6454
|
|
12
|
-
set_admin_passwd.py,sha256=Ei8wnoJ_UDHIXmMb-E_dd_NqyM6Gt5AgJPJ4fAxARXI,1950
|
|
13
|
-
sync.py,sha256=FlmubtlnFaxtZkbRV1-eyS_Sx5KBRvWyIZjvd0Tiar4,7339
|
|
14
|
-
websocket.py,sha256=Q8WUTvOTBHKP5xy5wim8yn0t-BfjrPwx7J_6vbzAm1A,7576
|
|
15
|
-
api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
api/info/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
api/info/router.py,sha256=sQZZor7A-uDzsJX39aqEA7bMZOJ-WTitYeFvVNWfaHw,3938
|
|
18
|
-
api/managed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
api/managed/router.py,sha256=0xfJ3NXV3XHyG8yWLEECBJt-XppymOxYuMDvQJdO1MI,50865
|
|
20
|
-
api/managed/utils.py,sha256=IqgFVHVfNubYOx5i9YoQjVqbUbaveIrqfOfTFvV42BA,74227
|
|
21
|
-
api/public/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
-
api/public/router.py,sha256=TrraWs2LGL_c_JRDbvS8OHm3fJ-ZKF7o4El7wvjV4Mk,24753
|
|
23
|
-
api/qr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
api/qr/router.py,sha256=Ru7UT_iQS6mFwE1bCPPrusSQfFgoV_u6pjZJ0gArE7g,3870
|
|
25
|
-
api/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
-
api/user/router.py,sha256=B59HQPwmwgEfYIlF3_XBNaVBlT4PWqMJiUlUvEN69Vo,51719
|
|
27
|
-
api/user/service.py,sha256=-iQpcBVPTDiLE_xOf87Ni0oSQDtmALAXEwU4IgSvnJk,8463
|
|
28
|
-
api/user/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
-
api/user/model/errors.py,sha256=rhcIcbAIk_7rs5lxdgcsf7SWFGmC9QLsgc67x7S6CKA,299
|
|
30
|
-
api/user/model/requests.py,sha256=MazMirg7wQoUm4qvnm_EAB_gJIy3YxvYYqNyU3fZJc0,5025
|
|
31
|
-
api/user/model/responses.py,sha256=0vbigspq_aBd1JS6hEm13BnG7Hm7EIiWBZ6xz3d5hmE,202
|
|
32
|
-
config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
-
config/channels.json,sha256=GepystGi0h_1fuakC_gdIc-YYxyy-a4TI619ygIpyyM,156
|
|
34
|
-
config/notification.json,sha256=esrOaMUIqfcCHB0Tawp3t4cu7DQAA15X12OS-Gyenb0,361
|
|
35
|
-
cxb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
-
cxb/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
-
cxb/client/config.json,sha256=WvhCcnJ9-uQ2raPuRBRSGO3iD7Hcaf8Cy49EXUu3KQw,358
|
|
38
|
-
cxb/client/config.sample.json,sha256=fTYLbnTiUdbT_F7rcwI7CLSZ_KoX8EflfuyswRGW2x0,355
|
|
39
|
-
cxb/client/favicon.ico,sha256=CD2FYyYYFNAbH7lGPnM5-2asMmhf-kwitAp99Kh0Wmc,4286
|
|
40
|
-
cxb/client/favicon.png,sha256=gbSWS2UiKrUcy5Jt4gcncDrE5yvfAS00OgYzdNxPxlk,4164
|
|
41
|
-
cxb/client/index.html,sha256=J_7uaGXP02rNLSvJ4Poyr5G7TZt8W0Br-EWQlYEeXi0,1622
|
|
42
|
-
cxb/client/assets/@codemirror-Rn7_6DkE.js,sha256=lE9KsREWfszCrh0SBu7CKi3k1OiDzBrIeNO_S5PYRcM,342674
|
|
43
|
-
cxb/client/assets/@edraj-CS4NwVbD.js,sha256=zndm--w-VH0vIAjb2K_MHp5oSC-khzxT8Evj1Dl_2-c,9293
|
|
44
|
-
cxb/client/assets/@floating-ui-BwwcF-xh.js,sha256=K4lsJw_hrkV0vq1uguBTS_GxONRbsFtlBjX4pagaOwg,17129
|
|
45
|
-
cxb/client/assets/@formatjs-yKEsAtjs.js,sha256=bwa2AS3AZNFoUsMafb6wKHA15W9GldY3Kt61ZObX02U,33632
|
|
46
|
-
cxb/client/assets/@fortawesome-DRW1UCdr.js,sha256=XxmEJ7SxFU5lm4fFq2B0t6oAFpvInLfZbwrds7T9kM8,18810
|
|
47
|
-
cxb/client/assets/@jsonquerylang-laKNoFFq.js,sha256=z3m86cWxHoliU-BL-mn-U7ob8B1cV1lzyC-Q7DITo2w,8464
|
|
48
|
-
cxb/client/assets/@lezer-za4Q-8Ew.js,sha256=6kTYHAkwA6DYI_m9taUHq0iqetL5AbmBt43KB0s2Pxg,54631
|
|
49
|
-
cxb/client/assets/@marijn-DXwl3gUT.js,sha256=ONjPnhK4okY91E_qSZTqZuKrYU97xaqPdt5Vde2cgcI,2312
|
|
50
|
-
cxb/client/assets/@popperjs-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
51
|
-
cxb/client/assets/@replit--ERk53eB.js,sha256=w2wSGTctSSsvB0PLKCbBVJUc4LRqyXbAFfApDw8DrPI,4586
|
|
52
|
-
cxb/client/assets/@roxi-CGMFK4i8.js,sha256=a9e-nCrgDd2UQieodqFb8O1oMsoJ9GGg9pZ2pFG7vSE,49989
|
|
53
|
-
cxb/client/assets/@typewriter-cCzskkIv.js,sha256=kyXdd1BwqHKx7CIB8Up_1AblBsI5ViLxkwjWN-bzcfw,21047
|
|
54
|
-
cxb/client/assets/@zerodevx-BlBZjKxu.js,sha256=u3olMch61ywj4FnmXTSswD1myRH_rHI0dQMCNogCAH0,3883
|
|
55
|
-
cxb/client/assets/@zerodevx-CVEpe6WZ.css,sha256=BkcVDS4u4ljfIXhn6xv4h5Pld01evCI_ebMKCxpK8i4,1976
|
|
56
|
-
cxb/client/assets/BreadCrumbLite-DAhOx38v.js,sha256=_zhm_Sls-tayWdYobXeXCA6uxNSrVsLnAhfyPCTyHH8,1949
|
|
57
|
-
cxb/client/assets/EntryRenderer-25YDhRen.js,sha256=iUbBmlD02BkiMNjS68jt8sHtzVnwAsuvadVDXBwVBS8,64047
|
|
58
|
-
cxb/client/assets/EntryRenderer-DXytdFp9.css,sha256=8J5fh7_foC06CVV6Qk7UYvxXKqTrFOqQ4isbyJ-gABY,496
|
|
59
|
-
cxb/client/assets/ListView-BpAycA2h.js,sha256=MKEI90xQ07Cmyo6KuJLR7yxOi5CQt0cpU7kCwTMxtVM,134226
|
|
60
|
-
cxb/client/assets/ListView-U8of-_c-.css,sha256=sPIUBfAsMEwhNqvGgGf_oD09XUR5hT8PWk_OtVEwMgI,1288
|
|
61
|
-
cxb/client/assets/Prism--hMplq-p.js,sha256=wzk_GRGPAnTHIenvdCuh_qqHFCeCKco2OCoFinBUesw,587
|
|
62
|
-
cxb/client/assets/Prism-Uh6uStUw.css,sha256=_wHCkOjMWX__hXLr6MjadiXCj2dBxIQFAhkSLAhHwSA,6165
|
|
63
|
-
cxb/client/assets/Table2Cols-BsbwicQm.js,sha256=w6w37qzrdh3f-8waIUDnwPk0MDa8dJBrrG0Z3A8uAAk,1410
|
|
64
|
-
cxb/client/assets/_..-BvT6vdHa.css,sha256=u-3Pj3A2tQeUNBIItE_qki2Lk4GBISmHRs7957cGP30,275
|
|
65
|
-
cxb/client/assets/_...404_-fuLH_rX9.js,sha256=9oGBvAECq9eMcTAZG-cznYAXcM2WaBu4G5wPoTt53uY,684
|
|
66
|
-
cxb/client/assets/_...fallback_-Ba_NLmAE.js,sha256=leHVZijlVjIaqzYUCCTIFDFrFsVcS2NsxgVTW58OhBg,123
|
|
67
|
-
cxb/client/assets/_module-Bfk8MiCs.js,sha256=Zh6tAXTmBj4kvrs5ojFFC6N45pasJviz6lHz5TEy3as,3793
|
|
68
|
-
cxb/client/assets/_module-CEW0D5oI.js,sha256=B2uyRT7DxaK10V58YhhQNZtV-8bkmV9EbAK6WZhHwgw,7899
|
|
69
|
-
cxb/client/assets/_module-Dgq0ZVtz.js,sha256=-_CkmFKVsif9U2B0uVLfmXuDp3GJS2iY4sAP1y_2rvQ,11226
|
|
70
|
-
cxb/client/assets/ajv-Cpj98o6Y.js,sha256=liU3m63UhJYQ3-bBVFPN8MAHEmTJDu8Xcwf6wJTSqmw,236
|
|
71
|
-
cxb/client/assets/axios-CG2WSiiR.js,sha256=URKIJZfepkPrQwK1aPXLhg4f5cGLhk6c0tVUS5eFFB0,36287
|
|
72
|
-
cxb/client/assets/clsx-B-dksMZM.js,sha256=x7hDvCu6RhEQ5d35FtnEAYCjg4BM5zZYcw7EblGW0v0,374
|
|
73
|
-
cxb/client/assets/codemirror-wrapped-line-indent-DPhKvljI.js,sha256=kn9kuXsyPkjimYpjkc3KyXSOral3p4v3gbQw5SbNMMY,1591
|
|
74
|
-
cxb/client/assets/compare-C3AjiGFR.js,sha256=L2wU3DxEeQq-gheMWChs4IX2Las1HLWxAF4HWcpvSZo,8744
|
|
75
|
-
cxb/client/assets/compute-scroll-into-view-Bl8rNFhg.js,sha256=5DonV_EZ7Iwbtu8sT17P3aoourk-WRBAdlAsaNh_mDA,2943
|
|
76
|
-
cxb/client/assets/consolite-DlCuI0F9.js,sha256=oSh3Gbte0Iogkiczrf8Ei0pWKu75WAakY33Z9Kix7GA,3079
|
|
77
|
-
cxb/client/assets/crelt-C8TCjufn.js,sha256=v5UZ6-BdG7hN-EZniG3z0-gaMx1rOdzsjqIiNrRUp8s,623
|
|
78
|
-
cxb/client/assets/date-fns-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
79
|
-
cxb/client/assets/deepmerge-rn4rBaHU.js,sha256=mq9vJj-3sJY_n_VL9dyNkcgD9eD-F7d0vuka-mPJUnY,1675
|
|
80
|
-
cxb/client/assets/dmart_services-AL6-IdDE.js,sha256=RyyNwg7hpN4eTONXb4NOoQ9QTDx5meSSuSMprYkk7m8,1783
|
|
81
|
-
cxb/client/assets/downloadFile-D08i0YDh.js,sha256=pdNEGMBhyU01Y_vVX1OEzxWC7Ktg0T2vwW6VfdYjf0Q,247
|
|
82
|
-
cxb/client/assets/easy-signal-BiPFIK3O.js,sha256=2J65d_BBehKW7Hb64qwX3iCZDes2LsAjYlsRHuJTEHc,108
|
|
83
|
-
cxb/client/assets/esm-env-rsSWfq8L.js,sha256=scv4WZ555272218bU3lLaHkEQ7dl-wFrvbn0MlQAqKA,27
|
|
84
|
-
cxb/client/assets/export-OF_rTiXu.js,sha256=VjmlbOOhE2eGtbPQSbaz395EFtoMJLThpTtFze7Hcf8,4146
|
|
85
|
-
cxb/client/assets/fast-deep-equal-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
86
|
-
cxb/client/assets/fast-diff-C-IidNf4.js,sha256=3QejtPCU1VzP2FM7RY5yFvp4QseK438MIrhUa33u7ko,7785
|
|
87
|
-
cxb/client/assets/fast-uri-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
88
|
-
cxb/client/assets/flowbite-svelte-BLvjb-sa.js,sha256=vRreerVWabyzTubQPDBuxDvgV7M8RlDWIKocxzMQiQ0,245889
|
|
89
|
-
cxb/client/assets/flowbite-svelte-CD54FDqW.css,sha256=n1HDAUq6e-IogOmdk3gYW4E8TK-yE3Gh8wgp5FdOn90,63
|
|
90
|
-
cxb/client/assets/flowbite-svelte-icons-BI8GVhw_.js,sha256=cp8Lg64HqWR8_4XS3q4xOAV3hztu4BsJPBhgysMRTtU,80766
|
|
91
|
-
cxb/client/assets/github-slugger-CQ4oX9Ud.js,sha256=1sye3A-ozGOvdFYnerReUKpwwAeCjBilw-ZMIbxgRAI,8573
|
|
92
|
-
cxb/client/assets/global-igKv-1g9.js,sha256=9AnwcOz6vUYKXcaBuqOCag8rxRCSVDwmIHG8irKBIUM,347
|
|
93
|
-
cxb/client/assets/hookar-BMRD9G9H.js,sha256=_Dzjp-0cmaseuT5CcILxOLX5a4QsMWHgS3bcAC5oH64,519
|
|
94
|
-
cxb/client/assets/immutable-json-patch-DtRO2E_S.js,sha256=I1LmEOX8J21wFhrrAtIV6svx32i-j5TJpso1CpzEEik,5600
|
|
95
|
-
cxb/client/assets/import-1vE3gBat.js,sha256=9T_SMx38Y7DXPtMi72n0LBsPbMPvlkQquZ3zOEp7zQk,3106
|
|
96
|
-
cxb/client/assets/index-B-eTh-ZX.js,sha256=SoqSuq7zLpebuTstKO5Tfwz3fNEnbgzdMHJnLV8RCHQ,9824
|
|
97
|
-
cxb/client/assets/index-BVyxzKtH.js,sha256=BoEJccSRRZecpdEomQSlNGAVVp6CEEkuz1xUVWXKORk,6015
|
|
98
|
-
cxb/client/assets/index-BdeNM69f.js,sha256=gkNccueAx5s9vUKp3ZE31Xg2wL4xfipeQ73y27N-61c,2035
|
|
99
|
-
cxb/client/assets/index-C6cPO4op.js,sha256=o_KVUiHGFlCJN96xkRu9orzLdrYUVTn_nJy9M0SQKrM,3621
|
|
100
|
-
cxb/client/assets/index-CC-A1ipE.js,sha256=dfVwbYUl2GzaPaRcm9bvcm3c0bi8WQj9RsSYaZneH2w,412
|
|
101
|
-
cxb/client/assets/index-CTxJ-lDp.js,sha256=CMXV0Oe3QRi4ITetl3tspH_h_4Wv8cG17-3V0PSN-2s,2821
|
|
102
|
-
cxb/client/assets/index-Cd-F5j_k.js,sha256=3a3gWjjYVTv16DAeDvUZPwFIqSXU13aVefFTWGLUx7E,3250
|
|
103
|
-
cxb/client/assets/index-D742rwaM.js,sha256=ivvY4EhQ0-ADpy1fu8TQtZuS6Qe707-SWWRWY-FWYJg,3381
|
|
104
|
-
cxb/client/assets/index-DTfhnhwd.js,sha256=YKLsTYhS7k2f1QwXRCyYdRn2vB_mwzsqinT1of7dcnc,354
|
|
105
|
-
cxb/client/assets/index-DdXRK7n9.js,sha256=UkW9YuMZ0_hZ3q9llWmO0UpkP4qNmXYMl1lLqmmZwQE,4047
|
|
106
|
-
cxb/client/assets/index-DtiCmB4o.js,sha256=nv7dVMmo1vex5ih5mMC9MNLLMGuCmy_ktOa1j4rXQ0M,1976
|
|
107
|
-
cxb/client/assets/index-NBrXBlLA.css,sha256=2mHbGZHluiEeZiiiubPFD2dGd6eL59WUa2qV8eSQqXs,376846
|
|
108
|
-
cxb/client/assets/index-ac-Buu_H.js,sha256=3tSelUaTXqOQbjivh39F9R8AoTY-PvFD4uGbFU_eEeQ,33755
|
|
109
|
-
cxb/client/assets/index-iYkH7C67.js,sha256=BFI8j9CqWYj8gKyfGZZp7dIrqoA7-Bnd9Za1-mTiLG0,3498
|
|
110
|
-
cxb/client/assets/info-B986lRiM.js,sha256=28efQ_ywUNQ5Od__oXFskmVy9ZWR48DgnuNs1bvoqlg,2226
|
|
111
|
-
cxb/client/assets/intl-messageformat-Dc5UU-HB.js,sha256=-5X21qzJD7TmWO2-DWDdxF8tql-Xdcq2QoUkBY54G00,6630
|
|
112
|
-
cxb/client/assets/jmespath-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
113
|
-
cxb/client/assets/json-schema-traverse-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
114
|
-
cxb/client/assets/json-source-map-DRgZidqy.js,sha256=2MWN6aGupPEd3Uk0Nki7JeURX8opsBCdC36BuxJRakI,4281
|
|
115
|
-
cxb/client/assets/jsonpath-plus-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
116
|
-
cxb/client/assets/jsonrepair-B30Dx381.js,sha256=HddBNX0dIMqRHTFT0VtfF33a4JgvMp9iCDYFWs9YGZs,6639
|
|
117
|
-
cxb/client/assets/lodash-es-DZVAA2ox.js,sha256=BvwNIFkh9lENGWunPRiHX9XxWJXVp17TiHEkaLLRpn0,25088
|
|
118
|
-
cxb/client/assets/marked-DKjyhwJX.js,sha256=qbydVfDQQTzCnxUXxgsroNwJZCzaf9QONfBPKmyOeEA,39673
|
|
119
|
-
cxb/client/assets/marked-gfm-heading-id-U5zO829x.js,sha256=237Q2hAeDNj3MAUeB3oQUy8Ov7oOYvvYprp2mt-HOU4,725
|
|
120
|
-
cxb/client/assets/marked-mangle-CDMeiHC6.js,sha256=WGaJNWouxQQExqwUZC5Dw3XvdVWQYHvEWXBtKXDDFHY,420
|
|
121
|
-
cxb/client/assets/memoize-one-BdPwpGay.js,sha256=jk5sfhm07ZMGDqLT1jqe27nsey2DIPbINp8U4bgP_QI,522
|
|
122
|
-
cxb/client/assets/natural-compare-lite-Bg2Xcf-o.js,sha256=9R5eHr3vTw4igb95odBTQ39r5ae-JGESqt0JQ27a1xc,808
|
|
123
|
-
cxb/client/assets/pagination-svelte-D5CyoiE_.js,sha256=-ppq9Dg-3wFdxmloAwaxmU4jU1HaypcXHo4OS6Dkk4s,4380
|
|
124
|
-
cxb/client/assets/pagination-svelte-v10nAbbM.css,sha256=7FtgdLOx-Wq4-TyF8CDDro2NF6jJwaNxbP3VI4g5uYI,3585
|
|
125
|
-
cxb/client/assets/plantuml-encoder-C47mzt9T.js,sha256=dpoe9r1lJmN-rbN-TAv2JnFgdWrFqExHUKs4JspxM7M,53041
|
|
126
|
-
cxb/client/assets/prismjs-DTUiLGJu.js,sha256=Nd_QmO8yEdbvZkliAEJjqktd3pFsLRRwJQt-Sd_pqXo,25847
|
|
127
|
-
cxb/client/assets/profile-BUf-tKMe.js,sha256=Ye_7fF8wYm6hR5u6KYRV1hMdweqW2q6_ZGpsNhrF1Y8,6527
|
|
128
|
-
cxb/client/assets/query-CNmXTsgf.js,sha256=iUE9_KIbABOdzswc4e8mcUs_PbDTo9V8nOmil0K7JSA,11363
|
|
129
|
-
cxb/client/assets/queryHelpers-C9iBWwqe.js,sha256=SkgdFEtjdTaD1cMVvKsdf5IQaMNUz74nTcj-pVDhQuw,501
|
|
130
|
-
cxb/client/assets/scroll-into-view-if-needed-KR58zyjF.js,sha256=Dw5KNhvWXAltb_qIh3e_f5ud5CQSxqHGHGlMf7BFGXc,897
|
|
131
|
-
cxb/client/assets/spaces-0oyGvpii.js,sha256=l9GvTbt-jiMyG8RGsCe3zAaYad0vQAhPjSBtdEp6htg,73
|
|
132
|
-
cxb/client/assets/style-mod-Bs6eFhZE.js,sha256=2P-Jrkn335imR7dWZ-lR1mVAhef16p050Fb80pVApVA,2194
|
|
133
|
-
cxb/client/assets/svelte-B2XmcTi_.js,sha256=bQk6kPr592D2TiwuMX7a6lt9YJB8UYeQMzvAtsxaP_s,61082
|
|
134
|
-
cxb/client/assets/svelte-awesome-COLlx0DN.css,sha256=5T3C0hIplhoXaGU3PJ-KPpPgB0uJTXN4n4eA21ChO3Y,448
|
|
135
|
-
cxb/client/assets/svelte-awesome-DhnMA6Q_.js,sha256=FEokMqwJ5WAhy_a2QNscieYkpS4mhAtR_NOPYzd7lD0,3858
|
|
136
|
-
cxb/client/assets/svelte-datatables-net-CY7LBj6I.js,sha256=PQZwUZsx3JjhI2W2Mwvsr4abTvEkbVl3osr3VpO-enk,4715
|
|
137
|
-
cxb/client/assets/svelte-floating-ui-BlS3sOAQ.js,sha256=lboSaEhc2oCTFSD5fkUaHSlxwtH8SGd4w3iLajcEySU,733
|
|
138
|
-
cxb/client/assets/svelte-i18n-CT2KkQaN.js,sha256=_LIkJDtwxRXQXVUvWxdc5z2BLNb4SwzSNyDE6lKWT3Q,7437
|
|
139
|
-
cxb/client/assets/svelte-jsoneditor-BzfX6Usi.css,sha256=5nvNv27PvUKYYgbHA1QpynYgdEoPCMoRzUlN8Ni2Fko,95514
|
|
140
|
-
cxb/client/assets/svelte-jsoneditor-CUGSvWId.js,sha256=IwxIH_L_eG1NdCYCtrkcEysxGflo66lL-SBa1cCYGMA,238060
|
|
141
|
-
cxb/client/assets/svelte-select-CegQKzqH.css,sha256=RW2XmPXMyUSPG672lEcT7Nhz1gaLfzTqoQjFG6Jb4zI,10652
|
|
142
|
-
cxb/client/assets/svelte-select-CjHAt_85.js,sha256=17YwjNfrW5d9x6GmOaHibTPVB_PZ7WBu9V_27MGcLrw,17176
|
|
143
|
-
cxb/client/assets/tailwind-merge-CJvxXMcu.js,sha256=PhlMjcf4Fs_9tgXtY97DfhD4crCI-S_zuZJACPZ4Q2E,25988
|
|
144
|
-
cxb/client/assets/tailwind-variants-Cj20BoQ3.js,sha256=Eofe15eg2u8pkjxy3tDaXMpq2etBq0Yzc15kSig_xEk,5489
|
|
145
|
-
cxb/client/assets/toast-B9WDyfyI.js,sha256=eJ0gQdgl4vAsHpcBUlXOPUrbNbk9Ii9Va5CdG0GRDGA,248
|
|
146
|
-
cxb/client/assets/tslib-pJfR_DrR.js,sha256=Kke-aujRqfYw2Ld4KusSVmRen6Lw2l8VKoYr2OW79mY,1231
|
|
147
|
-
cxb/client/assets/typewriter-editor-DkTVIJdm.js,sha256=YlETGGigYqnJdwnP4VkV7YAIoblWivupZuAHxu0KeDQ,52323
|
|
148
|
-
cxb/client/assets/user-DeK_NB5v.js,sha256=6VYTgmWgl7pVRgW6dD0gGKPKvvKnCEqpKy3ZlLOrQwQ,1253
|
|
149
|
-
cxb/client/assets/vanilla-picker-l5rcX3cq.js,sha256=B8KWTpJINp3oIXirDlwC683EYHZUPW76lAnHmeUPqEY,18814
|
|
150
|
-
cxb/client/assets/w3c-keyname-Vcq4gwWv.js,sha256=7NTN0-UTH-BpoJQqdC43Ec4Cdwj4Wv8viGg4W3EBqx8,1494
|
|
151
|
-
data_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
152
|
-
data_adapters/adapter.py,sha256=zR_yFd5ZI9vIQuUB6AUcF-LHgxOaxoREV2hogasivjQ,443
|
|
153
|
-
data_adapters/base_data_adapter.py,sha256=vG9WeHyw_c_BnH0EmudwPSNS6iMb5buQJiZS_9cm9p8,12055
|
|
154
|
-
data_adapters/helpers.py,sha256=0ySEDnQBMgFVXstFnPjXLtZ_-8IC4Q8oPXXrWokpFB8,660
|
|
155
|
-
data_adapters/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
156
|
-
data_adapters/file/adapter.py,sha256=SPVVfRIlyQDYfZJv4J8LmrDGtrVWddu76SvpnkXY3jM,77671
|
|
157
|
-
data_adapters/file/adapter_helpers.py,sha256=ExA_fAnRaPOLDuEY3hsLNR2BvvCscnS5Du6lWRtCvh0,34321
|
|
158
|
-
data_adapters/file/archive.py,sha256=B4VV6HNB3Bqd4tlqZ3jUQps8oqht_xOdBNOi9cLuo8Q,5423
|
|
159
|
-
data_adapters/file/create_index.py,sha256=lUcUkepo9QUIQDDDgoPAL74_n16cZ_q0NKnITGmbF6I,11888
|
|
160
|
-
data_adapters/file/create_users_folders.py,sha256=zOBgxMnqgEskYP4pgkmE6VYMca-ADLz8mXKPHJPYpys,1670
|
|
161
|
-
data_adapters/file/custom_validations.py,sha256=ziOERgTr-eY_zrN0C41B2FYmpEyoKiV4holh8an-p2c,1754
|
|
162
|
-
data_adapters/file/drop_index.py,sha256=OK3wXwaO9tUcHcJjqyLeBnkElzK35MZMi8YLGWdrXRw,1417
|
|
163
|
-
data_adapters/file/health_check.py,sha256=cMvwsXhjEykjrTyB3HtUn8QqKdtB_h5w8mGOEYPepzU,24221
|
|
164
|
-
data_adapters/file/redis_services.py,sha256=83STcca5fYFaEVLRYAxfUQXeUQZqJOT8XH-GBSbkR-E,39914
|
|
165
|
-
data_adapters/sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
166
|
-
data_adapters/sql/adapter.py,sha256=QXEJDtatIap18mrTWSqa9D7RnNZdjerkVJEGAv3i6FE,154825
|
|
167
|
-
data_adapters/sql/adapter_helpers.py,sha256=Eu22NElz2fMu6zyOsGsGrnAZcyWhHz9I__RJ9z6cwK0,15076
|
|
168
|
-
data_adapters/sql/create_tables.py,sha256=KqaXHTDOD8YaqGNc_e0iHHotd0WE3Kad_tBevtoGA20,17427
|
|
169
|
-
data_adapters/sql/create_users_folders.py,sha256=fm3P-CMcPX4b4DqXHKWMOtfX4RHdaev2nCDhYrS5cIs,1911
|
|
170
|
-
data_adapters/sql/db_to_json_migration.py,sha256=GTPO6-HblgD60qruhhVpWbKOke5xz9w_xwIr5NKK764,21009
|
|
171
|
-
data_adapters/sql/health_check_sql.py,sha256=2Z0mN5IMrjF72ZAiafBLkHklbXXWJzLp1K2TzjzPI1s,8569
|
|
172
|
-
data_adapters/sql/json_to_db_migration.py,sha256=KaubDrRZ3MfPLc-CNGPpsEccPELKr1V4GoBEBt1BNZo,21131
|
|
173
|
-
data_adapters/sql/update_query_policies.py,sha256=LUpkyzDAkiwwVWnXxPdVAU6atehW72ECAazj3mEYHK0,3857
|
|
174
|
-
dmart_migrations/README,sha256=MVlc9TYmr57RbhXET6QxgyCcwWP7w-vLkEsirENqiIQ,38
|
|
175
|
-
dmart_migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
176
|
-
dmart_migrations/alembic.ini,sha256=zs8d8VhH9TRwZrPK697EZPBCfaKvI4SqTuGuG0FAm2Y,3747
|
|
177
|
-
dmart_migrations/env.py,sha256=P1gnJRIUrP2jLHZ7HDbfkzkpuZJ_LMWqw05HIqOUJHo,3110
|
|
178
|
-
dmart_migrations/notes.txt,sha256=X7LYSNmulLRiAUXvw07Z85bSGRTnx4NUpoNC9D2DfO8,395
|
|
179
|
-
dmart_migrations/script.py.mako,sha256=u-ABdYW1tcIILgJFJdQZYLxoAI8Awd6wZbx30rY6fxU,680
|
|
180
|
-
dmart_migrations/__pycache__/__init__.cpython-314.pyc,sha256=BB6R74YhUmoPWg2dYz2gTIM0CE7sMcOt0dsgqEEPza4,174
|
|
181
|
-
dmart_migrations/__pycache__/env.cpython-314.pyc,sha256=27dvi9nRTOIogSJ7ytGX2i1CbTEw4rwPaZV_OGS175g,4278
|
|
182
|
-
dmart_migrations/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
183
|
-
dmart_migrations/scripts/calculate_checksums.py,sha256=v2NLEvReA9V3noJE-BWANgKDdhc8Mqg1ZmJJ8nc8sGI,3443
|
|
184
|
-
dmart_migrations/scripts/migration_f7a4949eed19.py,sha256=oUXuxjU4MbVafm4S-xu5J_4apHqW6hQZ8ftpJtCtM28,1462
|
|
185
|
-
dmart_migrations/versions/0f3d2b1a7c21_add_authz_materialized_views.py,sha256=70vrPfhMHVHhw1l7KNQpvCUU76XZfvGcPlrXOeU4FHU,2599
|
|
186
|
-
dmart_migrations/versions/10d2041b94d4_last_checksum_history.py,sha256=FYjyzE5Xi6bn9LUtxLKFnQOKhg4GZOrTkpqtmlCnY6Y,2860
|
|
187
|
-
dmart_migrations/versions/1cf4e1ee3cb8_ext_permission_with_filter_fields_values.py,sha256=taaFTkTaFfLfj7QUUfIdcojvbOdjut_dWtrIvQUN7-4,921
|
|
188
|
-
dmart_migrations/versions/26bfe19b49d4_rm_failedloginattempts.py,sha256=-Roftn8OSUz7kfR3yMI02rulyvnH46W0WpJfDQ5xAdk,1471
|
|
189
|
-
dmart_migrations/versions/3c8bca2219cc_add_otp_table.py,sha256=f-YSxx1iLA0iHWukq1VnngFmiiYQyEzowicox0-wtbY,1125
|
|
190
|
-
dmart_migrations/versions/6675fd9dfe42_remove_unique_from_sessions_table.py,sha256=yP40IHwtzFAAUid_VeeCkt_9F2RszMYBjNKx2mDTKNw,1037
|
|
191
|
-
dmart_migrations/versions/71bc1df82e6a_adding_user_last_login_at.py,sha256=LINO2hWUEFmsTspupd8AxgUS6tNJFNgGC5do1QPMQ1E,1486
|
|
192
|
-
dmart_migrations/versions/74288ccbd3b5_initial.py,sha256=hZ1w5mqVKSO13J1O4zcTccDJBk2c-cmIB0AUx1KLlLI,13988
|
|
193
|
-
dmart_migrations/versions/7520a89a8467_rm_activesession_table.py,sha256=4VYv9tCXkTQNaXPVvjdsKTiw093KkBBUHNSiWdZtqtA,1305
|
|
194
|
-
dmart_migrations/versions/848b623755a4_make_created_nd_updated_at_required.py,sha256=o106xd-apT8ZAXdVCjX76o7VuqRQNkIl0V4f41m5j2E,5375
|
|
195
|
-
dmart_migrations/versions/8640dcbebf85_add_notes_to_users.py,sha256=XjfW2Lc0-xoRGB2qfdzDstw7Caaev6JhqRNYV_sIqgc,813
|
|
196
|
-
dmart_migrations/versions/91c94250232a_adding_fk_on_owner_shortname.py,sha256=F9FDF2qyeqvOx1gkYq5HQMkVCH1QrXciYSHVxijsSSU,4024
|
|
197
|
-
dmart_migrations/versions/98ecd6f56f9a_ext_meta_with_owner_group_shortname.py,sha256=S466VE3jsxXDEpTKyhIN06uutM0jI7zYHTWIYvU_pJw,2579
|
|
198
|
-
dmart_migrations/versions/9aae9138c4ef_indexing_created_at_updated_at.py,sha256=xrqfJB5cER0PYi1torwkgsbBBjDeeM6dyj4pu-quphk,3662
|
|
199
|
-
dmart_migrations/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
200
|
-
dmart_migrations/versions/b53f916b3f6d_json_to_jsonb.py,sha256=LPnevQjbjs0KrwqxYHtGUC6mSBBsUpiCBnwD-FN2x50,24840
|
|
201
|
-
dmart_migrations/versions/eb5f1ec65156_adding_user_locked_to_device.py,sha256=Z9skCus52jg_xV5a7JVYK3IenNlvsdMKIFf1H5POst0,1030
|
|
202
|
-
dmart_migrations/versions/f7a4949eed19_adding_query_policies_to_meta.py,sha256=LA4rx3u0Ei5m4OcSsVYHBsGMeKOJdx8G88yK1kBLFys,2307
|
|
203
|
-
dmart_migrations/versions/__pycache__/0f3d2b1a7c21_add_authz_materialized_views.cpython-314.pyc,sha256=mevU12_Y6RzGxc8Xg1bkFIVaNu7uvx7zCQ2j6bn_Pqo,3955
|
|
204
|
-
dmart_migrations/versions/__pycache__/10d2041b94d4_last_checksum_history.cpython-314.pyc,sha256=n3eMeDeLN8WXXzoKA-8b4t9k-WQF4FPVYIRReNm-uN4,6199
|
|
205
|
-
dmart_migrations/versions/__pycache__/1cf4e1ee3cb8_ext_permission_with_filter_fields_values.cpython-314.pyc,sha256=_8yowo72FtcMsYQOp2vpy_hWJ5QlDOPsDsEt6NOr9cY,2649
|
|
206
|
-
dmart_migrations/versions/__pycache__/26bfe19b49d4_rm_failedloginattempts.cpython-314.pyc,sha256=1PYF87QiiSXEmHUM6wnq9Ck_ktq981W3TgS-_7QqG4M,3309
|
|
207
|
-
dmart_migrations/versions/__pycache__/3c8bca2219cc_add_otp_table.cpython-314.pyc,sha256=HD6h3iYtGyhDcOjRK4xWa9Hl6YzdIszmyO95wPZvFOM,2710
|
|
208
|
-
dmart_migrations/versions/__pycache__/6675fd9dfe42_remove_unique_from_sessions_table.cpython-314.pyc,sha256=k71q5tLr6x2cDoHw4pDNeBem136qz2XFjUg11a6DDpM,2422
|
|
209
|
-
dmart_migrations/versions/__pycache__/71bc1df82e6a_adding_user_last_login_at.cpython-314.pyc,sha256=35cwhVRGhtvREO4j3pBDtGoSD8sZd0MdZ0SRZKLsK5s,3399
|
|
210
|
-
dmart_migrations/versions/__pycache__/74288ccbd3b5_initial.cpython-314.pyc,sha256=BDS6zx-enw-oWeAIju5plp4lB10q8BeFwBnaUDEgtKY,28589
|
|
211
|
-
dmart_migrations/versions/__pycache__/7520a89a8467_rm_activesession_table.cpython-314.pyc,sha256=x5m_sxYMDP6myKKlVTivP-VM-2EH6d0D21pv9URFyXU,2791
|
|
212
|
-
dmart_migrations/versions/__pycache__/848b623755a4_make_created_nd_updated_at_required.cpython-314.pyc,sha256=A4E0A4eJliMs-uNeVZfGo2j8UrXhdRrtBB1Ky-OA_O0,7917
|
|
213
|
-
dmart_migrations/versions/__pycache__/8640dcbebf85_add_notes_to_users.cpython-314.pyc,sha256=94zNRuU2L3ra43Z3eDa4duVMXMsKTLiNUUj7lUxeZzY,2526
|
|
214
|
-
dmart_migrations/versions/__pycache__/91c94250232a_adding_fk_on_owner_shortname.cpython-314.pyc,sha256=IIEupLleN5nEUUpTCXWGV-LXsdzGJrcnrolJmpi8WMo,6383
|
|
215
|
-
dmart_migrations/versions/__pycache__/98ecd6f56f9a_ext_meta_with_owner_group_shortname.cpython-314.pyc,sha256=tPXDQ_TCEK9sv3ZinAk9vUJcwuqE75ymoT_0O_0qLss,5657
|
|
216
|
-
dmart_migrations/versions/__pycache__/9aae9138c4ef_indexing_created_at_updated_at.cpython-314.pyc,sha256=D3m2fuhNbUUNZi21p45UDy8uUmAOio1RZzqoPnKD6G4,6990
|
|
217
|
-
dmart_migrations/versions/__pycache__/b53f916b3f6d_json_to_jsonb.cpython-314.pyc,sha256=eBvU5VFctw1AqklCtprJJhvGXZVYpvxBcuZiI6bOBGY,34035
|
|
218
|
-
dmart_migrations/versions/__pycache__/eb5f1ec65156_adding_user_locked_to_device.cpython-314.pyc,sha256=v47hBAxgbjkSAsEn8O2EUTUOPR0D9bVD8fJl9erlpzM,2514
|
|
219
|
-
dmart_migrations/versions/__pycache__/f7a4949eed19_adding_query_policies_to_meta.cpython-314.pyc,sha256=jCW56_bq_qQM6H9CjPu2qOm8gywSO7TEHHywlyv1qcI,5099
|
|
220
|
-
languages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
221
|
-
languages/arabic.json,sha256=UL61rP9_M42CGfU94G5-1bXVUVnsJWXzoqhaXTXTJuM,910
|
|
222
|
-
languages/english.json,sha256=Y7eZ2X8c427_97qYrHOeGb2d725T-YlNNFVSi8FB7Kw,649
|
|
223
|
-
languages/kurdish.json,sha256=GgPLkVKyhIQjT7h3cPfDh0oyzg26znvBUe5X_Zz2TWI,864
|
|
224
|
-
languages/loader.py,sha256=3gf2WmfSQ-AVIpyLAm_5J5NcQlWqBxQHMjcUd04Pijs,381
|
|
225
|
-
models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
226
|
-
models/api.py,sha256=f5X56dudyEysPmDuI5grM2RRCXuIQoehaAB6wMAGG28,6473
|
|
227
|
-
models/core.py,sha256=tEb7cbnC71yE9SDluynj7dE3U8Ed-EbF3uRJizy-uuU,16880
|
|
228
|
-
models/enums.py,sha256=y2G5EKIc8FusVW4JvEozGFKL2GxjtuOK7k3zSguP4dc,5395
|
|
229
|
-
plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
230
|
-
plugins/action_log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
231
|
-
plugins/action_log/plugin.py,sha256=-JY_iIIJJjFFofvpMoCxNJMXNr_KC6kA8TiwvvoxaWI,4434
|
|
232
|
-
plugins/admin_notification_sender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
233
|
-
plugins/admin_notification_sender/plugin.py,sha256=sxVGW8qtRmDEQeS6QD3F3IqzZOoh_9H_y2TsRCDkXaw,4771
|
|
234
|
-
plugins/ldap_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
235
|
-
plugins/ldap_manager/plugin.py,sha256=c05pKGsyLETMrheCqIw3gZOSLdTWvEDq_WCl0Q_0yXQ,3030
|
|
236
|
-
plugins/local_notification/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
237
|
-
plugins/local_notification/plugin.py,sha256=FObVxID5Bg0G_xStpJYZkg706wu_CpUqk09DmzHAyPQ,4074
|
|
238
|
-
plugins/realtime_updates_notifier/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
239
|
-
plugins/realtime_updates_notifier/plugin.py,sha256=Gcvob4ShSs2Ht1hLD2vtwhR_PSFYMv3_l_VPM2opTYs,2374
|
|
240
|
-
plugins/redis_db_update/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
241
|
-
plugins/redis_db_update/plugin.py,sha256=z05k1zNJgBnKPj-jrtMUeI9br75ZPlifbzL0HxpRnXg,7128
|
|
242
|
-
plugins/resource_folders_creation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
243
|
-
plugins/resource_folders_creation/plugin.py,sha256=OwYPtRjMt2esAAEdv1FjdZgjEz01yt2xOZQi3nB0kEQ,3327
|
|
244
|
-
plugins/system_notification_sender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
245
|
-
plugins/system_notification_sender/plugin.py,sha256=MUOujwyRJ3yQrXwZ-X4qSdx0ZNU2c-sYy0d0-U8twoA,8253
|
|
246
|
-
plugins/update_access_controls/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
247
|
-
plugins/update_access_controls/plugin.py,sha256=43UV4vg-zxBF_7Bv0AZH6gU0Bgy2ybapNK21wJTF05k,301
|
|
248
|
-
utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
249
|
-
utils/access_control.py,sha256=8cCKr-6bL-Shl8j8xtfjEykMPGy6wkbNz-NRwLCdx-Y,11757
|
|
250
|
-
utils/async_request.py,sha256=Lm2xGXLeph7P1_fLhhNJDhPubKT2ncFn_Ueft4JVoeI,255
|
|
251
|
-
utils/exporter.py,sha256=HjcZCzcuH6N6f7Gn2hkTEeEFyo-MfrsiZUYAE-9kkVQ,9718
|
|
252
|
-
utils/firebase_notifier.py,sha256=nAeCUo5Mtwxygwj8ONlw8ZAtL_ekdJBabvU0z2dZ3NY,2391
|
|
253
|
-
utils/generate_email.py,sha256=25i1iNVDfyRDq7vvZVFkaTYfMZFkAg1ZVQO2GdK7yRQ,1122
|
|
254
|
-
utils/helpers.py,sha256=gNxLg09cclRWrKNBy2pwGZsxGA0iFS5iZ_nyra3SmnI,9928
|
|
255
|
-
utils/hypercorn_config.py,sha256=q28HGRLWo9wjOVF183WwFPs3HQo4Nexc7q_7dmSVHRI,311
|
|
256
|
-
utils/internal_error_code.py,sha256=KGlXPC5YruPmb0ORVY7U3EEVpBgSLuU4lHdXgwUVN2M,1637
|
|
257
|
-
utils/jwt.py,sha256=Y7Gp3imvNwAtWOg8V0etvsEFtswmCYKK_U4ljZ15Pps,4590
|
|
258
|
-
utils/logger.py,sha256=peejQnq9B0eaHwdLynBHT7FUCq7jCX_DhkX6BcxrLkA,5274
|
|
259
|
-
utils/middleware.py,sha256=PAVwnLzs0cyT_ZIgc1slqadEOJNCPliLhOTjaYx0Waw,3399
|
|
260
|
-
utils/notification.py,sha256=O9oOeU9cRm3e9UAc-VJONWx-TzqbCMddFNaTQilE6ks,2479
|
|
261
|
-
utils/password_hashing.py,sha256=NZZsmtPG9Vkocipk3DlDKKHKUdxRKA4yOhCurD8dUhg,356
|
|
262
|
-
utils/plugin_manager.py,sha256=brQoE4u2WxH6EMvUOYQlnOnSUbKwha92-UfAgWUaHRU,7645
|
|
263
|
-
utils/query_policies_helper.py,sha256=Bf5qriQJ8CpUqPaQg5cdvNrn-92l_jKxHwsvXdegAZo,4796
|
|
264
|
-
utils/regex.py,sha256=cv9b_l_e8tz42mKckeeyDgypKqh2e71E28co2iuEVxA,2286
|
|
265
|
-
utils/repository.py,sha256=9L-IvQ0Js0SQ5OR-Rh0i2Wdu4H9H06r8eE84hfBIu7Q,18313
|
|
266
|
-
utils/router_helper.py,sha256=Tgoq3oakejdEeyeVieTNk38JsPZ8x5RuR0kw2THc1mI,604
|
|
267
|
-
utils/settings.py,sha256=yjiudcgLVSIvKLQo9JtukmeLSU-6YTdggzWfZxiFoO8,5720
|
|
268
|
-
utils/sms_notifier.py,sha256=04D6D_ldk3S9SojI7_381pqLc8v9lligeNHAysohz7w,550
|
|
269
|
-
utils/social_sso.py,sha256=Dm1W6U9OwKbAeUwM-kwJBHFEoreeoN-s-RHdOZ1-cNg,2216
|
|
270
|
-
utils/ticket_sys_utils.py,sha256=9QAlW2iiy8KyxQRBDj_WmzS5kKb0aYJmGwd4qzmGVqo,7005
|
|
271
|
-
utils/web_notifier.py,sha256=QM87VVid2grC5lK3NdS1yzz0z1wXljr4GChJOeK86W4,843
|
|
272
|
-
utils/templates/activation.html.j2,sha256=XAMKCdoqONoc4ZQucD0yV-Pg5DlHHASZrTVItNS-iBE,640
|
|
273
|
-
utils/templates/reminder.html.j2,sha256=aoS8bTs56q4hjAZKsb0jV9c-PIURBELuBOpT_qPZNVU,639
|
|
274
|
-
dmart-1.4.32.dist-info/METADATA,sha256=OsIWme8HRVz7FSh3qJ1M7SDkqX6XYcfmr-p_7PkoFFk,2149
|
|
275
|
-
dmart-1.4.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
276
|
-
dmart-1.4.32.dist-info/entry_points.txt,sha256=GjfoGh1bpxuU9HHGJzbtCFPNptHv9TryxHMN3uBSKpg,37
|
|
277
|
-
dmart-1.4.32.dist-info/top_level.txt,sha256=S-gfX1pLerapNXiHZ8lvPYoV7sgwSX2_NCZ6xfzDUHM,267
|
|
278
|
-
dmart-1.4.32.dist-info/RECORD,,
|
dmart_migrations/README
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Generic single-database configuration.
|
|
Binary file
|
|
Binary file
|