dmart 0.1.10__py3-none-any.whl → 1.4.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. alembic/versions/eb5f1ec65156_adding_user_locked_to_device.py +1 -1
  2. api/managed/utils.py +60 -31
  3. api/user/router.py +13 -1
  4. bundler.py +12 -4
  5. cxb/__init__.py +0 -0
  6. cxb/client/__init__.py +0 -0
  7. cxb/client/assets/@codemirror-Rn7_6DkE.js +10 -0
  8. cxb/client/assets/@edraj-CS4NwVbD.js +1 -0
  9. cxb/client/assets/@floating-ui-BwwcF-xh.js +1 -0
  10. cxb/client/assets/@formatjs-yKEsAtjs.js +1 -0
  11. cxb/client/assets/@fortawesome-DRW1UCdr.js +9 -0
  12. cxb/client/assets/@jsonquerylang-laKNoFFq.js +12 -0
  13. cxb/client/assets/@lezer-za4Q-8Ew.js +1 -0
  14. cxb/client/assets/@marijn-DXwl3gUT.js +1 -0
  15. cxb/client/assets/@popperjs-l0sNRNKZ.js +1 -0
  16. cxb/client/assets/@replit--ERk53eB.js +1 -0
  17. cxb/client/assets/@roxi-CGMFK4i8.js +6 -0
  18. cxb/client/assets/@typewriter-cCzskkIv.js +17 -0
  19. cxb/client/assets/@zerodevx-BlBZjKxu.js +1 -0
  20. cxb/client/assets/@zerodevx-CVEpe6WZ.css +1 -0
  21. cxb/client/assets/BreadCrumbLite-DAhOx38v.js +1 -0
  22. cxb/client/assets/EntryRenderer-25YDhRen.js +32 -0
  23. cxb/client/assets/EntryRenderer-DXytdFp9.css +1 -0
  24. cxb/client/assets/ListView-BpAycA2h.js +16 -0
  25. cxb/client/assets/ListView-U8of-_c-.css +1 -0
  26. cxb/client/assets/Prism--hMplq-p.js +3 -0
  27. cxb/client/assets/Prism-Uh6uStUw.css +1 -0
  28. cxb/client/assets/Table2Cols-BsbwicQm.js +1 -0
  29. cxb/client/assets/_..-BvT6vdHa.css +1 -0
  30. cxb/client/assets/_...404_-fuLH_rX9.js +2 -0
  31. cxb/client/assets/_...fallback_-Ba_NLmAE.js +1 -0
  32. cxb/client/assets/_module-Bfk8MiCs.js +3 -0
  33. cxb/client/assets/_module-CEW0D5oI.js +4 -0
  34. cxb/client/assets/_module-Dgq0ZVtz.js +1 -0
  35. cxb/client/assets/ajv-Cpj98o6Y.js +1 -0
  36. cxb/client/assets/axios-CG2WSiiR.js +6 -0
  37. cxb/client/assets/clsx-B-dksMZM.js +1 -0
  38. cxb/client/assets/codemirror-wrapped-line-indent-DPhKvljI.js +1 -0
  39. cxb/client/assets/compare-C3AjiGFR.js +1 -0
  40. cxb/client/assets/compute-scroll-into-view-Bl8rNFhg.js +1 -0
  41. cxb/client/assets/consolite-DlCuI0F9.js +1 -0
  42. cxb/client/assets/crelt-C8TCjufn.js +1 -0
  43. cxb/client/assets/date-fns-l0sNRNKZ.js +1 -0
  44. cxb/client/assets/deepmerge-rn4rBaHU.js +1 -0
  45. cxb/client/assets/dmart_services-AL6-IdDE.js +1 -0
  46. cxb/client/assets/downloadFile-D08i0YDh.js +1 -0
  47. cxb/client/assets/easy-signal-BiPFIK3O.js +1 -0
  48. cxb/client/assets/esm-env-rsSWfq8L.js +1 -0
  49. cxb/client/assets/export-OF_rTiXu.js +1 -0
  50. cxb/client/assets/fast-deep-equal-l0sNRNKZ.js +1 -0
  51. cxb/client/assets/fast-diff-C-IidNf4.js +1 -0
  52. cxb/client/assets/fast-uri-l0sNRNKZ.js +1 -0
  53. cxb/client/assets/flowbite-svelte-BLvjb-sa.js +1 -0
  54. cxb/client/assets/flowbite-svelte-CD54FDqW.css +1 -0
  55. cxb/client/assets/flowbite-svelte-icons-BI8GVhw_.js +1 -0
  56. cxb/client/assets/github-slugger-CQ4oX9Ud.js +1 -0
  57. cxb/client/assets/global-igKv-1g9.js +1 -0
  58. cxb/client/assets/hookar-BMRD9G9H.js +1 -0
  59. cxb/client/assets/immutable-json-patch-DtRO2E_S.js +1 -0
  60. cxb/client/assets/import-1vE3gBat.js +1 -0
  61. cxb/client/assets/index-B-eTh-ZX.js +1 -0
  62. cxb/client/assets/index-BVyxzKtH.js +1 -0
  63. cxb/client/assets/index-BdeNM69f.js +1 -0
  64. cxb/client/assets/index-C6cPO4op.js +1 -0
  65. cxb/client/assets/index-CC-A1ipE.js +1 -0
  66. cxb/client/assets/index-CTxJ-lDp.js +1 -0
  67. cxb/client/assets/index-Cd-F5j_k.js +1 -0
  68. cxb/client/assets/index-D742rwaM.js +1 -0
  69. cxb/client/assets/index-DTfhnhwd.js +1 -0
  70. cxb/client/assets/index-DdXRK7n9.js +2 -0
  71. cxb/client/assets/index-DtiCmB4o.js +1 -0
  72. cxb/client/assets/index-NBrXBlLA.css +2 -0
  73. cxb/client/assets/index-ac-Buu_H.js +4 -0
  74. cxb/client/assets/index-iYkH7C67.js +1 -0
  75. cxb/client/assets/info-B986lRiM.js +1 -0
  76. cxb/client/assets/intl-messageformat-Dc5UU-HB.js +3 -0
  77. cxb/client/assets/jmespath-l0sNRNKZ.js +1 -0
  78. cxb/client/assets/json-schema-traverse-l0sNRNKZ.js +1 -0
  79. cxb/client/assets/json-source-map-DRgZidqy.js +5 -0
  80. cxb/client/assets/jsonpath-plus-l0sNRNKZ.js +1 -0
  81. cxb/client/assets/jsonrepair-B30Dx381.js +8 -0
  82. cxb/client/assets/lodash-es-DZVAA2ox.js +1 -0
  83. cxb/client/assets/marked-DKjyhwJX.js +56 -0
  84. cxb/client/assets/marked-gfm-heading-id-U5zO829x.js +2 -0
  85. cxb/client/assets/marked-mangle-CDMeiHC6.js +1 -0
  86. cxb/client/assets/memoize-one-BdPwpGay.js +1 -0
  87. cxb/client/assets/natural-compare-lite-Bg2Xcf-o.js +7 -0
  88. cxb/client/assets/pagination-svelte-D5CyoiE_.js +13 -0
  89. cxb/client/assets/pagination-svelte-v10nAbbM.css +1 -0
  90. cxb/client/assets/plantuml-encoder-C47mzt9T.js +1 -0
  91. cxb/client/assets/prismjs-DTUiLGJu.js +9 -0
  92. cxb/client/assets/profile-BUf-tKMe.js +1 -0
  93. cxb/client/assets/query-CNmXTsgf.js +1 -0
  94. cxb/client/assets/queryHelpers-C9iBWwqe.js +1 -0
  95. cxb/client/assets/scroll-into-view-if-needed-KR58zyjF.js +1 -0
  96. cxb/client/assets/spaces-0oyGvpii.js +1 -0
  97. cxb/client/assets/style-mod-Bs6eFhZE.js +3 -0
  98. cxb/client/assets/svelte-B2XmcTi_.js +4 -0
  99. cxb/client/assets/svelte-awesome-COLlx0DN.css +1 -0
  100. cxb/client/assets/svelte-awesome-DhnMA6Q_.js +1 -0
  101. cxb/client/assets/svelte-datatables-net-CY7LBj6I.js +1 -0
  102. cxb/client/assets/svelte-floating-ui-BlS3sOAQ.js +1 -0
  103. cxb/client/assets/svelte-i18n-CT2KkQaN.js +3 -0
  104. cxb/client/assets/svelte-jsoneditor-BzfX6Usi.css +1 -0
  105. cxb/client/assets/svelte-jsoneditor-CUGSvWId.js +25 -0
  106. cxb/client/assets/svelte-select-CegQKzqH.css +1 -0
  107. cxb/client/assets/svelte-select-CjHAt_85.js +6 -0
  108. cxb/client/assets/tailwind-merge-CJvxXMcu.js +1 -0
  109. cxb/client/assets/tailwind-variants-Cj20BoQ3.js +1 -0
  110. cxb/client/assets/toast-B9WDyfyI.js +1 -0
  111. cxb/client/assets/tslib-pJfR_DrR.js +1 -0
  112. cxb/client/assets/typewriter-editor-DkTVIJdm.js +25 -0
  113. cxb/client/assets/user-DeK_NB5v.js +1 -0
  114. cxb/client/assets/vanilla-picker-l5rcX3cq.js +8 -0
  115. cxb/client/assets/w3c-keyname-Vcq4gwWv.js +1 -0
  116. cxb/client/config.json +11 -0
  117. cxb/client/config.sample.json +11 -0
  118. cxb/client/favicon.ico +0 -0
  119. cxb/client/favicon.png +0 -0
  120. cxb/client/index.html +28 -0
  121. data_adapters/sql/adapter.py +14 -6
  122. data_adapters/sql/db_to_json_migration.py +7 -4
  123. {dmart-0.1.10.dist-info → dmart-1.4.6.dist-info}/METADATA +2 -3
  124. dmart-1.4.6.dist-info/RECORD +265 -0
  125. {dmart-0.1.10.dist-info → dmart-1.4.6.dist-info}/top_level.txt +1 -0
  126. dmart.py +79 -9
  127. languages/loader.py +0 -1
  128. main.py +56 -2
  129. plugins/system_notification_sender/plugin.py +1 -1
  130. utils/generate_email.py +0 -1
  131. utils/query_policies_helper.py +24 -8
  132. utils/settings.py +5 -4
  133. dmart-0.1.10.dist-info/RECORD +0 -149
  134. {dmart-0.1.10.dist-info → dmart-1.4.6.dist-info}/WHEEL +0 -0
  135. {dmart-0.1.10.dist-info → dmart-1.4.6.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,265 @@
1
+ bundler.py,sha256=so8ZJResb1PcOH5vboa_mpFAdYr_T8u8DbbFXd570Lg,1704
2
+ data_generator.py,sha256=CnE-VHEeX7-lAXtqCgbRqR9WHjTuOgeiZcviYrHAmho,2287
3
+ dmart.py,sha256=1oQXSPgHiVpSPKhKy2EhP2Mmu1ZKPEdKqbXehXUj7MA,21760
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
+ alembic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ alembic/env.py,sha256=z12UKhorKSOKEovOCQOwRjfR_tup4VeRlhcB1UPk3Xw,2700
17
+ alembic/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ alembic/scripts/calculate_checksums.py,sha256=v2NLEvReA9V3noJE-BWANgKDdhc8Mqg1ZmJJ8nc8sGI,3443
19
+ alembic/scripts/migration_f7a4949eed19.py,sha256=oUXuxjU4MbVafm4S-xu5J_4apHqW6hQZ8ftpJtCtM28,1462
20
+ alembic/versions/0f3d2b1a7c21_add_authz_materialized_views.py,sha256=70vrPfhMHVHhw1l7KNQpvCUU76XZfvGcPlrXOeU4FHU,2599
21
+ alembic/versions/10d2041b94d4_last_checksum_history.py,sha256=FYjyzE5Xi6bn9LUtxLKFnQOKhg4GZOrTkpqtmlCnY6Y,2860
22
+ alembic/versions/1cf4e1ee3cb8_ext_permission_with_filter_fields_values.py,sha256=taaFTkTaFfLfj7QUUfIdcojvbOdjut_dWtrIvQUN7-4,921
23
+ alembic/versions/26bfe19b49d4_rm_failedloginattempts.py,sha256=-Roftn8OSUz7kfR3yMI02rulyvnH46W0WpJfDQ5xAdk,1471
24
+ alembic/versions/3c8bca2219cc_add_otp_table.py,sha256=f-YSxx1iLA0iHWukq1VnngFmiiYQyEzowicox0-wtbY,1125
25
+ alembic/versions/6675fd9dfe42_remove_unique_from_sessions_table.py,sha256=yP40IHwtzFAAUid_VeeCkt_9F2RszMYBjNKx2mDTKNw,1037
26
+ alembic/versions/71bc1df82e6a_adding_user_last_login_at.py,sha256=LINO2hWUEFmsTspupd8AxgUS6tNJFNgGC5do1QPMQ1E,1486
27
+ alembic/versions/74288ccbd3b5_initial.py,sha256=hZ1w5mqVKSO13J1O4zcTccDJBk2c-cmIB0AUx1KLlLI,13988
28
+ alembic/versions/7520a89a8467_rm_activesession_table.py,sha256=4VYv9tCXkTQNaXPVvjdsKTiw093KkBBUHNSiWdZtqtA,1305
29
+ alembic/versions/848b623755a4_make_created_nd_updated_at_required.py,sha256=o106xd-apT8ZAXdVCjX76o7VuqRQNkIl0V4f41m5j2E,5375
30
+ alembic/versions/8640dcbebf85_add_notes_to_users.py,sha256=XjfW2Lc0-xoRGB2qfdzDstw7Caaev6JhqRNYV_sIqgc,813
31
+ alembic/versions/91c94250232a_adding_fk_on_owner_shortname.py,sha256=F9FDF2qyeqvOx1gkYq5HQMkVCH1QrXciYSHVxijsSSU,4024
32
+ alembic/versions/98ecd6f56f9a_ext_meta_with_owner_group_shortname.py,sha256=S466VE3jsxXDEpTKyhIN06uutM0jI7zYHTWIYvU_pJw,2579
33
+ alembic/versions/9aae9138c4ef_indexing_created_at_updated_at.py,sha256=xrqfJB5cER0PYi1torwkgsbBBjDeeM6dyj4pu-quphk,3662
34
+ alembic/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ alembic/versions/b53f916b3f6d_json_to_jsonb.py,sha256=LPnevQjbjs0KrwqxYHtGUC6mSBBsUpiCBnwD-FN2x50,24840
36
+ alembic/versions/eb5f1ec65156_adding_user_locked_to_device.py,sha256=Z9skCus52jg_xV5a7JVYK3IenNlvsdMKIFf1H5POst0,1030
37
+ alembic/versions/f7a4949eed19_adding_query_policies_to_meta.py,sha256=LA4rx3u0Ei5m4OcSsVYHBsGMeKOJdx8G88yK1kBLFys,2307
38
+ api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ api/info/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ api/info/router.py,sha256=sQZZor7A-uDzsJX39aqEA7bMZOJ-WTitYeFvVNWfaHw,3938
41
+ api/managed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ api/managed/router.py,sha256=0xfJ3NXV3XHyG8yWLEECBJt-XppymOxYuMDvQJdO1MI,50865
43
+ api/managed/utils.py,sha256=IqgFVHVfNubYOx5i9YoQjVqbUbaveIrqfOfTFvV42BA,74227
44
+ api/public/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ api/public/router.py,sha256=TrraWs2LGL_c_JRDbvS8OHm3fJ-ZKF7o4El7wvjV4Mk,24753
46
+ api/qr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ api/qr/router.py,sha256=Ru7UT_iQS6mFwE1bCPPrusSQfFgoV_u6pjZJ0gArE7g,3870
48
+ api/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ api/user/router.py,sha256=B59HQPwmwgEfYIlF3_XBNaVBlT4PWqMJiUlUvEN69Vo,51719
50
+ api/user/service.py,sha256=-iQpcBVPTDiLE_xOf87Ni0oSQDtmALAXEwU4IgSvnJk,8463
51
+ api/user/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ api/user/model/errors.py,sha256=rhcIcbAIk_7rs5lxdgcsf7SWFGmC9QLsgc67x7S6CKA,299
53
+ api/user/model/requests.py,sha256=MazMirg7wQoUm4qvnm_EAB_gJIy3YxvYYqNyU3fZJc0,5025
54
+ api/user/model/responses.py,sha256=0vbigspq_aBd1JS6hEm13BnG7Hm7EIiWBZ6xz3d5hmE,202
55
+ config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ config/channels.json,sha256=GepystGi0h_1fuakC_gdIc-YYxyy-a4TI619ygIpyyM,156
57
+ config/notification.json,sha256=esrOaMUIqfcCHB0Tawp3t4cu7DQAA15X12OS-Gyenb0,361
58
+ cxb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
+ cxb/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ cxb/client/config.json,sha256=WvhCcnJ9-uQ2raPuRBRSGO3iD7Hcaf8Cy49EXUu3KQw,358
61
+ cxb/client/config.sample.json,sha256=fTYLbnTiUdbT_F7rcwI7CLSZ_KoX8EflfuyswRGW2x0,355
62
+ cxb/client/favicon.ico,sha256=CD2FYyYYFNAbH7lGPnM5-2asMmhf-kwitAp99Kh0Wmc,4286
63
+ cxb/client/favicon.png,sha256=gbSWS2UiKrUcy5Jt4gcncDrE5yvfAS00OgYzdNxPxlk,4164
64
+ cxb/client/index.html,sha256=J_7uaGXP02rNLSvJ4Poyr5G7TZt8W0Br-EWQlYEeXi0,1622
65
+ cxb/client/assets/@codemirror-Rn7_6DkE.js,sha256=lE9KsREWfszCrh0SBu7CKi3k1OiDzBrIeNO_S5PYRcM,342674
66
+ cxb/client/assets/@edraj-CS4NwVbD.js,sha256=zndm--w-VH0vIAjb2K_MHp5oSC-khzxT8Evj1Dl_2-c,9293
67
+ cxb/client/assets/@floating-ui-BwwcF-xh.js,sha256=K4lsJw_hrkV0vq1uguBTS_GxONRbsFtlBjX4pagaOwg,17129
68
+ cxb/client/assets/@formatjs-yKEsAtjs.js,sha256=bwa2AS3AZNFoUsMafb6wKHA15W9GldY3Kt61ZObX02U,33632
69
+ cxb/client/assets/@fortawesome-DRW1UCdr.js,sha256=XxmEJ7SxFU5lm4fFq2B0t6oAFpvInLfZbwrds7T9kM8,18810
70
+ cxb/client/assets/@jsonquerylang-laKNoFFq.js,sha256=z3m86cWxHoliU-BL-mn-U7ob8B1cV1lzyC-Q7DITo2w,8464
71
+ cxb/client/assets/@lezer-za4Q-8Ew.js,sha256=6kTYHAkwA6DYI_m9taUHq0iqetL5AbmBt43KB0s2Pxg,54631
72
+ cxb/client/assets/@marijn-DXwl3gUT.js,sha256=ONjPnhK4okY91E_qSZTqZuKrYU97xaqPdt5Vde2cgcI,2312
73
+ cxb/client/assets/@popperjs-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
74
+ cxb/client/assets/@replit--ERk53eB.js,sha256=w2wSGTctSSsvB0PLKCbBVJUc4LRqyXbAFfApDw8DrPI,4586
75
+ cxb/client/assets/@roxi-CGMFK4i8.js,sha256=a9e-nCrgDd2UQieodqFb8O1oMsoJ9GGg9pZ2pFG7vSE,49989
76
+ cxb/client/assets/@typewriter-cCzskkIv.js,sha256=kyXdd1BwqHKx7CIB8Up_1AblBsI5ViLxkwjWN-bzcfw,21047
77
+ cxb/client/assets/@zerodevx-BlBZjKxu.js,sha256=u3olMch61ywj4FnmXTSswD1myRH_rHI0dQMCNogCAH0,3883
78
+ cxb/client/assets/@zerodevx-CVEpe6WZ.css,sha256=BkcVDS4u4ljfIXhn6xv4h5Pld01evCI_ebMKCxpK8i4,1976
79
+ cxb/client/assets/BreadCrumbLite-DAhOx38v.js,sha256=_zhm_Sls-tayWdYobXeXCA6uxNSrVsLnAhfyPCTyHH8,1949
80
+ cxb/client/assets/EntryRenderer-25YDhRen.js,sha256=iUbBmlD02BkiMNjS68jt8sHtzVnwAsuvadVDXBwVBS8,64047
81
+ cxb/client/assets/EntryRenderer-DXytdFp9.css,sha256=8J5fh7_foC06CVV6Qk7UYvxXKqTrFOqQ4isbyJ-gABY,496
82
+ cxb/client/assets/ListView-BpAycA2h.js,sha256=MKEI90xQ07Cmyo6KuJLR7yxOi5CQt0cpU7kCwTMxtVM,134226
83
+ cxb/client/assets/ListView-U8of-_c-.css,sha256=sPIUBfAsMEwhNqvGgGf_oD09XUR5hT8PWk_OtVEwMgI,1288
84
+ cxb/client/assets/Prism--hMplq-p.js,sha256=wzk_GRGPAnTHIenvdCuh_qqHFCeCKco2OCoFinBUesw,587
85
+ cxb/client/assets/Prism-Uh6uStUw.css,sha256=_wHCkOjMWX__hXLr6MjadiXCj2dBxIQFAhkSLAhHwSA,6165
86
+ cxb/client/assets/Table2Cols-BsbwicQm.js,sha256=w6w37qzrdh3f-8waIUDnwPk0MDa8dJBrrG0Z3A8uAAk,1410
87
+ cxb/client/assets/_..-BvT6vdHa.css,sha256=u-3Pj3A2tQeUNBIItE_qki2Lk4GBISmHRs7957cGP30,275
88
+ cxb/client/assets/_...404_-fuLH_rX9.js,sha256=9oGBvAECq9eMcTAZG-cznYAXcM2WaBu4G5wPoTt53uY,684
89
+ cxb/client/assets/_...fallback_-Ba_NLmAE.js,sha256=leHVZijlVjIaqzYUCCTIFDFrFsVcS2NsxgVTW58OhBg,123
90
+ cxb/client/assets/_module-Bfk8MiCs.js,sha256=Zh6tAXTmBj4kvrs5ojFFC6N45pasJviz6lHz5TEy3as,3793
91
+ cxb/client/assets/_module-CEW0D5oI.js,sha256=B2uyRT7DxaK10V58YhhQNZtV-8bkmV9EbAK6WZhHwgw,7899
92
+ cxb/client/assets/_module-Dgq0ZVtz.js,sha256=-_CkmFKVsif9U2B0uVLfmXuDp3GJS2iY4sAP1y_2rvQ,11226
93
+ cxb/client/assets/ajv-Cpj98o6Y.js,sha256=liU3m63UhJYQ3-bBVFPN8MAHEmTJDu8Xcwf6wJTSqmw,236
94
+ cxb/client/assets/axios-CG2WSiiR.js,sha256=URKIJZfepkPrQwK1aPXLhg4f5cGLhk6c0tVUS5eFFB0,36287
95
+ cxb/client/assets/clsx-B-dksMZM.js,sha256=x7hDvCu6RhEQ5d35FtnEAYCjg4BM5zZYcw7EblGW0v0,374
96
+ cxb/client/assets/codemirror-wrapped-line-indent-DPhKvljI.js,sha256=kn9kuXsyPkjimYpjkc3KyXSOral3p4v3gbQw5SbNMMY,1591
97
+ cxb/client/assets/compare-C3AjiGFR.js,sha256=L2wU3DxEeQq-gheMWChs4IX2Las1HLWxAF4HWcpvSZo,8744
98
+ cxb/client/assets/compute-scroll-into-view-Bl8rNFhg.js,sha256=5DonV_EZ7Iwbtu8sT17P3aoourk-WRBAdlAsaNh_mDA,2943
99
+ cxb/client/assets/consolite-DlCuI0F9.js,sha256=oSh3Gbte0Iogkiczrf8Ei0pWKu75WAakY33Z9Kix7GA,3079
100
+ cxb/client/assets/crelt-C8TCjufn.js,sha256=v5UZ6-BdG7hN-EZniG3z0-gaMx1rOdzsjqIiNrRUp8s,623
101
+ cxb/client/assets/date-fns-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
102
+ cxb/client/assets/deepmerge-rn4rBaHU.js,sha256=mq9vJj-3sJY_n_VL9dyNkcgD9eD-F7d0vuka-mPJUnY,1675
103
+ cxb/client/assets/dmart_services-AL6-IdDE.js,sha256=RyyNwg7hpN4eTONXb4NOoQ9QTDx5meSSuSMprYkk7m8,1783
104
+ cxb/client/assets/downloadFile-D08i0YDh.js,sha256=pdNEGMBhyU01Y_vVX1OEzxWC7Ktg0T2vwW6VfdYjf0Q,247
105
+ cxb/client/assets/easy-signal-BiPFIK3O.js,sha256=2J65d_BBehKW7Hb64qwX3iCZDes2LsAjYlsRHuJTEHc,108
106
+ cxb/client/assets/esm-env-rsSWfq8L.js,sha256=scv4WZ555272218bU3lLaHkEQ7dl-wFrvbn0MlQAqKA,27
107
+ cxb/client/assets/export-OF_rTiXu.js,sha256=VjmlbOOhE2eGtbPQSbaz395EFtoMJLThpTtFze7Hcf8,4146
108
+ cxb/client/assets/fast-deep-equal-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
109
+ cxb/client/assets/fast-diff-C-IidNf4.js,sha256=3QejtPCU1VzP2FM7RY5yFvp4QseK438MIrhUa33u7ko,7785
110
+ cxb/client/assets/fast-uri-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
111
+ cxb/client/assets/flowbite-svelte-BLvjb-sa.js,sha256=vRreerVWabyzTubQPDBuxDvgV7M8RlDWIKocxzMQiQ0,245889
112
+ cxb/client/assets/flowbite-svelte-CD54FDqW.css,sha256=n1HDAUq6e-IogOmdk3gYW4E8TK-yE3Gh8wgp5FdOn90,63
113
+ cxb/client/assets/flowbite-svelte-icons-BI8GVhw_.js,sha256=cp8Lg64HqWR8_4XS3q4xOAV3hztu4BsJPBhgysMRTtU,80766
114
+ cxb/client/assets/github-slugger-CQ4oX9Ud.js,sha256=1sye3A-ozGOvdFYnerReUKpwwAeCjBilw-ZMIbxgRAI,8573
115
+ cxb/client/assets/global-igKv-1g9.js,sha256=9AnwcOz6vUYKXcaBuqOCag8rxRCSVDwmIHG8irKBIUM,347
116
+ cxb/client/assets/hookar-BMRD9G9H.js,sha256=_Dzjp-0cmaseuT5CcILxOLX5a4QsMWHgS3bcAC5oH64,519
117
+ cxb/client/assets/immutable-json-patch-DtRO2E_S.js,sha256=I1LmEOX8J21wFhrrAtIV6svx32i-j5TJpso1CpzEEik,5600
118
+ cxb/client/assets/import-1vE3gBat.js,sha256=9T_SMx38Y7DXPtMi72n0LBsPbMPvlkQquZ3zOEp7zQk,3106
119
+ cxb/client/assets/index-B-eTh-ZX.js,sha256=SoqSuq7zLpebuTstKO5Tfwz3fNEnbgzdMHJnLV8RCHQ,9824
120
+ cxb/client/assets/index-BVyxzKtH.js,sha256=BoEJccSRRZecpdEomQSlNGAVVp6CEEkuz1xUVWXKORk,6015
121
+ cxb/client/assets/index-BdeNM69f.js,sha256=gkNccueAx5s9vUKp3ZE31Xg2wL4xfipeQ73y27N-61c,2035
122
+ cxb/client/assets/index-C6cPO4op.js,sha256=o_KVUiHGFlCJN96xkRu9orzLdrYUVTn_nJy9M0SQKrM,3621
123
+ cxb/client/assets/index-CC-A1ipE.js,sha256=dfVwbYUl2GzaPaRcm9bvcm3c0bi8WQj9RsSYaZneH2w,412
124
+ cxb/client/assets/index-CTxJ-lDp.js,sha256=CMXV0Oe3QRi4ITetl3tspH_h_4Wv8cG17-3V0PSN-2s,2821
125
+ cxb/client/assets/index-Cd-F5j_k.js,sha256=3a3gWjjYVTv16DAeDvUZPwFIqSXU13aVefFTWGLUx7E,3250
126
+ cxb/client/assets/index-D742rwaM.js,sha256=ivvY4EhQ0-ADpy1fu8TQtZuS6Qe707-SWWRWY-FWYJg,3381
127
+ cxb/client/assets/index-DTfhnhwd.js,sha256=YKLsTYhS7k2f1QwXRCyYdRn2vB_mwzsqinT1of7dcnc,354
128
+ cxb/client/assets/index-DdXRK7n9.js,sha256=UkW9YuMZ0_hZ3q9llWmO0UpkP4qNmXYMl1lLqmmZwQE,4047
129
+ cxb/client/assets/index-DtiCmB4o.js,sha256=nv7dVMmo1vex5ih5mMC9MNLLMGuCmy_ktOa1j4rXQ0M,1976
130
+ cxb/client/assets/index-NBrXBlLA.css,sha256=2mHbGZHluiEeZiiiubPFD2dGd6eL59WUa2qV8eSQqXs,376846
131
+ cxb/client/assets/index-ac-Buu_H.js,sha256=3tSelUaTXqOQbjivh39F9R8AoTY-PvFD4uGbFU_eEeQ,33755
132
+ cxb/client/assets/index-iYkH7C67.js,sha256=BFI8j9CqWYj8gKyfGZZp7dIrqoA7-Bnd9Za1-mTiLG0,3498
133
+ cxb/client/assets/info-B986lRiM.js,sha256=28efQ_ywUNQ5Od__oXFskmVy9ZWR48DgnuNs1bvoqlg,2226
134
+ cxb/client/assets/intl-messageformat-Dc5UU-HB.js,sha256=-5X21qzJD7TmWO2-DWDdxF8tql-Xdcq2QoUkBY54G00,6630
135
+ cxb/client/assets/jmespath-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
136
+ cxb/client/assets/json-schema-traverse-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
137
+ cxb/client/assets/json-source-map-DRgZidqy.js,sha256=2MWN6aGupPEd3Uk0Nki7JeURX8opsBCdC36BuxJRakI,4281
138
+ cxb/client/assets/jsonpath-plus-l0sNRNKZ.js,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
139
+ cxb/client/assets/jsonrepair-B30Dx381.js,sha256=HddBNX0dIMqRHTFT0VtfF33a4JgvMp9iCDYFWs9YGZs,6639
140
+ cxb/client/assets/lodash-es-DZVAA2ox.js,sha256=BvwNIFkh9lENGWunPRiHX9XxWJXVp17TiHEkaLLRpn0,25088
141
+ cxb/client/assets/marked-DKjyhwJX.js,sha256=qbydVfDQQTzCnxUXxgsroNwJZCzaf9QONfBPKmyOeEA,39673
142
+ cxb/client/assets/marked-gfm-heading-id-U5zO829x.js,sha256=237Q2hAeDNj3MAUeB3oQUy8Ov7oOYvvYprp2mt-HOU4,725
143
+ cxb/client/assets/marked-mangle-CDMeiHC6.js,sha256=WGaJNWouxQQExqwUZC5Dw3XvdVWQYHvEWXBtKXDDFHY,420
144
+ cxb/client/assets/memoize-one-BdPwpGay.js,sha256=jk5sfhm07ZMGDqLT1jqe27nsey2DIPbINp8U4bgP_QI,522
145
+ cxb/client/assets/natural-compare-lite-Bg2Xcf-o.js,sha256=9R5eHr3vTw4igb95odBTQ39r5ae-JGESqt0JQ27a1xc,808
146
+ cxb/client/assets/pagination-svelte-D5CyoiE_.js,sha256=-ppq9Dg-3wFdxmloAwaxmU4jU1HaypcXHo4OS6Dkk4s,4380
147
+ cxb/client/assets/pagination-svelte-v10nAbbM.css,sha256=7FtgdLOx-Wq4-TyF8CDDro2NF6jJwaNxbP3VI4g5uYI,3585
148
+ cxb/client/assets/plantuml-encoder-C47mzt9T.js,sha256=dpoe9r1lJmN-rbN-TAv2JnFgdWrFqExHUKs4JspxM7M,53041
149
+ cxb/client/assets/prismjs-DTUiLGJu.js,sha256=Nd_QmO8yEdbvZkliAEJjqktd3pFsLRRwJQt-Sd_pqXo,25847
150
+ cxb/client/assets/profile-BUf-tKMe.js,sha256=Ye_7fF8wYm6hR5u6KYRV1hMdweqW2q6_ZGpsNhrF1Y8,6527
151
+ cxb/client/assets/query-CNmXTsgf.js,sha256=iUE9_KIbABOdzswc4e8mcUs_PbDTo9V8nOmil0K7JSA,11363
152
+ cxb/client/assets/queryHelpers-C9iBWwqe.js,sha256=SkgdFEtjdTaD1cMVvKsdf5IQaMNUz74nTcj-pVDhQuw,501
153
+ cxb/client/assets/scroll-into-view-if-needed-KR58zyjF.js,sha256=Dw5KNhvWXAltb_qIh3e_f5ud5CQSxqHGHGlMf7BFGXc,897
154
+ cxb/client/assets/spaces-0oyGvpii.js,sha256=l9GvTbt-jiMyG8RGsCe3zAaYad0vQAhPjSBtdEp6htg,73
155
+ cxb/client/assets/style-mod-Bs6eFhZE.js,sha256=2P-Jrkn335imR7dWZ-lR1mVAhef16p050Fb80pVApVA,2194
156
+ cxb/client/assets/svelte-B2XmcTi_.js,sha256=bQk6kPr592D2TiwuMX7a6lt9YJB8UYeQMzvAtsxaP_s,61082
157
+ cxb/client/assets/svelte-awesome-COLlx0DN.css,sha256=5T3C0hIplhoXaGU3PJ-KPpPgB0uJTXN4n4eA21ChO3Y,448
158
+ cxb/client/assets/svelte-awesome-DhnMA6Q_.js,sha256=FEokMqwJ5WAhy_a2QNscieYkpS4mhAtR_NOPYzd7lD0,3858
159
+ cxb/client/assets/svelte-datatables-net-CY7LBj6I.js,sha256=PQZwUZsx3JjhI2W2Mwvsr4abTvEkbVl3osr3VpO-enk,4715
160
+ cxb/client/assets/svelte-floating-ui-BlS3sOAQ.js,sha256=lboSaEhc2oCTFSD5fkUaHSlxwtH8SGd4w3iLajcEySU,733
161
+ cxb/client/assets/svelte-i18n-CT2KkQaN.js,sha256=_LIkJDtwxRXQXVUvWxdc5z2BLNb4SwzSNyDE6lKWT3Q,7437
162
+ cxb/client/assets/svelte-jsoneditor-BzfX6Usi.css,sha256=5nvNv27PvUKYYgbHA1QpynYgdEoPCMoRzUlN8Ni2Fko,95514
163
+ cxb/client/assets/svelte-jsoneditor-CUGSvWId.js,sha256=IwxIH_L_eG1NdCYCtrkcEysxGflo66lL-SBa1cCYGMA,238060
164
+ cxb/client/assets/svelte-select-CegQKzqH.css,sha256=RW2XmPXMyUSPG672lEcT7Nhz1gaLfzTqoQjFG6Jb4zI,10652
165
+ cxb/client/assets/svelte-select-CjHAt_85.js,sha256=17YwjNfrW5d9x6GmOaHibTPVB_PZ7WBu9V_27MGcLrw,17176
166
+ cxb/client/assets/tailwind-merge-CJvxXMcu.js,sha256=PhlMjcf4Fs_9tgXtY97DfhD4crCI-S_zuZJACPZ4Q2E,25988
167
+ cxb/client/assets/tailwind-variants-Cj20BoQ3.js,sha256=Eofe15eg2u8pkjxy3tDaXMpq2etBq0Yzc15kSig_xEk,5489
168
+ cxb/client/assets/toast-B9WDyfyI.js,sha256=eJ0gQdgl4vAsHpcBUlXOPUrbNbk9Ii9Va5CdG0GRDGA,248
169
+ cxb/client/assets/tslib-pJfR_DrR.js,sha256=Kke-aujRqfYw2Ld4KusSVmRen6Lw2l8VKoYr2OW79mY,1231
170
+ cxb/client/assets/typewriter-editor-DkTVIJdm.js,sha256=YlETGGigYqnJdwnP4VkV7YAIoblWivupZuAHxu0KeDQ,52323
171
+ cxb/client/assets/user-DeK_NB5v.js,sha256=6VYTgmWgl7pVRgW6dD0gGKPKvvKnCEqpKy3ZlLOrQwQ,1253
172
+ cxb/client/assets/vanilla-picker-l5rcX3cq.js,sha256=B8KWTpJINp3oIXirDlwC683EYHZUPW76lAnHmeUPqEY,18814
173
+ cxb/client/assets/w3c-keyname-Vcq4gwWv.js,sha256=7NTN0-UTH-BpoJQqdC43Ec4Cdwj4Wv8viGg4W3EBqx8,1494
174
+ data_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
+ data_adapters/adapter.py,sha256=zR_yFd5ZI9vIQuUB6AUcF-LHgxOaxoREV2hogasivjQ,443
176
+ data_adapters/base_data_adapter.py,sha256=vG9WeHyw_c_BnH0EmudwPSNS6iMb5buQJiZS_9cm9p8,12055
177
+ data_adapters/helpers.py,sha256=0ySEDnQBMgFVXstFnPjXLtZ_-8IC4Q8oPXXrWokpFB8,660
178
+ data_adapters/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
+ data_adapters/file/adapter.py,sha256=SPVVfRIlyQDYfZJv4J8LmrDGtrVWddu76SvpnkXY3jM,77671
180
+ data_adapters/file/adapter_helpers.py,sha256=ExA_fAnRaPOLDuEY3hsLNR2BvvCscnS5Du6lWRtCvh0,34321
181
+ data_adapters/file/archive.py,sha256=B4VV6HNB3Bqd4tlqZ3jUQps8oqht_xOdBNOi9cLuo8Q,5423
182
+ data_adapters/file/create_index.py,sha256=lUcUkepo9QUIQDDDgoPAL74_n16cZ_q0NKnITGmbF6I,11888
183
+ data_adapters/file/create_users_folders.py,sha256=zOBgxMnqgEskYP4pgkmE6VYMca-ADLz8mXKPHJPYpys,1670
184
+ data_adapters/file/custom_validations.py,sha256=ziOERgTr-eY_zrN0C41B2FYmpEyoKiV4holh8an-p2c,1754
185
+ data_adapters/file/drop_index.py,sha256=OK3wXwaO9tUcHcJjqyLeBnkElzK35MZMi8YLGWdrXRw,1417
186
+ data_adapters/file/health_check.py,sha256=cMvwsXhjEykjrTyB3HtUn8QqKdtB_h5w8mGOEYPepzU,24221
187
+ data_adapters/file/redis_services.py,sha256=83STcca5fYFaEVLRYAxfUQXeUQZqJOT8XH-GBSbkR-E,39914
188
+ data_adapters/sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
+ data_adapters/sql/adapter.py,sha256=QXEJDtatIap18mrTWSqa9D7RnNZdjerkVJEGAv3i6FE,154825
190
+ data_adapters/sql/adapter_helpers.py,sha256=Eu22NElz2fMu6zyOsGsGrnAZcyWhHz9I__RJ9z6cwK0,15076
191
+ data_adapters/sql/create_tables.py,sha256=KqaXHTDOD8YaqGNc_e0iHHotd0WE3Kad_tBevtoGA20,17427
192
+ data_adapters/sql/create_users_folders.py,sha256=fm3P-CMcPX4b4DqXHKWMOtfX4RHdaev2nCDhYrS5cIs,1911
193
+ data_adapters/sql/db_to_json_migration.py,sha256=GTPO6-HblgD60qruhhVpWbKOke5xz9w_xwIr5NKK764,21009
194
+ data_adapters/sql/health_check_sql.py,sha256=2Z0mN5IMrjF72ZAiafBLkHklbXXWJzLp1K2TzjzPI1s,8569
195
+ data_adapters/sql/json_to_db_migration.py,sha256=KaubDrRZ3MfPLc-CNGPpsEccPELKr1V4GoBEBt1BNZo,21131
196
+ data_adapters/sql/update_query_policies.py,sha256=LUpkyzDAkiwwVWnXxPdVAU6atehW72ECAazj3mEYHK0,3857
197
+ languages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
+ languages/arabic.json,sha256=UL61rP9_M42CGfU94G5-1bXVUVnsJWXzoqhaXTXTJuM,910
199
+ languages/english.json,sha256=Y7eZ2X8c427_97qYrHOeGb2d725T-YlNNFVSi8FB7Kw,649
200
+ languages/kurdish.json,sha256=GgPLkVKyhIQjT7h3cPfDh0oyzg26znvBUe5X_Zz2TWI,864
201
+ languages/loader.py,sha256=3gf2WmfSQ-AVIpyLAm_5J5NcQlWqBxQHMjcUd04Pijs,381
202
+ models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
203
+ models/api.py,sha256=f5X56dudyEysPmDuI5grM2RRCXuIQoehaAB6wMAGG28,6473
204
+ models/core.py,sha256=tEb7cbnC71yE9SDluynj7dE3U8Ed-EbF3uRJizy-uuU,16880
205
+ models/enums.py,sha256=y2G5EKIc8FusVW4JvEozGFKL2GxjtuOK7k3zSguP4dc,5395
206
+ plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
+ plugins/action_log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
+ plugins/action_log/plugin.py,sha256=-JY_iIIJJjFFofvpMoCxNJMXNr_KC6kA8TiwvvoxaWI,4434
209
+ plugins/admin_notification_sender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
+ plugins/admin_notification_sender/plugin.py,sha256=sxVGW8qtRmDEQeS6QD3F3IqzZOoh_9H_y2TsRCDkXaw,4771
211
+ plugins/ldap_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
212
+ plugins/ldap_manager/plugin.py,sha256=c05pKGsyLETMrheCqIw3gZOSLdTWvEDq_WCl0Q_0yXQ,3030
213
+ plugins/local_notification/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
+ plugins/local_notification/plugin.py,sha256=FObVxID5Bg0G_xStpJYZkg706wu_CpUqk09DmzHAyPQ,4074
215
+ plugins/realtime_updates_notifier/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
+ plugins/realtime_updates_notifier/plugin.py,sha256=Gcvob4ShSs2Ht1hLD2vtwhR_PSFYMv3_l_VPM2opTYs,2374
217
+ plugins/redis_db_update/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
218
+ plugins/redis_db_update/plugin.py,sha256=z05k1zNJgBnKPj-jrtMUeI9br75ZPlifbzL0HxpRnXg,7128
219
+ plugins/resource_folders_creation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
220
+ plugins/resource_folders_creation/plugin.py,sha256=OwYPtRjMt2esAAEdv1FjdZgjEz01yt2xOZQi3nB0kEQ,3327
221
+ plugins/system_notification_sender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
+ plugins/system_notification_sender/plugin.py,sha256=MUOujwyRJ3yQrXwZ-X4qSdx0ZNU2c-sYy0d0-U8twoA,8253
223
+ plugins/update_access_controls/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
224
+ plugins/update_access_controls/plugin.py,sha256=43UV4vg-zxBF_7Bv0AZH6gU0Bgy2ybapNK21wJTF05k,301
225
+ pytests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
226
+ pytests/api_user_models_erros_test.py,sha256=6VWLIhazYjz7avXIMIDpT6doiBO5FVzGsGJ3Cv8cXyg,583
227
+ pytests/api_user_models_requests_test.py,sha256=1AYZcMwa-AVeGrhTgwIkwqw3w7_CDPkbaJ0YDxLLKdY,3859
228
+ pytests/archive_test.py,sha256=rk6jEZf-Ud7ReyH4_xJD-9SzNRz8p2Sg0qQX04VCw9M,2347
229
+ pytests/base_test.py,sha256=d8prlME29tBnirW-3_HUtixcxUMPiLfJHRDiNkxOCRM,9902
230
+ pytests/get_settings_test.py,sha256=AEqjnHsQjkVDqwVqtn2rN6mep4sAC_apDCgiZT4YQ28,281
231
+ pytests/json_to_db_migration_test.py,sha256=JXO0knKPccXVIbKmyuD0yOi5fSBHmXm_NgVdO1_U7AE,9411
232
+ pytests/service_test.py,sha256=92lqzKQoVMkj9XliPBjkGBxXb4zXsobb2WPfW5buQfc,807
233
+ pytests/test_info.py,sha256=IOKtcEPM_03byhp5dSt2YbhTC5u_ORPahQLifZWBpjg,2074
234
+ pytests/test_status.py,sha256=YFuBTsSd5hkpHp16GAbQ_I03RL_o2_yW-92ZNgKJry0,453
235
+ utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
236
+ utils/access_control.py,sha256=8cCKr-6bL-Shl8j8xtfjEykMPGy6wkbNz-NRwLCdx-Y,11757
237
+ utils/async_request.py,sha256=Lm2xGXLeph7P1_fLhhNJDhPubKT2ncFn_Ueft4JVoeI,255
238
+ utils/exporter.py,sha256=HjcZCzcuH6N6f7Gn2hkTEeEFyo-MfrsiZUYAE-9kkVQ,9718
239
+ utils/firebase_notifier.py,sha256=nAeCUo5Mtwxygwj8ONlw8ZAtL_ekdJBabvU0z2dZ3NY,2391
240
+ utils/generate_email.py,sha256=25i1iNVDfyRDq7vvZVFkaTYfMZFkAg1ZVQO2GdK7yRQ,1122
241
+ utils/helpers.py,sha256=gNxLg09cclRWrKNBy2pwGZsxGA0iFS5iZ_nyra3SmnI,9928
242
+ utils/hypercorn_config.py,sha256=q28HGRLWo9wjOVF183WwFPs3HQo4Nexc7q_7dmSVHRI,311
243
+ utils/internal_error_code.py,sha256=KGlXPC5YruPmb0ORVY7U3EEVpBgSLuU4lHdXgwUVN2M,1637
244
+ utils/jwt.py,sha256=Y7Gp3imvNwAtWOg8V0etvsEFtswmCYKK_U4ljZ15Pps,4590
245
+ utils/logger.py,sha256=peejQnq9B0eaHwdLynBHT7FUCq7jCX_DhkX6BcxrLkA,5274
246
+ utils/middleware.py,sha256=PAVwnLzs0cyT_ZIgc1slqadEOJNCPliLhOTjaYx0Waw,3399
247
+ utils/notification.py,sha256=O9oOeU9cRm3e9UAc-VJONWx-TzqbCMddFNaTQilE6ks,2479
248
+ utils/password_hashing.py,sha256=NZZsmtPG9Vkocipk3DlDKKHKUdxRKA4yOhCurD8dUhg,356
249
+ utils/plugin_manager.py,sha256=brQoE4u2WxH6EMvUOYQlnOnSUbKwha92-UfAgWUaHRU,7645
250
+ utils/query_policies_helper.py,sha256=Bf5qriQJ8CpUqPaQg5cdvNrn-92l_jKxHwsvXdegAZo,4796
251
+ utils/regex.py,sha256=cv9b_l_e8tz42mKckeeyDgypKqh2e71E28co2iuEVxA,2286
252
+ utils/repository.py,sha256=9L-IvQ0Js0SQ5OR-Rh0i2Wdu4H9H06r8eE84hfBIu7Q,18313
253
+ utils/router_helper.py,sha256=Tgoq3oakejdEeyeVieTNk38JsPZ8x5RuR0kw2THc1mI,604
254
+ utils/settings.py,sha256=yjiudcgLVSIvKLQo9JtukmeLSU-6YTdggzWfZxiFoO8,5720
255
+ utils/sms_notifier.py,sha256=04D6D_ldk3S9SojI7_381pqLc8v9lligeNHAysohz7w,550
256
+ utils/social_sso.py,sha256=Dm1W6U9OwKbAeUwM-kwJBHFEoreeoN-s-RHdOZ1-cNg,2216
257
+ utils/ticket_sys_utils.py,sha256=9QAlW2iiy8KyxQRBDj_WmzS5kKb0aYJmGwd4qzmGVqo,7005
258
+ utils/web_notifier.py,sha256=QM87VVid2grC5lK3NdS1yzz0z1wXljr4GChJOeK86W4,843
259
+ utils/templates/activation.html.j2,sha256=XAMKCdoqONoc4ZQucD0yV-Pg5DlHHASZrTVItNS-iBE,640
260
+ utils/templates/reminder.html.j2,sha256=aoS8bTs56q4hjAZKsb0jV9c-PIURBELuBOpT_qPZNVU,639
261
+ dmart-1.4.6.dist-info/METADATA,sha256=0jB-34rhbCWG-Ox3mtL0GkRMt4DZ8fYarnibCLJZ4TA,2068
262
+ dmart-1.4.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
263
+ dmart-1.4.6.dist-info/entry_points.txt,sha256=GjfoGh1bpxuU9HHGJzbtCFPNptHv9TryxHMN3uBSKpg,37
264
+ dmart-1.4.6.dist-info/top_level.txt,sha256=iPbBisVNr4KDWyZhxMl2x3oJSgf71knWXMh21_xutrE,266
265
+ dmart-1.4.6.dist-info/RECORD,,
@@ -2,6 +2,7 @@ alembic
2
2
  api
3
3
  bundler
4
4
  config
5
+ cxb
5
6
  data_adapters
6
7
  data_generator
7
8
  dmart
dmart.py CHANGED
@@ -11,6 +11,7 @@ import subprocess
11
11
  import sys
12
12
  import time
13
13
  import warnings
14
+ import webbrowser
14
15
  from multiprocessing import freeze_support
15
16
  from pathlib import Path
16
17
 
@@ -29,6 +30,7 @@ from utils.settings import settings
29
30
  freeze_support()
30
31
 
31
32
  commands = """ server
33
+ serve
32
34
  hyper
33
35
  health-check
34
36
  create-index
@@ -49,7 +51,10 @@ sentinel = object()
49
51
  def hypercorn_main() -> int:
50
52
  parser = argparse.ArgumentParser()
51
53
  parser.add_argument(
52
- "application", help="The application to dispatch to as path.to.module:instance.path"
54
+ "application",
55
+ help="The application to dispatch to as path.to.module:instance.path",
56
+ nargs="?",
57
+ default="main:app"
53
58
  )
54
59
  parser.add_argument("--access-log", help="Deprecated, see access-logfile", default=sentinel)
55
60
  parser.add_argument(
@@ -83,7 +88,7 @@ def hypercorn_main() -> int:
83
88
  "-c",
84
89
  "--config",
85
90
  help="Location of a TOML config file, or when prefixed with `file:` a Python file, or when prefixed with `python:` a Python module.", # noqa: E501
86
- default=None,
91
+ default="hypercorn_config.toml",
87
92
  )
88
93
  parser.add_argument(
89
94
  "--debug",
@@ -210,6 +215,17 @@ def hypercorn_main() -> int:
210
215
  parser.add_argument(
211
216
  "-u", "--user", help="User to own any unix sockets.", default=sentinel, type=int
212
217
  )
218
+ parser.add_argument(
219
+ "--open-cxb",
220
+ help="Open CXB page in browser after server starts",
221
+ action="store_true",
222
+ default=False,
223
+ )
224
+ parser.add_argument(
225
+ "--cxb-config",
226
+ help="Path to CXB config.json",
227
+ default=sentinel,
228
+ )
213
229
 
214
230
  def _convert_verify_mode(value: str) -> ssl.VerifyMode:
215
231
  try:
@@ -239,7 +255,17 @@ def hypercorn_main() -> int:
239
255
  type=int,
240
256
  )
241
257
  args = parser.parse_args(sys.argv[1:])
242
- config = Config.from_toml(args.config)
258
+
259
+ # Set defaults if config file is not found
260
+ config = Config()
261
+ if args.config and os.path.exists(args.config):
262
+ config = Config.from_toml(args.config)
263
+ else:
264
+ # Default Hypercorn configuration
265
+ config.backlog = 2000
266
+ config.workers = 1
267
+ config.bind = ["localhost:8282"]
268
+
243
269
  config.application_path = args.application
244
270
 
245
271
  if args.log_level is not sentinel:
@@ -314,6 +340,9 @@ def hypercorn_main() -> int:
314
340
  config.websocket_ping_interval = args.websocket_ping_interval
315
341
  if args.workers is not sentinel:
316
342
  config.workers = args.workers
343
+
344
+ if args.cxb_config is not sentinel:
345
+ os.environ["DMART_CXB_CONFIG"] = args.cxb_config
317
346
 
318
347
  if len(args.binds) > 0:
319
348
  config.bind = args.binds
@@ -323,6 +352,31 @@ def hypercorn_main() -> int:
323
352
  config.quic_bind = args.quic_binds
324
353
  if len(args.server_names) > 0:
325
354
  config.server_names = args.server_names
355
+
356
+ if args.open_cxb:
357
+ port = 8282
358
+ host = "127.0.0.1"
359
+
360
+ if len(config.bind) > 0:
361
+ try:
362
+ bind_parts = config.bind[0].split(":")
363
+ if len(bind_parts) == 2:
364
+ host = bind_parts[0]
365
+ port = int(bind_parts[1])
366
+ elif len(bind_parts) == 1:
367
+ host = bind_parts[0]
368
+ except Exception as e:
369
+ print(e)
370
+ pass
371
+
372
+ url = f"http://{host}:{port}/cxb/"
373
+
374
+ def open_browser():
375
+ time.sleep(2)
376
+ webbrowser.open(url)
377
+
378
+ import threading
379
+ threading.Thread(target=open_browser, daemon=True).start()
326
380
 
327
381
  return run(config)
328
382
 
@@ -336,13 +390,29 @@ def main():
336
390
 
337
391
  match sys.argv[0]:
338
392
  case "hyper":
339
- if len(sys.argv) == 1:
340
- print("Running Hypercorn with default settings")
341
- default_params = "main:app --config hypercorn_config.toml"
342
- print(f">{default_params}")
343
- sys.argv = ["hyper"] + default_params.split(" ")
344
393
  hypercorn_main()
345
- case "server":
394
+ case "server" | "serve":
395
+ open_cxb = False
396
+ if "--open-cxb" in sys.argv:
397
+ open_cxb = True
398
+ sys.argv.remove("--open-cxb")
399
+
400
+ if "--cxb-config" in sys.argv:
401
+ idx = sys.argv.index("--cxb-config")
402
+ if idx + 1 < len(sys.argv):
403
+ os.environ["DMART_CXB_CONFIG"] = sys.argv[idx + 1]
404
+ sys.argv.pop(idx + 1)
405
+ sys.argv.pop(idx)
406
+
407
+ if open_cxb:
408
+ url = f"http://{settings.listening_host}:{settings.listening_port}/cxb/"
409
+ def open_browser():
410
+ time.sleep(1)
411
+ webbrowser.open(url)
412
+
413
+ import threading
414
+ threading.Thread(target=open_browser, daemon=True).start()
415
+
346
416
  asyncio.run(server())
347
417
  case "health-check":
348
418
  parser = argparse.ArgumentParser(
languages/loader.py CHANGED
@@ -1,4 +1,3 @@
1
- import glob
2
1
  import json
3
2
  from pathlib import Path
4
3
 
main.py CHANGED
@@ -5,6 +5,7 @@ from starlette.datastructures import UploadFile
5
5
  from contextlib import asynccontextmanager
6
6
  import asyncio
7
7
  import json
8
+ import os
8
9
  from os import getpid
9
10
  import sys
10
11
  import time
@@ -24,11 +25,12 @@ from fastapi.logger import logger
24
25
  from fastapi.encoders import jsonable_encoder
25
26
  from fastapi.exceptions import RequestValidationError
26
27
  from utils.access_control import access_control
27
- from fastapi.responses import ORJSONResponse
28
+ from fastapi.responses import ORJSONResponse, FileResponse
28
29
  from hypercorn.asyncio import serve
29
30
  from hypercorn.config import Config
30
31
  from starlette.concurrency import iterate_in_threadpool
31
32
  from starlette.exceptions import HTTPException as StarletteHTTPException
33
+ from starlette.staticfiles import StaticFiles
32
34
  import models.api as api
33
35
  from utils.settings import settings
34
36
  from asgi_correlation_id import CorrelationIdMiddleware
@@ -40,6 +42,20 @@ from api.user.router import router as user
40
42
  from api.info.router import router as info, git_info
41
43
  from utils.internal_error_code import InternalErrorCode
42
44
 
45
+
46
+ class SPAStaticFiles(StaticFiles):
47
+ async def get_response(self, path: str, scope) -> Response:
48
+ try:
49
+ return await super().get_response(path, scope)
50
+ except StarletteHTTPException as ex:
51
+ if ex.status_code == 404 and path != "index.html" and not os.path.splitext(path)[1]:
52
+ try:
53
+ return await super().get_response("index.html", scope)
54
+ except StarletteHTTPException:
55
+ pass
56
+ raise ex
57
+
58
+
43
59
  @asynccontextmanager
44
60
  async def lifespan(app: FastAPI):
45
61
  logger.info("Starting up")
@@ -463,6 +479,45 @@ app.include_router(
463
479
  asyncio.run(plugin_manager.load_plugins(app, capture_body))
464
480
 
465
481
 
482
+ cxb_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "cxb")
483
+ if not os.path.exists(cxb_path):
484
+ project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
485
+ cxb_dist_path = os.path.join(project_root, "cxb", "dist", "client")
486
+ if os.path.isdir(cxb_dist_path):
487
+ cxb_path = cxb_dist_path
488
+
489
+ if os.path.isdir(cxb_path):
490
+ @app.get(f"{settings.cxb_url}/config.json", include_in_schema=False)
491
+ async def get_cxb_config():
492
+ cxb_config = os.getenv("DMART_CXB_CONFIG")
493
+ if cxb_config and os.path.exists(cxb_config):
494
+ return FileResponse(cxb_config)
495
+
496
+ if os.path.exists("config.json"):
497
+ return FileResponse("config.json")
498
+
499
+ user_config = settings.spaces_folder / "config.json"
500
+ if user_config.exists():
501
+ return FileResponse(user_config)
502
+
503
+ bundled_config = os.path.join(cxb_path, "config.json")
504
+ if os.path.exists(bundled_config):
505
+ return FileResponse(bundled_config)
506
+
507
+ return {
508
+ "title": "DMART Unified Data Platform",
509
+ "footer": "dmart.cc unified data platform",
510
+ "short_name": "dmart",
511
+ "display_name": "dmart",
512
+ "description": "dmart unified data platform",
513
+ "default_language": "en",
514
+ "languages": { "ar": "العربية", "en": "English" },
515
+ "backend": f"{settings.app_url}" if settings.app_url else f"http://{settings.listening_host}:{settings.listening_port}",
516
+ "websocket": settings.websocket_url if settings.websocket_url else f"ws://{settings.listening_host}:{settings.websocket_port}/ws"
517
+ }
518
+
519
+ app.mount(settings.cxb_url, SPAStaticFiles(directory=cxb_path, html=True), name="cxb")
520
+
466
521
  @app.options("/{x:path}", include_in_schema=False)
467
522
  async def myoptions():
468
523
  return Response(status_code=status.HTTP_200_OK)
@@ -503,4 +558,3 @@ if __name__ == "__main__":
503
558
  asyncio.run(main())
504
559
  except Exception as e:
505
560
  print("[!1server]", e)
506
-
@@ -69,7 +69,7 @@ class Plugin(PluginBase):
69
69
  retrieve_json_payload=True,
70
70
  space_name="management",
71
71
  subpath="notifications/system",
72
- search=f"@payload.body.on_space:{data.space_name} @payload.body.on_subpath:{data.subpath.lstrip("/")} @payload.body.on_action:{data.action_type}",
72
+ search=f"@payload.body.on_space:{data.space_name} @payload.body.on_subpath:{data.subpath.lstrip('/')} @payload.body.on_action:{data.action_type}",
73
73
  limit=30,
74
74
  offset=0
75
75
  ), "dmart")
utils/generate_email.py CHANGED
@@ -1,4 +1,3 @@
1
- import os
2
1
  from jinja2 import Environment, FileSystemLoader
3
2
  from pathlib import Path
4
3
 
@@ -51,6 +51,21 @@ def generate_query_policies(
51
51
  return query_policies
52
52
 
53
53
 
54
+ def matches_subpath(perm_key: str, space_name: str, query_subpath: str) -> bool:
55
+ if not perm_key.startswith(f"{space_name}:"):
56
+ return False
57
+
58
+ parts = perm_key.split(":", 2)
59
+ if len(parts) < 3:
60
+ return False
61
+
62
+ perm_subpath = parts[1].lstrip("/")
63
+ return (
64
+ query_subpath == perm_subpath
65
+ or query_subpath.startswith(perm_subpath + "/")
66
+ )
67
+
68
+
54
69
  async def get_user_query_policies(
55
70
  db,
56
71
  user_shortname: str,
@@ -72,18 +87,19 @@ async def get_user_query_policies(
72
87
  user_groups = (await db.load_user_meta(user_shortname)).groups or []
73
88
  user_groups.append(user_shortname)
74
89
 
90
+ query_subpath = subpath.lstrip("/")
91
+
75
92
  filtered_permissions = {
76
93
  perm_key: permission
77
94
  for perm_key, permission in user_permissions.items()
78
- if (
79
- is_space or
80
- perm_key.startswith(f'{space_name}:{subpath.lstrip("/")}') or
81
- perm_key.startswith(f'{space_name}:__all_subpaths__') or
82
- perm_key.startswith(settings.all_spaces_mw)
83
- )
84
- and 'query' in permission.get('allowed_actions', [])
95
+ if 'query' in permission.get('allowed_actions', [])
96
+ and (
97
+ is_space
98
+ or perm_key.startswith(settings.all_spaces_mw)
99
+ or perm_key.startswith(f'{space_name}:__all_subpaths__')
100
+ or matches_subpath(perm_key, space_name, query_subpath)
101
+ )
85
102
  }
86
-
87
103
  sql_query_policies = []
88
104
  for perm_key, permission in filtered_permissions.items():
89
105
  perm_key = perm_key.replace(settings.all_spaces_mw, space_name)
utils/settings.py CHANGED
@@ -5,7 +5,6 @@ import os
5
5
  import re
6
6
  import string
7
7
  import random
8
- import sys
9
8
  from venv import logger
10
9
 
11
10
  from pydantic import Field
@@ -17,6 +16,7 @@ class Settings(BaseSettings):
17
16
  """Main settings class"""
18
17
 
19
18
  app_url: str = ""
19
+ cxb_url: str = "/cxb"
20
20
  public_app_url: str = ""
21
21
  app_name: str = "dmart"
22
22
  websocket_url: str = "" #"http://127.0.0.1:8484"
@@ -78,7 +78,8 @@ class Settings(BaseSettings):
78
78
  session_inactivity_ttl: int = 0 # Set initially to 0 to disable session timeout. Possible value : 60 * 60 * 24 * 7 # 7 days
79
79
  request_timeout: int = 35 # In seconds the time of dmart requests.
80
80
  jq_timeout: int = 2 # secs
81
-
81
+ is_sha_required: bool = False
82
+ logout_on_pwd_change: bool = True
82
83
  url_shorter_expires: int = 60 * 60 * 48 # 48 hours
83
84
 
84
85
  google_client_id: str = ""
@@ -96,7 +97,7 @@ class Settings(BaseSettings):
96
97
  active_operational_db: str = "redis" # allowed values: redis, manticore
97
98
  active_data_db: str = "file" # allowed values: file, sql
98
99
 
99
- database_driver: str = 'postgresql+psycopg'
100
+ database_driver: str = 'sqlite+pysqlite'
100
101
  database_username: str = 'postgres'
101
102
  database_password: str = ''
102
103
  database_host: str = 'localhost'
@@ -157,7 +158,7 @@ try:
157
158
  Settings()
158
159
  )
159
160
  except Exception as e:
160
- # logger.error(f"Failed to load settings.\nError: {e}")
161
+ logger.error(f"Failed to load settings.\nError: {e}")
161
162
  # sys.exit(1)
162
163
  pass
163
164