Kaynağa Gözat

feat: explore support multi language (#202)

tags/0.3.0
John Wang 2 yıl önce
ebeveyn
işleme
023783372e
No account linked to committer's email address

+ 1
- 25
api/commands.py Dosyayı Görüntüle

import datetime import datetime
import json
import random import random
import string import string


from libs.helper import email as email_validate from libs.helper import email as email_validate
from extensions.ext_database import db from extensions.ext_database import db
from models.account import InvitationCode from models.account import InvitationCode
from models.model import Account, AppModelConfig, ApiToken, Site, App, RecommendedApp
from models.model import Account
import secrets import secrets
import base64 import base64


return result return result




@click.command('gen-recommended-apps', help='Number of records to generate')
def generate_recommended_apps():
print('Generating recommended app data...')
apps = App.query.filter(App.is_public == True).all()
for app in apps:
recommended_app = RecommendedApp(
app_id=app.id,
description={
'en': 'Description for ' + app.name,
'zh': '描述 ' + app.name
},
copyright='Copyright ' + str(random.randint(1990, 2020)),
privacy_policy='https://privacypolicy.example.com',
category=random.choice(['Games', 'News', 'Music', 'Sports']),
position=random.randint(1, 100),
install_count=random.randint(100, 100000)
)
db.session.add(recommended_app)
db.session.commit()
print('Done!')


def register_commands(app): def register_commands(app):
app.cli.add_command(reset_password) app.cli.add_command(reset_password)
app.cli.add_command(reset_email) app.cli.add_command(reset_email)
app.cli.add_command(generate_invitation_codes) app.cli.add_command(generate_invitation_codes)
app.cli.add_command(generate_recommended_apps)

+ 14
- 17
api/controllers/console/admin.py Dosyayı Görüntüle

def post(self): def post(self):
parser = reqparse.RequestParser() parser = reqparse.RequestParser()
parser.add_argument('app_id', type=str, required=True, nullable=False, location='json') parser.add_argument('app_id', type=str, required=True, nullable=False, location='json')
parser.add_argument('desc_en', type=str, location='json')
parser.add_argument('desc_zh', type=str, location='json')
parser.add_argument('desc', type=str, location='json')
parser.add_argument('copyright', type=str, location='json') parser.add_argument('copyright', type=str, location='json')
parser.add_argument('privacy_policy', type=str, location='json') parser.add_argument('privacy_policy', type=str, location='json')
parser.add_argument('language', type=str, required=True, nullable=False, choices=['en-US', 'zh-Hans'],
location='json')
parser.add_argument('category', type=str, required=True, nullable=False, location='json') parser.add_argument('category', type=str, required=True, nullable=False, location='json')
parser.add_argument('position', type=int, required=True, nullable=False, location='json') parser.add_argument('position', type=int, required=True, nullable=False, location='json')
args = parser.parse_args() args = parser.parse_args()


site = app.site site = app.site
if not site: if not site:
desc = args['desc_en']
copy_right = args['copyright']
privacy_policy = args['privacy_policy']
desc = args['desc'] if args['desc'] else ''
copy_right = args['copyright'] if args['copyright'] else ''
privacy_policy = args['privacy_policy'] if args['privacy_policy'] else ''
else: else:
desc = site.description if not args['desc_en'] else args['desc_en']
copy_right = site.copyright if not args['copyright'] else args['copyright']
privacy_policy = site.privacy_policy if not args['privacy_policy'] else args['privacy_policy']
desc = site.description if (site.description if not args['desc'] else args['desc']) else ''
copy_right = site.copyright if (site.copyright if not args['copyright'] else args['copyright']) else ''
privacy_policy = site.privacy_policy \
if (site.privacy_policy if not args['privacy_policy'] else args['privacy_policy']) else ''


recommended_app = RecommendedApp.query.filter(RecommendedApp.app_id == args['app_id']).first() recommended_app = RecommendedApp.query.filter(RecommendedApp.app_id == args['app_id']).first()


if not recommended_app: if not recommended_app:
recommended_app = RecommendedApp( recommended_app = RecommendedApp(
app_id=app.id, app_id=app.id,
description={
'en': desc,
'zh': desc if not args['desc_zh'] else args['desc_zh']
},
description=desc,
copyright=copy_right, copyright=copy_right,
privacy_policy=privacy_policy, privacy_policy=privacy_policy,
language=args['language'],
category=args['category'], category=args['category'],
position=args['position'] position=args['position']
) )


return {'result': 'success'}, 201 return {'result': 'success'}, 201
else: else:
recommended_app.description = {
'en': desc,
'zh': desc if not args['desc_zh'] else args['desc_zh']
}

recommended_app.description = desc
recommended_app.copyright = copy_right recommended_app.copyright = copy_right
recommended_app.privacy_policy = privacy_policy recommended_app.privacy_policy = privacy_policy
recommended_app.language = args['language']
recommended_app.category = args['category'] recommended_app.category = args['category']
recommended_app.position = args['position'] recommended_app.position = args['position']



+ 10
- 11
api/controllers/console/explore/recommended_app.py Dosyayı Görüntüle

@account_initialization_required @account_initialization_required
@marshal_with(recommended_app_list_fields) @marshal_with(recommended_app_list_fields)
def get(self): def get(self):
language_prefix = current_user.interface_language if current_user.interface_language else 'en-US'

recommended_apps = db.session.query(RecommendedApp).filter( recommended_apps = db.session.query(RecommendedApp).filter(
RecommendedApp.is_listed == True
RecommendedApp.is_listed == True,
RecommendedApp.language == language_prefix
).all() ).all()


categories = set() categories = set()
if not app or not app.is_public: if not app or not app.is_public:
continue continue


language_prefix = current_user.interface_language.split('-')[0]
desc = None
if recommended_app.description:
if language_prefix in recommended_app.description:
desc = recommended_app.description[language_prefix]
elif 'en' in recommended_app.description:
desc = recommended_app.description['en']
site = app.site
if not site:
continue


recommended_app_result = { recommended_app_result = {
'id': recommended_app.id, 'id': recommended_app.id,
'app': app, 'app': app,
'app_id': recommended_app.app_id, 'app_id': recommended_app.app_id,
'description': desc,
'copyright': recommended_app.copyright,
'privacy_policy': recommended_app.privacy_policy,
'description': site.description,
'copyright': site.copyright,
'privacy_policy': site.privacy_policy,
'category': recommended_app.category, 'category': recommended_app.category,
'position': recommended_app.position, 'position': recommended_app.position,
'is_listed': recommended_app.is_listed, 'is_listed': recommended_app.is_listed,

+ 36
- 0
api/migrations/versions/a45f4dfde53b_add_language_to_recommend_apps.py Dosyayı Görüntüle

"""add language to recommend apps

Revision ID: a45f4dfde53b
Revises: 9f4e3427ea84
Create Date: 2023-05-25 17:50:32.052335

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = 'a45f4dfde53b'
down_revision = '9f4e3427ea84'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('recommended_apps', schema=None) as batch_op:
batch_op.add_column(sa.Column('language', sa.String(length=255), server_default=sa.text("'en-US'::character varying"), nullable=False))
batch_op.drop_index('recommended_app_is_listed_idx')
batch_op.create_index('recommended_app_is_listed_idx', ['is_listed', 'language'], unique=False)

# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('recommended_apps', schema=None) as batch_op:
batch_op.drop_index('recommended_app_is_listed_idx')
batch_op.create_index('recommended_app_is_listed_idx', ['is_listed'], unique=False)
batch_op.drop_column('language')

# ### end Alembic commands ###

+ 2
- 12
api/models/model.py Dosyayı Görüntüle

__table_args__ = ( __table_args__ = (
db.PrimaryKeyConstraint('id', name='recommended_app_pkey'), db.PrimaryKeyConstraint('id', name='recommended_app_pkey'),
db.Index('recommended_app_app_id_idx', 'app_id'), db.Index('recommended_app_app_id_idx', 'app_id'),
db.Index('recommended_app_is_listed_idx', 'is_listed')
db.Index('recommended_app_is_listed_idx', 'is_listed', 'language')
) )


id = db.Column(UUID, primary_key=True, server_default=db.text('uuid_generate_v4()')) id = db.Column(UUID, primary_key=True, server_default=db.text('uuid_generate_v4()'))
position = db.Column(db.Integer, nullable=False, default=0) position = db.Column(db.Integer, nullable=False, default=0)
is_listed = db.Column(db.Boolean, nullable=False, default=True) is_listed = db.Column(db.Boolean, nullable=False, default=True)
install_count = db.Column(db.Integer, nullable=False, default=0) install_count = db.Column(db.Integer, nullable=False, default=0)
language = db.Column(db.String(255), nullable=False, server_default=db.text("'en-US'::character varying"))
created_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)')) created_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)'))
updated_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)')) updated_at = db.Column(db.DateTime, nullable=False, server_default=db.text('CURRENT_TIMESTAMP(0)'))


app = db.session.query(App).filter(App.id == self.app_id).first() app = db.session.query(App).filter(App.id == self.app_id).first()
return app return app


# def set_description(self, lang, desc):
# if self.description is None:
# self.description = {}
# self.description[lang] = desc

def get_description(self, lang):
if self.description and lang in self.description:
return self.description[lang]
else:
return self.description.get('en')



class InstalledApp(db.Model): class InstalledApp(db.Model):
__tablename__ = 'installed_apps' __tablename__ = 'installed_apps'

Loading…
İptal
Kaydet