diff --git a/src/consts.py b/src/consts.py
index f75de4e..937952f 100644
--- a/src/consts.py
+++ b/src/consts.py
@@ -165,8 +165,6 @@ class PlainTextUserAction(Enum):
GET_TASKS_REPORT__ENTER_LIST_NUMBER = "get_tasks_report__list_number"
GET_TASKS_REPORT__ENTER_INTRO = "get_tasks_report__introduction"
GET_TASKS_REPORT__CHOOSE_IF_FILL_LABELS = "get_tasks_report__fill_labels"
- GET_RUBRICS__CHOOSE_RUBRIC = "GET_RUBRICS__CHOOSE_RUBRIC"
-
# /manage_reminders items
MANAGE_REMINDERS__CHOOSE_ACTION = "manage_reminders__action"
MANAGE_REMINDERS__ENTER_CHAT_ID = "manage_reminders__chat_id"
diff --git a/src/jobs/__init__.py b/src/jobs/__init__.py
index 6132692..69afde1 100644
--- a/src/jobs/__init__.py
+++ b/src/jobs/__init__.py
@@ -25,4 +25,3 @@
from .shrug_job import ShrugJob
from .site_health_check_job import SiteHealthCheckJob
from .tg_analytics_report_job import TgAnalyticsReportJob
-from .trello_get_articles_rubric_job import TrelloGetArticlesRubricJob
diff --git a/src/jobs/trello_get_articles_rubric_job.py b/src/jobs/trello_get_articles_rubric_job.py
deleted file mode 100644
index 890990e..0000000
--- a/src/jobs/trello_get_articles_rubric_job.py
+++ /dev/null
@@ -1,92 +0,0 @@
-from typing import Callable, List
-
-from ..app_context import AppContext
-from ..consts import BoardListAlias
-from ..planka.planka_client import PlankaClient
-from ..strings import load
-from ..tg.sender import pretty_send
-from . import utils
-from .base_job import BaseJob
-
-
-class TrelloGetArticlesRubricJob(BaseJob):
- """
- kwargs has to be set in job config.
- kwargs required: spreadsheet_key, template_string
- kwargs optional:
- - sheet_name (required if it's not the first tab)
- - name (for readability and logs)
- """
-
- @staticmethod
- def _execute(
- app_context: AppContext,
- send: Callable[[str], None],
- called_from_handler=False,
- *args,
- **kwargs,
- ):
- paragraphs = []
- if called_from_handler:
- if len(args) == 0:
- send("Please type in rubric name after get_articles_rubric")
- return
- else:
- rubric_name = args[0]
- else:
- rubric_name = kwargs["rubric_name"]
- paragraphs.append(load("rubric_report_job__intro", rubric=rubric_name))
-
- for alias in BoardListAlias:
- if alias not in [
- BoardListAlias.BACK_BURNER,
- BoardListAlias.PUBLISH_DONE_11,
- ]:
- paragraphs += TrelloGetArticlesRubricJob._get_rubric_paragraphs(
- planka_client=app_context.planka_client,
- rubric_title=load(alias.value),
- rubric_alias=alias,
- rubric_name=rubric_name,
- )
-
- pretty_send(paragraphs, send)
-
- @staticmethod
- def _format_card(card, planka_client: PlankaClient) -> str:
- card_fields = planka_client.get_custom_fields(card.id)
- return load(
- "rubric_report_job__card",
- date=card.due.strftime("%d.%m").lower() if card.due else "",
- url=card.url,
- name=card.name,
- authors=utils.format_possibly_plural(
- load("common_role__author"), card_fields.authors
- ),
- )
-
- def _get_rubric_paragraphs(
- planka_client: PlankaClient,
- rubric_title: str,
- rubric_alias: str,
- rubric_name: str,
- ) -> List[str]:
- list_ids = planka_client.get_list_id_from_aliases([rubric_alias])
- cards = planka_client.get_cards(list_ids)
- cards_filtered = [
- card
- for card in cards
- if rubric_name in [label.name for label in card.labels]
- ]
-
- paragraphs = [
- load(
- "common_report__list_title_and_size",
- title=rubric_title,
- length=len(cards_filtered),
- )
- ]
- for card in cards_filtered:
- paragraphs.append(
- TrelloGetArticlesRubricJob._format_card(card, planka_client)
- )
- return paragraphs
diff --git a/src/tg/handler_registry.py b/src/tg/handler_registry.py
index 7ce6dfb..f05fadf 100644
--- a/src/tg/handler_registry.py
+++ b/src/tg/handler_registry.py
@@ -98,22 +98,6 @@ class HandlerConfig:
direct_only=True,
description="получить список задач из Planka",
),
- HandlerConfig(
- command="get_rubrics",
- category=CommandCategories.MOST_USED,
- access_level="manager",
- handler_func=handlers.get_rubrics,
- direct_only=True,
- description="получить рубрики из доски Редакция",
- ),
- HandlerConfig(
- command="get_articles_rubric",
- category=CommandCategories.DEBUG,
- access_level="manager",
- job_name="trello_get_articles_rubric_job",
- job_type="manager_reply",
- description="получить карточки по названию рубрики в трелло",
- ),
HandlerConfig(
command="get_chat_id",
category=CommandCategories.MOST_USED,
diff --git a/src/tg/handlers/__init__.py b/src/tg/handlers/__init__.py
index b816d6c..862584c 100644
--- a/src/tg/handlers/__init__.py
+++ b/src/tg/handlers/__init__.py
@@ -21,7 +21,6 @@
from .get_managers_handler import get_managers
# Admin (developer) handlers
-from .get_rubrics_handler import get_rubrics
from .get_tasks_report_handler import get_tasks_report_planka
from .help_handler import help
from .list_chats_handler import list_chats
diff --git a/src/tg/handlers/flow_handlers.py b/src/tg/handlers/flow_handlers.py
index d4bb7e8..1eccde2 100644
--- a/src/tg/handlers/flow_handlers.py
+++ b/src/tg/handlers/flow_handlers.py
@@ -10,9 +10,7 @@
from ...app_context import AppContext
from ...consts import (
ButtonValues,
- GetTasksReportData,
PlainTextUserAction,
- BoardListAlias,
)
from ...db.db_client import DBClient
from ...db.db_objects import Reminder
@@ -23,19 +21,6 @@
logger = logging.getLogger(__name__)
-SECTIONS = [
- ("Идеи для статей", BoardListAlias.TOPIC_SUGGESTION_1),
- ("Готовая тема", BoardListAlias.TOPIC_READY_2),
- ("Уже пишу", BoardListAlias.DRAFT_N_PROGRESS_3, True),
- ("Передано на редактуру", BoardListAlias.DRAFT_COMPLETED_4),
- ("На редактуре", BoardListAlias.PENDING_EDITOR_5),
- ("Проверка качества SEO", BoardListAlias.PENDING_SEO_EDITOR_6),
- ("Отредактировано", BoardListAlias.APPROVED_EDITOR_7),
- ("Отобрано на финальную проверку", BoardListAlias.PENDING_CHIEF_EDITOR_8),
- ("Отобрано для публикации", BoardListAlias.PUBLISH_BACKLOG_9),
- ("Готово для вёрстки", BoardListAlias.PUBLISH_IN_PROGRESS_10),
-]
-
def handle_stateless_message(update, tg_context):
"""
@@ -110,117 +95,6 @@ def handle(self) -> Optional[PlainTextUserAction]:
raise NotImplementedError
-def _generate_rubric_summary(update, rubric_name: str) -> None:
- try:
- app_context = AppContext()
- pc = app_context.planka_client
- labels = pc.get_labels()
- rubric_label = next(
- (
- lbl
- for lbl in labels
- if lbl.name.strip().lower() == rubric_name.strip().lower()
- ),
- None,
- )
- if not rubric_label:
- logger.warning(
- f"_generate_rubric_summary: Рубрика не найдена: {rubric_name}"
- )
- reply(
- load(
- "rubric_not_found",
- rubric_name=rubric_name,
- ),
- update,
- )
- return
-
- try:
- lists = pc.get_lists()
- except Exception as e:
- logger.error(
- f"_generate_rubric_summary: не удалось получить lists: {e}",
- exc_info=True,
- )
- reply(load("failed_get_board_lists"), update)
- return
-
- message_parts = [
- load(
- "rubric_report_job__intro",
- rubric=rubric_name,
- )
- ]
-
- had_errors = False
-
- for column_name, alias, *meta_flag in SECTIONS:
- need_meta = bool(meta_flag and meta_flag[0])
- heading = load(alias.value)
- target_list = next(
- (lst for lst in lists if lst.name.strip().startswith(column_name)), None
- )
-
- if not target_list:
- message_parts.append(f"{heading} (0)")
- message_parts.append("")
- continue
-
- try:
- cards = pc.get_cards(list_ids=[target_list.id])
- except Exception:
- had_errors = True
- message_parts.append(f"{heading} (0)")
- message_parts.append("")
- continue
-
- filtered = [
- card
- for card in cards
- if any(lbl.id == rubric_label.id for lbl in card.labels)
- ]
-
- filtered.sort(key=lambda c: c.due or datetime.max)
-
- count = len(filtered)
- message_parts.append(f"{heading} ({count})")
-
- if not filtered:
- message_parts.append("(пусто)")
- else:
- for card in filtered:
- link = f'{card.name}'
- if need_meta:
- due_str = (
- card.due.strftime("%d.%m.%Y") if card.due else "без срока"
- )
- try:
- fields = pc.get_custom_fields(card.id)
- authors = (
- ", ".join(fields.authors)
- if fields.authors
- else "неизвестно"
- )
- except Exception:
- authors = "неизвестно"
- message_parts.append(f"- {link}")
- message_parts.append(f" • Дедлайн: {due_str}")
- message_parts.append(f" • Автор: {authors}")
- else:
- message_parts.append(f"- {link}")
-
- message_parts.append("")
-
- if had_errors:
- message_parts.append(load("partial_data_error "))
-
- reply("\n".join(message_parts), update, parse_mode="HTML")
-
- except Exception:
- reply(load("failed_try_later"), update)
-
-
def _show_reminder_edit_options(
reminder: Reminder, update: telegram.Update, command_data: dict
):
@@ -312,32 +186,6 @@ def _handle_task_report_helper(command_data, add_labels, update):
return None
-class GetRubricsChooseRubricHandler(BaseUserMessageHandler):
- def handle(self) -> Optional[PlainTextUserAction]:
- try:
- idx = int(self.user_input) - 1
- rubrics = self.command_data.get(
- GetTasksReportData.LISTS
- ) or self.tg_context.chat_data.get("available_rubrics", [])
- if not (0 <= idx < len(rubrics)):
- raise ValueError
- except Exception:
- reply(
- load(
- "invalid_rubric_number",
- max=len(rubrics),
- ),
- self.update,
- )
- return PlainTextUserAction.GET_RUBRICS__CHOOSE_RUBRIC
-
- selected = rubrics[idx]
- _generate_rubric_summary(self.update, selected)
-
- self.tg_context.chat_data.pop(consts.LAST_ACTIONABLE_COMMAND, None)
- return None
-
-
class GetTasksReportEnterBoardNumberHandler(BaseUserMessageHandler):
def handle(self) -> Optional[PlainTextUserAction]:
planka_client = PlankaClient()
diff --git a/src/tg/handlers/get_rubrics_handler.py b/src/tg/handlers/get_rubrics_handler.py
deleted file mode 100644
index b48bc84..0000000
--- a/src/tg/handlers/get_rubrics_handler.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import logging
-from telegram import Update
-from telegram.ext import CallbackContext
-
-from src.strings import load
-
-from ... import consts
-from ...app_context import AppContext
-from ...consts import PlainTextUserAction
-from .utils import manager_only, direct_message_only, reply
-
-logger = logging.getLogger(__name__)
-
-EXCLUDED_LOAD_KEYS = [
- "common_report__section_title_proofreading",
- "common_report_illustration",
- "common_report_proposed_illustration",
- "common_report_telegram",
-]
-
-TASK_NAME = "get_rubrics"
-
-
-@manager_only
-@direct_message_only
-def get_rubrics(update: Update, tg_context: CallbackContext) -> None:
- logger.info("get_rubrics: start")
- app_context = AppContext()
-
- excluded_rubrics = {load(key) for key in EXCLUDED_LOAD_KEYS}
- try:
- labels = app_context.planka_client.get_labels()
- filtered = [
- lbl.name
- for lbl in labels
- if lbl.name and lbl.name.lower() not in excluded_rubrics
- ]
- filtered.sort()
- logger.info("get_rubrics: %d rubrics after filter", len(filtered))
-
- if not filtered:
- reply(load("rubrics_not_found"), update)
- return
-
- cmd_data = {
- consts.GetTasksReportData.LISTS: filtered,
- consts.NEXT_ACTION: PlainTextUserAction.GET_RUBRICS__CHOOSE_RUBRIC.value,
- }
- tg_context.chat_data[TASK_NAME] = cmd_data
- tg_context.chat_data[consts.LAST_ACTIONABLE_COMMAND] = TASK_NAME
- logger.info(
- "get_rubrics: saved command_data and LAST_ACTIONABLE_COMMAND=%s", TASK_NAME
- )
-
- # Show list
- rubric_list = "\n".join(f"{i + 1}) {name}" for i, name in enumerate(filtered))
- message = load("get_rubric_number") + "\n" + rubric_list
- reply(message, update)
- logger.info("get_rubrics: sent rubric list to user")
-
- except Exception as e:
- logger.error("get_rubrics: error %s", e, exc_info=True)
- reply(load("failed_get_rubrics_list"), update)
diff --git a/src/tg/handlers/user_message_handler.py b/src/tg/handlers/user_message_handler.py
index f144b10..8fc849b 100644
--- a/src/tg/handlers/user_message_handler.py
+++ b/src/tg/handlers/user_message_handler.py
@@ -23,7 +23,6 @@ def handle_callback_query(
ACTION_HANDLERS = {
- PlainTextUserAction.GET_RUBRICS__CHOOSE_RUBRIC: flow_handlers.GetRubricsChooseRubricHandler,
PlainTextUserAction.GET_TASKS_REPORT__ENTER_BOARD_NUMBER: flow_handlers.GetTasksReportEnterBoardNumberHandler,
PlainTextUserAction.GET_TASKS_REPORT__ENTER_LIST_NUMBER: flow_handlers.GetTasksReportEnterListNumberHandler,
PlainTextUserAction.GET_TASKS_REPORT__ENTER_INTRO: flow_handlers.GetTasksReportEnterIntroHandler,