diff --git a/app/__main__.py b/app/__main__.py index e1cac15..03d0918 100644 --- a/app/__main__.py +++ b/app/__main__.py @@ -1,10 +1,9 @@ +import asyncio import sys +import time import traceback from asyncio import sleep from datetime import datetime -import asyncio, sys - -import time from app.api import app from app.bot import dp as uploader_bot_dp diff --git a/app/api/__init__.py b/app/api/__init__.py index 86a293a..28921d3 100644 --- a/app/api/__init__.py +++ b/app/api/__init__.py @@ -1,6 +1,7 @@ import traceback from sanic import Sanic, response + from app.core.logger import make_log app = Sanic(__name__) diff --git a/app/api/middleware.py b/app/api/middleware.py index c103c27..9bf1a2f 100644 --- a/app/api/middleware.py +++ b/app/api/middleware.py @@ -1,12 +1,12 @@ -from app.core.models.user import User -from app.core.models.keys import KnownKey -from app.core.storage import Session -from app.core.logger import make_log -from app.core._crypto.signer import Signer -from app.core._secrets import hot_seed +from base58 import b58decode from sanic import response as sanic_response -from base58 import b58encode, b58decode +from app.core._crypto.signer import Signer +from app.core._secrets import hot_seed +from app.core.logger import make_log +from app.core.models.keys import KnownKey +from app.core.models.user import User +from app.core.storage import Session async def try_authorization(request): diff --git a/app/api/routes/_blockchain.py b/app/api/routes/_blockchain.py index 7063d4a..946d657 100644 --- a/app/api/routes/_blockchain.py +++ b/app/api/routes/_blockchain.py @@ -1,15 +1,16 @@ -from app.core._blockchain.ton.connect import TonConnect, unpack_wallet_info -from app.core.content.utils import create_metadata_for_item -from app.core.models.node_storage import StoredContent +from base64 import b64encode +from datetime import datetime + from sanic import response -from datetime import datetime, timedelta +from tonsdk.boc import begin_cell, begin_dict +from tonsdk.utils import Address + +from app.core._blockchain.ton.connect import TonConnect from app.core._blockchain.ton.platform import platform from app.core._config import PROJECT_HOST -from base64 import b64encode, b64decode -from base58 import b58decode, b58encode from app.core._utils.resolve_content import resolve_content -from tonsdk.boc import begin_cell, Cell, begin_dict -from tonsdk.utils import Address +from app.core.content.utils import create_metadata_for_item +from app.core.models.node_storage import StoredContent def valid_royalty_params(royalty_params): diff --git a/app/api/routes/_system.py b/app/api/routes/_system.py index 02e899b..577490f 100644 --- a/app/api/routes/_system.py +++ b/app/api/routes/_system.py @@ -1,12 +1,14 @@ -from sanic import response -from base58 import b58encode, b58decode -from app.core._secrets import hot_pubkey, service_wallet, hot_seed -from app.core._blockchain.ton.platform import platform -from datetime import datetime, timedelta -from app.core.logger import make_log -from app.core._crypto.signer import Signer -import subprocess import json +import subprocess +from datetime import datetime + +from base58 import b58encode, b58decode +from sanic import response + +from app.core._blockchain.ton.platform import platform +from app.core._crypto.signer import Signer +from app.core._secrets import hot_pubkey, service_wallet, hot_seed +from app.core.logger import make_log def get_git_info(): diff --git a/app/api/routes/auth.py b/app/api/routes/auth.py index 36a9ac0..c5e514a 100644 --- a/app/api/routes/auth.py +++ b/app/api/routes/auth.py @@ -1,8 +1,10 @@ +from datetime import datetime + +from aiogram.utils.web_app import safe_parse_webapp_init_data from sanic import response + from app.core._config import TELEGRAM_API_KEY from app.core.models.user import User -from aiogram.utils.web_app import safe_parse_webapp_init_data -from datetime import datetime async def s_api_v1_auth_twa(request): diff --git a/app/api/routes/content.py b/app/api/routes/content.py index 811c11e..7c81e91 100644 --- a/app/api/routes/content.py +++ b/app/api/routes/content.py @@ -1,7 +1,7 @@ from sanic import response -from datetime import datetime, timedelta -from app.core.models.node_storage import StoredContent + from app.core.logger import make_log +from app.core.models.node_storage import StoredContent async def s_api_v1_content_list(request): diff --git a/app/api/routes/node_storage.py b/app/api/routes/node_storage.py index 84689dc..30cec84 100644 --- a/app/api/routes/node_storage.py +++ b/app/api/routes/node_storage.py @@ -1,14 +1,16 @@ +import hashlib +import os +from datetime import datetime +from mimetypes import guess_type + +import aiofiles +from base58 import b58encode from sanic import response + from app.core._config import UPLOADS_DIR from app.core._utils.resolve_content import resolve_content -from app.core.models.node_storage import StoredContent from app.core.logger import make_log -from datetime import datetime -from base58 import b58encode, b58decode -from mimetypes import guess_type -import os -import hashlib -import aiofiles +from app.core.models.node_storage import StoredContent async def s_api_v1_storage_post(request): diff --git a/app/bot/routers/content.py b/app/bot/routers/content.py index d83b7ce..d36618e 100644 --- a/app/bot/routers/content.py +++ b/app/bot/routers/content.py @@ -1,13 +1,9 @@ from aiogram import types, Router, F -from aiogram.filters import Command -from app.core._utils.tg_process_template import tg_process_template -from app.core._keyboards import get_inline_keyboard -from app.core.logger import logger -from app.core.models.wallet_connection import WalletConnection -from app.core._blockchain.ton.connect import TonConnect, unpack_wallet_info -from app.core._config import WEB_APP_URLS +from app.core._config import WEB_APP_URLS +from app.core._keyboards import get_inline_keyboard +from app.core._utils.tg_process_template import tg_process_template router = Router() diff --git a/app/bot/routers/home.py b/app/bot/routers/home.py index 5ef58df..6c57026 100644 --- a/app/bot/routers/home.py +++ b/app/bot/routers/home.py @@ -1,13 +1,11 @@ -from app.core._utils.tg_process_template import tg_process_template -from app.core._keyboards import get_inline_keyboard -from app.core.logger import logger -from app.core.models.wallet_connection import WalletConnection -from app.core._blockchain.ton.connect import TonConnect, unpack_wallet_info -from app.core._config import WEB_APP_URLS from aiogram import types, Router, F from aiogram.filters import Command from tonsdk.utils import Address +from app.core._blockchain.ton.connect import TonConnect +from app.core._keyboards import get_inline_keyboard +from app.core._utils.tg_process_template import tg_process_template +from app.core.models.wallet_connection import WalletConnection main_router = Router() diff --git a/app/bot/routers/index.py b/app/bot/routers/index.py index c3ae0e9..4649380 100644 --- a/app/bot/routers/index.py +++ b/app/bot/routers/index.py @@ -2,12 +2,11 @@ import os import sys import traceback -from aiogram import types, Router, F -from aiogram.filters import Command +from aiogram import types, Router +from app.bot.routers.content import router as content_router from app.bot.routers.home import router as home_router from app.bot.routers.tonconnect import router as tonconnect_router -from app.bot.routers.content import router as content_router from app.core.logger import logger main_router = Router() diff --git a/app/bot/routers/tonconnect.py b/app/bot/routers/tonconnect.py index d2af717..ed3e336 100644 --- a/app/bot/routers/tonconnect.py +++ b/app/bot/routers/tonconnect.py @@ -1,16 +1,16 @@ +import asyncio import json +from datetime import datetime, timedelta from aiogram import types, Router, F from aiogram.filters import Command +from app.bot.routers.home import send_connect_wallets_list, send_home_menu +from app.core._blockchain.ton.connect import TonConnect, unpack_wallet_info from app.core._keyboards import get_inline_keyboard from app.core._utils.tg_process_template import tg_process_template from app.core.logger import make_log -from app.core._blockchain.ton.connect import TonConnect, unpack_wallet_info from app.core.models.wallet_connection import WalletConnection -from app.bot.routers.home import send_connect_wallets_list, send_home_menu -from datetime import datetime, timedelta -import asyncio router = Router() diff --git a/app/client_bot/routers/home.py b/app/client_bot/routers/home.py index 5ef58df..6c57026 100644 --- a/app/client_bot/routers/home.py +++ b/app/client_bot/routers/home.py @@ -1,13 +1,11 @@ -from app.core._utils.tg_process_template import tg_process_template -from app.core._keyboards import get_inline_keyboard -from app.core.logger import logger -from app.core.models.wallet_connection import WalletConnection -from app.core._blockchain.ton.connect import TonConnect, unpack_wallet_info -from app.core._config import WEB_APP_URLS from aiogram import types, Router, F from aiogram.filters import Command from tonsdk.utils import Address +from app.core._blockchain.ton.connect import TonConnect +from app.core._keyboards import get_inline_keyboard +from app.core._utils.tg_process_template import tg_process_template +from app.core.models.wallet_connection import WalletConnection main_router = Router() diff --git a/app/client_bot/routers/index.py b/app/client_bot/routers/index.py index 85a9bc2..64ee033 100644 --- a/app/client_bot/routers/index.py +++ b/app/client_bot/routers/index.py @@ -2,8 +2,7 @@ import os import sys import traceback -from aiogram import types, Router, F -from aiogram.filters import Command +from aiogram import types, Router from app.client_bot.routers.home import router as home_router from app.core.logger import logger diff --git a/app/core/_blockchain/ton/contracts/cop_nft.py b/app/core/_blockchain/ton/contracts/cop_nft.py index 8683a8b..b64fba9 100644 --- a/app/core/_blockchain/ton/contracts/cop_nft.py +++ b/app/core/_blockchain/ton/contracts/cop_nft.py @@ -1,8 +1,8 @@ -from app.core._config import MY_PLATFORM_CONTRACT - +from tonsdk.boc import Cell, begin_cell, begin_dict from tonsdk.contract import Contract from tonsdk.utils import Address -from tonsdk.boc import Cell, begin_cell, begin_dict + +from app.core._config import MY_PLATFORM_CONTRACT class COP_NFT(Contract): diff --git a/app/core/_blockchain/ton/platform.py b/app/core/_blockchain/ton/platform.py index 2303dc4..29e6a1e 100644 --- a/app/core/_blockchain/ton/platform.py +++ b/app/core/_blockchain/ton/platform.py @@ -1,11 +1,12 @@ -from app.core._config import TESTNET, MY_PLATFORM_CONTRACT, PROJECT_HOST -from app.core._secrets import service_wallet -from app.core._blockchain.ton.contracts.platform import Platform -from app.core._blockchain.ton.contracts.cop_nft import COP_NFT -from app.core._blockchain.ton.contracts.blank import Blank from tonsdk.boc import Cell from tonsdk.utils import Address +from app.core._blockchain.ton.contracts.blank import Blank +from app.core._blockchain.ton.contracts.cop_nft import COP_NFT +from app.core._blockchain.ton.contracts.platform import Platform +from app.core._config import TESTNET, MY_PLATFORM_CONTRACT, PROJECT_HOST +from app.core._secrets import service_wallet + kwargs = {} if TESTNET is False: kwargs['address'] = Address(MY_PLATFORM_CONTRACT) diff --git a/app/core/_blockchain/ton/toncenter.py b/app/core/_blockchain/ton/toncenter.py index 921fcfa..2949ade 100644 --- a/app/core/_blockchain/ton/toncenter.py +++ b/app/core/_blockchain/ton/toncenter.py @@ -1,9 +1,11 @@ -from base64 import b64encode -from httpx import AsyncClient -from app.core.logger import make_log -from app.core._config import TONCENTER_HOST, TONCENTER_API_KEY import asyncio import time +from base64 import b64encode + +from httpx import AsyncClient + +from app.core._config import TONCENTER_HOST, TONCENTER_API_KEY +from app.core.logger import make_log class TonCenter: diff --git a/app/core/_blockchain/ton/wallet_v3cr3.py b/app/core/_blockchain/ton/wallet_v3cr3.py index 3a78822..129078c 100644 --- a/app/core/_blockchain/ton/wallet_v3cr3.py +++ b/app/core/_blockchain/ton/wallet_v3cr3.py @@ -4,8 +4,7 @@ from time import time from tonsdk.boc import Cell, begin_cell from tonsdk.contract import Contract from tonsdk.contract.wallet import WalletContract -from tonsdk.utils import Address, sign_message - +from tonsdk.utils import Address WALLET_V3_CR3_CODE_HEX = 'b5ee9c7241021001000162000114ff00f4a413f4bcf2c80b01020120020f02014803080202ce0407020120050600510ccc741d35c87e900c3e910c7b513420405035c874ffcc19aea6f0003cb41a750c341ffc00a456f8a000730074c7c860802ab06ea65b0874c1f50c007ec0380860802aa82ea384cc407cb81a75350c087ec100743b47bb54fb55380c0c7000372103fcbc20002349521d74ac2009801d401d022f00101e85b8020120090c0201200a0b0019bb39ced44d08020d721d3ff3080011b8c97ed44d0d31f3080201580d0e001bb71e3da89a1020481ae43a61e610001bb49f3da89a1020281ae43a7fe61000f6f28308d71820d31fd31fd31f3001f823bbf2d06ced44d0d31fd3ffd31fd3ff305151baf2e0695132baf2e06924f901541066f910f2e069f8007054715226ed44ed45ed479131ed67ed65ed64747fed118e1104d430d023c000917f9170e2f002045023ed41edf101f2ff04a4c8cb1f13cbffcb1fcbffcb0fc9ed542675fc7e' diff --git a/app/core/_crypto/__init__.py b/app/core/_crypto/__init__.py index d38f615..293a62b 100644 --- a/app/core/_crypto/__init__.py +++ b/app/core/_crypto/__init__.py @@ -1,2 +1 @@ from app.core._crypto.signer import Signer -from app.core._crypto.cipher import Cipher diff --git a/app/core/_crypto/cipher.py b/app/core/_crypto/cipher.py index 72849db..ec920a9 100644 --- a/app/core/_crypto/cipher.py +++ b/app/core/_crypto/cipher.py @@ -1,6 +1,7 @@ +import hashlib + from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad -import hashlib class AESCipher: diff --git a/app/core/_crypto/content.py b/app/core/_crypto/content.py index d0ca2b7..3ebf8c4 100644 --- a/app/core/_crypto/content.py +++ b/app/core/_crypto/content.py @@ -1,13 +1,15 @@ -from app.core.models.node_storage import StoredContent -from app.core.models.keys import KnownKey -from app.core._config import PROJECT_HOST, UPLOADS_DIR -from app.core._crypto.cipher import AESCipher -from Crypto.Random import get_random_bytes +import os from datetime import datetime from hashlib import sha256 -from base58 import b58encode, b58decode + import aiofiles -import os +from Crypto.Random import get_random_bytes +from base58 import b58encode + +from app.core._config import UPLOADS_DIR +from app.core._crypto.cipher import AESCipher +from app.core.models.keys import KnownKey +from app.core.models.node_storage import StoredContent async def create_new_encryption_key(db_session, user_id: int = None) -> KnownKey: diff --git a/app/core/_crypto/signer.py b/app/core/_crypto/signer.py index 1781e1a..f67e39e 100644 --- a/app/core/_crypto/signer.py +++ b/app/core/_crypto/signer.py @@ -1,6 +1,6 @@ -import nacl.signing -import nacl.encoding import base58 +import nacl.encoding +import nacl.signing class Signer: diff --git a/app/core/_secrets.py b/app/core/_secrets.py index e24b264..8424ae7 100644 --- a/app/core/_secrets.py +++ b/app/core/_secrets.py @@ -1,11 +1,12 @@ -from nacl.bindings import crypto_sign_seed_keypair -from app.core.active_config import active_config -from app.core.logger import make_log -from app.core._blockchain.ton.wallet_v3cr3 import WalletV3CR3 from os import getenv, urandom +from nacl.bindings import crypto_sign_seed_keypair from tonsdk.utils import Address +from app.core._blockchain.ton.wallet_v3cr3 import WalletV3CR3 +from app.core.active_config import active_config +from app.core.logger import make_log + def load_hot_pair(): hot_seed = active_config.get('private_key') diff --git a/app/core/_utils/send_status.py b/app/core/_utils/send_status.py index bf4bf8e..bca7dbc 100644 --- a/app/core/_utils/send_status.py +++ b/app/core/_utils/send_status.py @@ -1,11 +1,12 @@ -from httpx import AsyncClient -from app.core._config import PROJECT_HOST -from app.core.logger import make_log -from app.core._secrets import hot_privkey, hot_seed -from tonsdk.utils import sign_message -from base58 import b58encode from json import dumps + +from base58 import b58encode +from httpx import AsyncClient + +from app.core._config import PROJECT_HOST from app.core._crypto.signer import Signer +from app.core._secrets import hot_seed +from app.core.logger import make_log async def send_status(service: str, status: str): diff --git a/app/core/active_config.py b/app/core/active_config.py index 3ac501b..15785ae 100644 --- a/app/core/active_config.py +++ b/app/core/active_config.py @@ -1,7 +1,8 @@ -from app.core.models._config import ConfigFile -from app.core._config import CONFIG_FILE import os +from app.core._config import CONFIG_FILE +from app.core.models._config import ConfigFile + if not os.path.exists(CONFIG_FILE): with open(CONFIG_FILE, 'w') as f: f.write('{}') diff --git a/app/core/auth_v1.py b/app/core/auth_v1.py index 16fc4db..a0e08ff 100644 --- a/app/core/auth_v1.py +++ b/app/core/auth_v1.py @@ -1,9 +1,11 @@ -from app.core.models.keys import KnownKey -from datetime import datetime -from base58 import b58encode, b58decode -from hashlib import sha256 -from app.core.logger import make_log import os +from datetime import datetime +from hashlib import sha256 + +from base58 import b58encode + +from app.core.logger import make_log +from app.core.models.keys import KnownKey # Auth v1 specs diff --git a/app/core/background/indexer_service.py b/app/core/background/indexer_service.py index 2ff3a7b..5bf0511 100644 --- a/app/core/background/indexer_service.py +++ b/app/core/background/indexer_service.py @@ -1,17 +1,18 @@ -from app.core._utils.send_status import send_status -from app.core._config import MY_PLATFORM_CONTRACT -from app.core._blockchain.ton.toncenter import toncenter +import asyncio +from base64 import b64decode +from datetime import datetime + +from base58 import b58encode +from tonsdk.boc import Cell +from tonsdk.utils import Address + from app.core._blockchain.ton.platform import platform +from app.core._blockchain.ton.toncenter import toncenter +from app.core._utils.send_status import send_status +from app.core.logger import make_log from app.core.models.node_storage import StoredContent from app.core.models.wallet_connection import WalletConnection from app.core.storage import db_session -from app.core.logger import make_log -from tonsdk.boc import begin_cell, Cell -from tonsdk.utils import Address -from base64 import b64encode, b64decode -from base58 import b58encode, b58decode -from datetime import datetime -import asyncio async def indexer_loop(platform_found: bool, seqno: int) -> [bool, int]: diff --git a/app/core/background/ton_service.py b/app/core/background/ton_service.py index 9dd5197..c827d4e 100644 --- a/app/core/background/ton_service.py +++ b/app/core/background/ton_service.py @@ -1,15 +1,14 @@ -from tonsdk.boc import begin_cell -from app.core.logger import make_log -from app.core._config import MY_FUND_ADDRESS, MY_PLATFORM_CONTRACT -from app.core._blockchain.ton.platform import platform -from app.core.storage import db_session -from app.core._secrets import service_wallet -from app.core._blockchain.ton.toncenter import toncenter -from app.core._utils.send_status import send_status -from tonsdk.utils import Address - import asyncio -import os, sys +import os + +from tonsdk.boc import begin_cell + +from app.core._blockchain.ton.platform import platform +from app.core._blockchain.ton.toncenter import toncenter +from app.core._config import MY_FUND_ADDRESS +from app.core._secrets import service_wallet +from app.core._utils.send_status import send_status +from app.core.logger import make_log async def get_sw_seqno(): diff --git a/app/core/background/uploader_service.py b/app/core/background/uploader_service.py index 19674a5..e42b76a 100644 --- a/app/core/background/uploader_service.py +++ b/app/core/background/uploader_service.py @@ -1,10 +1,8 @@ -from app.core._utils.send_status import send_status - -from app.core.logger import make_log -from app.core.storage import db_session -import traceback import asyncio +from app.core._utils.send_status import send_status +from app.core.logger import make_log + async def uploader_loop(): pass diff --git a/app/core/content/content_id.py b/app/core/content/content_id.py index f0dc0dc..b5160b4 100644 --- a/app/core/content/content_id.py +++ b/app/core/content/content_id.py @@ -1,6 +1,8 @@ -from app.core._utils.string_binary import string_to_bytes_fixed_size, bytes_to_string from base58 import b58encode, b58decode + from app.core._config import ALLOWED_CONTENT_TYPES +from app.core._utils.string_binary import string_to_bytes_fixed_size, bytes_to_string + # cid_v1#_ cid_version:int8 accept_type:uint120 content_sha256:uint256 onchain_index:uint128 = CIDv1; diff --git a/app/core/content/utils.py b/app/core/content/utils.py index a68149a..cbbf441 100644 --- a/app/core/content/utils.py +++ b/app/core/content/utils.py @@ -1,12 +1,13 @@ -from app.core.models.node_storage import StoredContent -from app.core._crypto.signer import Signer -from app.core._secrets import hot_seed +import json from hashlib import sha256 -from base58 import b58encode, b58decode + +from base58 import b58encode +from httpx import AsyncClient from app.core._config import PROJECT_HOST -from httpx import AsyncClient -import json +from app.core._crypto.signer import Signer +from app.core._secrets import hot_seed +from app.core.models.node_storage import StoredContent async def create_metadata_for_item( diff --git a/app/core/models/__init__.py b/app/core/models/__init__.py index 883b3b1..0118e95 100644 --- a/app/core/models/__init__.py +++ b/app/core/models/__init__.py @@ -1,8 +1,8 @@ from app.core.models.asset import Asset +from app.core.models.base import AlchemyBase +from app.core.models.keys import KnownKey from app.core.models.memory import Memory +from app.core.models.node_storage import StoredContent from app.core.models.transaction import UserBalance, InternalTransaction from app.core.models.user import User from app.core.models.wallet_connection import WalletConnection -from app.core.models.keys import KnownKey -from app.core.models.node_storage import StoredContent -from app.core.models.base import AlchemyBase diff --git a/app/core/models/_config.py b/app/core/models/_config.py index 19fd47c..8854941 100644 --- a/app/core/models/_config.py +++ b/app/core/models/_config.py @@ -1,11 +1,11 @@ import string - -from app.core.logger import make_log -from json import loads as json_loads from json import dumps as json_dumps +from json import loads as json_loads from random import choice from subprocess import Popen, PIPE +from app.core.logger import make_log + class ConfigFile: def __init__(self, filepath: str): diff --git a/app/core/models/keys.py b/app/core/models/keys.py index ca0eca5..cb55c36 100644 --- a/app/core/models/keys.py +++ b/app/core/models/keys.py @@ -1,6 +1,5 @@ -from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, JSON, Boolean -from sqlalchemy.orm import relationship from base58 import b58decode +from sqlalchemy import Column, Integer, String, DateTime, JSON from .base import AlchemyBase diff --git a/app/core/models/memory.py b/app/core/models/memory.py index 4fa4560..fdb9744 100644 --- a/app/core/models/memory.py +++ b/app/core/models/memory.py @@ -1,11 +1,12 @@ import asyncio from contextlib import asynccontextmanager -from datetime import datetime, timedelta +from datetime import datetime +from datetime import timedelta from aiogram import Bot -from app.core.logger import make_log + from app.core._config import TELEGRAM_API_KEY, CLIENT_TELEGRAM_API_KEY -from datetime import datetime +from app.core.logger import make_log class Memory: diff --git a/app/core/models/node_storage.py b/app/core/models/node_storage.py index 026be74..c5af470 100644 --- a/app/core/models/node_storage.py +++ b/app/core/models/node_storage.py @@ -1,10 +1,9 @@ +from base58 import b58decode from sqlalchemy import Column, BigInteger, Integer, String, ForeignKey, DateTime, JSON, Boolean from sqlalchemy.orm import relationship -from .base import AlchemyBase -from hashlib import sha256 -from base58 import b58encode, b58decode from app.core.content.content_id import ContentId +from .base import AlchemyBase class StoredContent(AlchemyBase): diff --git a/app/core/models/user/__init__.py b/app/core/models/user/__init__.py index 2da5723..f0cdaca 100644 --- a/app/core/models/user/__init__.py +++ b/app/core/models/user/__init__.py @@ -1,9 +1,9 @@ from sqlalchemy import Column, Integer, String, BigInteger, DateTime, JSON from sqlalchemy.orm import relationship -from app.core.translation import TranslationCore from app.core.auth_v1 import AuthenticationMixin as AuthenticationMixin_V1 from app.core.models.user.display_mixin import DisplayMixin +from app.core.translation import TranslationCore from ..base import AlchemyBase