dmart 0.1.9__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.
- alembic/__init__.py +0 -0
- alembic/env.py +91 -0
- alembic/scripts/__init__.py +0 -0
- alembic/scripts/calculate_checksums.py +77 -0
- alembic/scripts/migration_f7a4949eed19.py +28 -0
- alembic/versions/0f3d2b1a7c21_add_authz_materialized_views.py +87 -0
- alembic/versions/10d2041b94d4_last_checksum_history.py +62 -0
- alembic/versions/1cf4e1ee3cb8_ext_permission_with_filter_fields_values.py +33 -0
- alembic/versions/26bfe19b49d4_rm_failedloginattempts.py +42 -0
- alembic/versions/3c8bca2219cc_add_otp_table.py +38 -0
- alembic/versions/6675fd9dfe42_remove_unique_from_sessions_table.py +36 -0
- alembic/versions/71bc1df82e6a_adding_user_last_login_at.py +43 -0
- alembic/versions/74288ccbd3b5_initial.py +264 -0
- alembic/versions/7520a89a8467_rm_activesession_table.py +39 -0
- alembic/versions/848b623755a4_make_created_nd_updated_at_required.py +138 -0
- alembic/versions/8640dcbebf85_add_notes_to_users.py +32 -0
- alembic/versions/91c94250232a_adding_fk_on_owner_shortname.py +104 -0
- alembic/versions/98ecd6f56f9a_ext_meta_with_owner_group_shortname.py +66 -0
- alembic/versions/9aae9138c4ef_indexing_created_at_updated_at.py +80 -0
- alembic/versions/__init__.py +0 -0
- alembic/versions/b53f916b3f6d_json_to_jsonb.py +492 -0
- alembic/versions/eb5f1ec65156_adding_user_locked_to_device.py +36 -0
- alembic/versions/f7a4949eed19_adding_query_policies_to_meta.py +60 -0
- api/__init__.py +0 -0
- api/info/__init__.py +0 -0
- api/info/router.py +109 -0
- api/managed/__init__.py +0 -0
- api/managed/router.py +1541 -0
- api/managed/utils.py +1850 -0
- api/public/__init__.py +0 -0
- api/public/router.py +758 -0
- api/qr/__init__.py +0 -0
- api/qr/router.py +108 -0
- api/user/__init__.py +0 -0
- api/user/model/__init__.py +0 -0
- api/user/model/errors.py +14 -0
- api/user/model/requests.py +165 -0
- api/user/model/responses.py +11 -0
- api/user/router.py +1401 -0
- api/user/service.py +270 -0
- bundler.py +44 -0
- config/__init__.py +0 -0
- config/channels.json +11 -0
- config/notification.json +17 -0
- data_adapters/__init__.py +0 -0
- data_adapters/adapter.py +16 -0
- data_adapters/base_data_adapter.py +467 -0
- data_adapters/file/__init__.py +0 -0
- data_adapters/file/adapter.py +2043 -0
- data_adapters/file/adapter_helpers.py +1013 -0
- data_adapters/file/archive.py +150 -0
- data_adapters/file/create_index.py +331 -0
- data_adapters/file/create_users_folders.py +52 -0
- data_adapters/file/custom_validations.py +68 -0
- data_adapters/file/drop_index.py +40 -0
- data_adapters/file/health_check.py +560 -0
- data_adapters/file/redis_services.py +1110 -0
- data_adapters/helpers.py +27 -0
- data_adapters/sql/__init__.py +0 -0
- data_adapters/sql/adapter.py +3210 -0
- data_adapters/sql/adapter_helpers.py +491 -0
- data_adapters/sql/create_tables.py +451 -0
- data_adapters/sql/create_users_folders.py +53 -0
- data_adapters/sql/db_to_json_migration.py +482 -0
- data_adapters/sql/health_check_sql.py +232 -0
- data_adapters/sql/json_to_db_migration.py +454 -0
- data_adapters/sql/update_query_policies.py +101 -0
- data_generator.py +81 -0
- dmart-0.1.9.dist-info/METADATA +64 -0
- dmart-0.1.9.dist-info/RECORD +149 -0
- dmart-0.1.9.dist-info/WHEEL +5 -0
- dmart-0.1.9.dist-info/entry_points.txt +2 -0
- dmart-0.1.9.dist-info/top_level.txt +23 -0
- dmart.py +513 -0
- get_settings.py +7 -0
- languages/__init__.py +0 -0
- languages/arabic.json +15 -0
- languages/english.json +16 -0
- languages/kurdish.json +14 -0
- languages/loader.py +13 -0
- main.py +506 -0
- migrate.py +24 -0
- models/__init__.py +0 -0
- models/api.py +203 -0
- models/core.py +597 -0
- models/enums.py +255 -0
- password_gen.py +8 -0
- plugins/__init__.py +0 -0
- plugins/action_log/__init__.py +0 -0
- plugins/action_log/plugin.py +121 -0
- plugins/admin_notification_sender/__init__.py +0 -0
- plugins/admin_notification_sender/plugin.py +124 -0
- plugins/ldap_manager/__init__.py +0 -0
- plugins/ldap_manager/plugin.py +100 -0
- plugins/local_notification/__init__.py +0 -0
- plugins/local_notification/plugin.py +123 -0
- plugins/realtime_updates_notifier/__init__.py +0 -0
- plugins/realtime_updates_notifier/plugin.py +58 -0
- plugins/redis_db_update/__init__.py +0 -0
- plugins/redis_db_update/plugin.py +188 -0
- plugins/resource_folders_creation/__init__.py +0 -0
- plugins/resource_folders_creation/plugin.py +81 -0
- plugins/system_notification_sender/__init__.py +0 -0
- plugins/system_notification_sender/plugin.py +188 -0
- plugins/update_access_controls/__init__.py +0 -0
- plugins/update_access_controls/plugin.py +9 -0
- pytests/__init__.py +0 -0
- 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
- run_notification_campaign.py +98 -0
- scheduled_notification_handler.py +121 -0
- schema_migration.py +208 -0
- schema_modulate.py +192 -0
- set_admin_passwd.py +55 -0
- sync.py +202 -0
- utils/__init__.py +0 -0
- utils/access_control.py +306 -0
- utils/async_request.py +8 -0
- utils/exporter.py +309 -0
- utils/firebase_notifier.py +57 -0
- utils/generate_email.py +38 -0
- utils/helpers.py +352 -0
- utils/hypercorn_config.py +12 -0
- utils/internal_error_code.py +60 -0
- utils/jwt.py +124 -0
- utils/logger.py +167 -0
- utils/middleware.py +99 -0
- utils/notification.py +75 -0
- utils/password_hashing.py +16 -0
- utils/plugin_manager.py +215 -0
- utils/query_policies_helper.py +112 -0
- utils/regex.py +44 -0
- utils/repository.py +529 -0
- utils/router_helper.py +19 -0
- utils/settings.py +165 -0
- utils/sms_notifier.py +21 -0
- utils/social_sso.py +67 -0
- utils/templates/activation.html.j2 +26 -0
- utils/templates/reminder.html.j2 +17 -0
- utils/ticket_sys_utils.py +203 -0
- utils/web_notifier.py +29 -0
- websocket.py +231 -0
api/info/router.py
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# import asyncio
|
|
2
|
+
import json
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from fastapi import APIRouter, Depends, status
|
|
5
|
+
from utils.internal_error_code import InternalErrorCode
|
|
6
|
+
from utils.settings import settings
|
|
7
|
+
import models.api as api
|
|
8
|
+
from datetime import datetime
|
|
9
|
+
import subprocess
|
|
10
|
+
from os import getpid
|
|
11
|
+
import socket
|
|
12
|
+
from utils.jwt import JWTBearer
|
|
13
|
+
from fastapi.responses import ORJSONResponse
|
|
14
|
+
|
|
15
|
+
router = APIRouter(default_response_class=ORJSONResponse)
|
|
16
|
+
|
|
17
|
+
git_info: dict[str,str|None] = {}
|
|
18
|
+
service_start_time: datetime = datetime.now()
|
|
19
|
+
|
|
20
|
+
info_json_path = Path(__file__).resolve().parent.parent.parent / "info.json"
|
|
21
|
+
if info_json_path.exists():
|
|
22
|
+
with open(info_json_path) as info:
|
|
23
|
+
git_info = json.load(info)
|
|
24
|
+
else:
|
|
25
|
+
branch_cmd = "git rev-parse --abbrev-ref HEAD"
|
|
26
|
+
result, _ = subprocess.Popen(branch_cmd.split(" "), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
|
|
27
|
+
branch = None if result is None or len(result) == 0 else result.decode().strip()
|
|
28
|
+
|
|
29
|
+
version_cmd = "git rev-parse --short HEAD"
|
|
30
|
+
result, _ = subprocess.Popen(version_cmd.split(" "), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
|
|
31
|
+
version = None if result is None or len(result) == 0 else result.decode().strip()
|
|
32
|
+
|
|
33
|
+
tag_cmd = "git describe --tags"
|
|
34
|
+
result, _ = subprocess.Popen(tag_cmd.split(" "), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
|
|
35
|
+
tag = None if result is None or len(result) == 0 else result.decode().strip()
|
|
36
|
+
|
|
37
|
+
version_date_cmd = "git show --pretty=format:'%ad'"
|
|
38
|
+
result, _ = subprocess.Popen(version_date_cmd.split(" "), stdout=subprocess.PIPE,
|
|
39
|
+
stderr=subprocess.PIPE).communicate()
|
|
40
|
+
version_date = None if result is None or len(result) == 0 else result.decode().split("\n")[0]
|
|
41
|
+
|
|
42
|
+
git_info = {
|
|
43
|
+
"commit_hash": version,
|
|
44
|
+
"date": version_date,
|
|
45
|
+
"branch": branch,
|
|
46
|
+
"tag": tag
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
server = socket.gethostname()
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@router.get("/me", response_model=api.Response, response_model_exclude_none=True)
|
|
53
|
+
async def get_me(shortname=Depends(JWTBearer())) -> api.Response:
|
|
54
|
+
return api.Response(status=api.Status.success, attributes={"shortname": shortname})
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@router.get("/settings", response_model=api.Response, response_model_exclude_none=True)
|
|
58
|
+
async def get_settings(shortname=Depends(JWTBearer())) -> api.Response:
|
|
59
|
+
if shortname != 'dmart':
|
|
60
|
+
raise api.Exception(
|
|
61
|
+
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
62
|
+
error=api.Error(
|
|
63
|
+
type="access",
|
|
64
|
+
code=InternalErrorCode.NOT_ALLOWED,
|
|
65
|
+
message="You don't have permission to this action [21]"
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
return api.Response(status=api.Status.success, attributes=settings.model_dump())
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@router.get("/manifest", response_model=api.Response, response_model_exclude_none=True)
|
|
72
|
+
async def get_manifest(_=Depends(JWTBearer())) -> api.Response:
|
|
73
|
+
now = datetime.now()
|
|
74
|
+
manifest = {
|
|
75
|
+
"name": "DMART",
|
|
76
|
+
"type": "microservice",
|
|
77
|
+
"description": "Structured CMS/IMS",
|
|
78
|
+
"service_details": {
|
|
79
|
+
"server": server,
|
|
80
|
+
"process_id": getpid(),
|
|
81
|
+
"start_time": service_start_time.isoformat(),
|
|
82
|
+
"current_time": now.isoformat(),
|
|
83
|
+
"running_for": str(now - service_start_time)
|
|
84
|
+
},
|
|
85
|
+
"git": git_info,
|
|
86
|
+
}
|
|
87
|
+
return api.Response(status=api.Status.success, attributes=manifest)
|
|
88
|
+
|
|
89
|
+
"""
|
|
90
|
+
@router.get("/in-loop-tasks")
|
|
91
|
+
async def get_in_loop_tasks(_=Depends(JWTBearer())) -> api.Response:
|
|
92
|
+
tasks = asyncio.all_tasks()
|
|
93
|
+
|
|
94
|
+
tasks_data: list[dict[str, str]] = []
|
|
95
|
+
for task in tasks:
|
|
96
|
+
tasks_data.append({
|
|
97
|
+
"name": task.get_name(),
|
|
98
|
+
"coroutine": str(task.get_coro()),
|
|
99
|
+
"stack": str(task.get_stack())
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
return api.Response(
|
|
103
|
+
status=api.Status.success,
|
|
104
|
+
attributes={
|
|
105
|
+
"tasks_count": len(tasks_data),
|
|
106
|
+
"tasks": tasks_data
|
|
107
|
+
},
|
|
108
|
+
)
|
|
109
|
+
"""
|
api/managed/__init__.py
ADDED
|
File without changes
|