Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Description tasks #180

Merged
merged 8 commits into from
Jan 2, 2025
18 changes: 9 additions & 9 deletions superset/charts/data/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -417,9 +417,9 @@ def _send_chart_response(
if not result["queries"]:
return self.response_400(_("Empty query result"))

exportAsTime = form_data.get('exportAsTime')
column_config = form_data.get('column_config')
table_order_by = form_data.get('table_order_by')
exportAsTime = form_data.get('exportAsTime') # с фронтам приходит поле "exportAstime", если тип графика big number и значение нужно экспортнуть как время
column_config = form_data.get('column_config') # с фронта приходит словарь, где лежат словари, в которых возможно есть поле "exportAsTime", если значение нужно экспортнуть как время, используется во всех остальных типах графиков
table_order_by = form_data.get('table_order_by') # используем для сортировки данных, приходит словарь, где ключ это колонка, по которому отсортировали, а значение это в каком порядке было отсортировано
if result_format == ChartDataResultFormat.XLSX:
# Verify user has permission to export XLSX file
if not security_manager.can_access("can_csv", "Superset"):
Expand Down Expand Up @@ -447,24 +447,24 @@ def _send_chart_response(
return self.response_500(
_("Server error occurred while exporting the file")
)
if exportAsTime:
if exportAsTime: # экспорт в формате времени
key_column = df.keys()[0]
df[key_column] = df[key_column].apply(convert_to_time)

metric_map = dict()
metric_map = dict() # получаем данные с фронта о метриках, чтобы корректно переводить колонки на русский язык при выгрузке
datasourceMetrics = form_data.get('datasourceMetrics')
if datasourceMetrics:
for datasource_metric in datasourceMetrics:
metric_map[datasource_metric.get('metric_name')] = datasource_metric.get('verbose_name')
if column_config:
if column_config: # экспорт в формате времени
for k, v in column_config.items():
if v.get('exportAsTime'):
if isinstance(df.get(k), Series):
df[k] = df[k].apply(convert_to_time)
if isinstance(df.get(metric_map.get(k)), Series):
df[metric_map.get(k)] = df[metric_map.get(k)].apply(convert_to_time)

if table_order_by:
if table_order_by: # сортируем данные при выгрузке
for k, v in table_order_by.items():
if v == 'desc':
df = df.sort_values(by=[k], ascending=False)
Expand Down Expand Up @@ -516,7 +516,7 @@ def _send_chart_response(
metric_map[datasource_metric.get(
'metric_name')] = datasource_metric.get('verbose_name')

if column_config:
if column_config: # экспорт в формате времени
for k, v in column_config.items():
if v.get('exportAsTime'):
if isinstance(df.get(k), Series):
Expand All @@ -525,7 +525,7 @@ def _send_chart_response(
df[metric_map.get(k)] = df[metric_map.get(k)].apply(
convert_to_time)

if table_order_by:
if table_order_by: # сортируем данные при выгрузке
for k, v in table_order_by.items():
if v == 'desc':
df = df.sort_values(by=[k], ascending=False)
Expand Down
4 changes: 2 additions & 2 deletions superset/common/utils/dataframe_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@ def left_join_df(
return df


def convert_to_time(value):
def convert_to_time(value): # экспорт в формате времени
if value and (isinstance(value, int) or isinstance(value, float)) and not math.isnan(value):
dt = datetime.datetime.fromtimestamp(value / 1000.0, tz=datetime.timezone.utc) - datetime.datetime.fromtimestamp(0, tz=datetime.timezone.utc)
return (
return ( # переводим время в продолдительность времени
f"{dt.seconds//3600 + dt.days * 24 if ((dt.seconds // 3600) + dt.days * 24 and len(str((dt.seconds // 3600) + dt.days * 24)) != 1) else f'{str((dt.seconds // 3600) + dt.days * 24)}'}:"
f"{(dt.seconds % 3600 // 60) if ((dt.seconds % 3600 // 60) and len(str(dt.seconds % 3600 // 60)) != 1) else f'0{str(dt.seconds % 3600 // 60)}'}:"
f"{dt.seconds % 60 if ((dt.seconds % 60) and len(str(dt.seconds % 60)) != 1) else f'0{str(dt.seconds % 60)}'}"
Expand Down
22 changes: 14 additions & 8 deletions superset/connectors/base/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -638,8 +638,11 @@ class BaseColumn(AuditMixinNullable, ImportExportMixin):
groupby = Column(Boolean, default=True)
filterable = Column(Boolean, default=True)
description = Column(MediumText())
# добавили поля для описания колонок на двух языках
description_EN = Column(MediumText(), nullable=True)
description_RU = Column(MediumText(), nullable=True)
# добавили поля для наименования колонок на двух языках
# описание данных в туллтипе
verbose_name_RU = Column(Text, nullable=True)
verbose_name_EN = Column(Text, nullable=True, default=None)
is_dttm = None
Expand Down Expand Up @@ -708,11 +711,11 @@ def data(self) -> dict[str, Any]:
"id",
"column_name",
"verbose_name",
"verbose_name_RU",
"verbose_name_EN",
"verbose_name_RU", # описание данных в туллтипе
"verbose_name_EN", # описание данных в туллтипе
"description",
"description_EN",
"description_RU",
"description_EN", # описание данных в туллтипе
"description_RU", # описание данных в туллтипе
"expression",
"filterable",
"groupby",
Expand All @@ -733,8 +736,11 @@ class BaseMetric(AuditMixinNullable, ImportExportMixin):
verbose_name = Column(String(1024))
metric_type = Column(String(32))
description = Column(MediumText())
# описание данных в туллтипе
# добавили поля для оптсания мер в датасете
description_EN = Column(MediumText(), nullable=True)
description_RU = Column(MediumText(), nullable=True)
# добавили поля для описания нарменовая мер в датасете
verbose_name_RU = Column(Text, nullable=True)
verbose_name_EN = Column(Text, nullable=True, default=None)
number_format = Column(Text, nullable=True)
Expand Down Expand Up @@ -780,12 +786,12 @@ def data(self) -> dict[str, Any]:
"id",
"metric_name",
"verbose_name",
"verbose_name_RU",
"verbose_name_EN",
"verbose_name_RU", # описание данных в туллтипе
"verbose_name_EN", # описание данных в туллтипе
"number_format",
"description",
"description_EN",
"description_RU",
"description_EN", # описание данных в туллтипе
"description_RU", # описание данных в туллтипе
"expression",
"warning_text",
"d3format",
Expand Down
16 changes: 8 additions & 8 deletions superset/datasets/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,8 @@ class DatasetRestApi(BaseSupersetModelRestApi):
"columns.column_name",
"columns.created_on",
"columns.description",
"columns.description_RU",
"columns.description_EN",
"columns.description_RU", # описание данных в туллтипе
"columns.description_EN", # описание данных в туллтипе
"columns.expression",
"columns.filterable",
"columns.groupby",
Expand All @@ -168,24 +168,24 @@ class DatasetRestApi(BaseSupersetModelRestApi):
"columns.python_date_format",
"columns.type",
"columns.uuid",
"columns.verbose_name_RU",
"columns.verbose_name_EN",
"columns.verbose_name_RU", # описание данных в туллтипе
"columns.verbose_name_EN", # описание данных в туллтипе
"columns.verbose_name",
"metrics.changed_on",
"metrics.created_on",
"metrics.d3format",
"metrics.currency",
"metrics.description",
"metrics.description_RU",
"metrics.description_EN",
"metrics.description_RU", # описание данных в туллтипе
"metrics.description_EN", # описание данных в туллтипе
"metrics.expression",
"metrics.extra",
"metrics.id",
"metrics.metric_name",
"metrics.metric_type",
"metrics.verbose_name",
"metrics.verbose_name_RU",
"metrics.verbose_name_EN",
"metrics.verbose_name_RU", # описание данных в туллтипе
"metrics.verbose_name_EN", # описание данных в туллтипе
"metrics.number_format",
"metrics.warning_text",
"datasource_type",
Expand Down
1 change: 1 addition & 0 deletions superset/views/statement/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# это все нужно для вкладки на странице
import logging

from flask import g, redirect, request, Response
Expand Down
1 change: 1 addition & 0 deletions superset/views/team/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# это все нужно для вкладки на странице
import logging

from flask import request
Expand Down
6 changes: 3 additions & 3 deletions superset/views/users/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ def put_onboarding(self):
}
return self.response(200, result=user_response_schema.dump(result))

@expose("/team", ("GET",))
@expose("/team", ("GET",)) # текущая команда пользователя
def my_team(self):
try:
user = g.user
Expand All @@ -197,7 +197,7 @@ def my_team(self):
result["team"] = None
return self.response(200, result=user_response_schema.dump(result))

@expose("/statements", ("GET",))
@expose("/statements", ("GET",)) # все заявки пользователя
def my_statements(self):
try:
user = g.user
Expand All @@ -220,7 +220,7 @@ def my_statements(self):
result["statements"] = None
return self.response(200, result=user_response_schema.dump(result))

@expose("/country", ("GET",))
@expose("/country", ("GET",)) # страна пользователя, получаем в профиле
def my_country(self):
try:
user = g.user
Expand Down
18 changes: 9 additions & 9 deletions superset/views/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def sanitize_datasource_data(datasource_data: dict[str, Any]) -> dict[str, Any]:
return datasource_data


def finish_onboarding():
def finish_onboarding(): # записываем в бд, что пользователь прошел onboarding
user_id = get_user_id()
try:
user_info = (
Expand All @@ -93,7 +93,7 @@ def finish_onboarding():
}


def get_onboarding() -> dict:
def get_onboarding() -> dict: # получаем информацию по onboarding из бд
user_id = get_user_id()
try:
user_info = (
Expand All @@ -108,7 +108,7 @@ def get_onboarding() -> dict:
}


def get_team_by_user_id() -> Team:
def get_team_by_user_id() -> Team: # получаем команду пользователя по его id
user_id = get_user_id()
try:
user = (
Expand All @@ -122,7 +122,7 @@ def get_team_by_user_id() -> Team:
return None


def get_statements_by_user_id() -> list[Statement]:
def get_statements_by_user_id() -> list[Statement]: # получаем все заявки пользователя по его id
user_id = get_user_id()
try:
user = (
Expand All @@ -135,7 +135,7 @@ def get_statements_by_user_id() -> list[Statement]:
return []


def get_country_by_user_id() -> list[UserInfo]:
def get_country_by_user_id() -> list[UserInfo]: # получаем странну пользователя по его id
user_id = get_user_id()
try:
user = (
Expand All @@ -148,7 +148,7 @@ def get_country_by_user_id() -> list[UserInfo]:
return []


def update_onboarding(dodo_role, started_time):
def update_onboarding(dodo_role, started_time): # обновляем данные по onboarding
user_id = get_user_id()
try:
user_info = (
Expand Down Expand Up @@ -237,7 +237,7 @@ def create_userinfo(lang: str): # DODO changed #33835937
logger.warning(e)


def insert_country(country_iso_num: int, username: str):
def insert_country(country_iso_num: int, username: str): # пишем в бд страну пользователя
try:
import pycountry
country_name = pycountry.countries.get(numeric=f"{country_iso_num}").name
Expand Down Expand Up @@ -267,7 +267,7 @@ def insert_country(country_iso_num: int, username: str):
logger.warning("Error add to db country")


def insert_data_auth(data_auth: str, username: str):
def insert_data_auth(data_auth: str, username: str): # пишем в бд информацию из додо ис
try:
user = (
db.session.query(User).filter(
Expand Down Expand Up @@ -318,7 +318,7 @@ def update_user_roles(user_model: int, roles): # DODO changed #33835937
return user_model


def find_team_by_slug(team_slug: str):
def find_team_by_slug(team_slug: str): # получаем команду по уникальному slug
try:
team = (
db.session.query(Team).filter(Team.slug == team_slug).one_or_none()
Expand Down
Loading