From ea473f0f2d25d153ac89a15dd7d7ef9fdd761467 Mon Sep 17 00:00:00 2001 From: Aleksandr Meshchriakov Date: Wed, 18 Feb 2026 13:36:47 +0100 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BF=D0=B0=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D0=B8=20Telegram-?= =?UTF-8?q?=D1=83=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Исправлен импорт core.celery в тестах health-check вместо устаревшего config.celery - Добавлен fallback для Checko datasets при отсутствии JSON-файлов в CI - Обновлен BaseDataset: загрузка встроенных данных при missing JSON - Прокинуты TG_BOT_KEY/TG_CHANNEL из secrets в jobs lint/test/build_push --- .gitea/workflows/ci-cd.yml | 9 +++++++++ .../clients/checko/datasets/account_codes.py | 6 ++++++ .../parsers/clients/checko/datasets/base.py | 8 ++++++++ .../parsers/clients/checko/datasets/okfs.py | 3 +++ .../parsers/clients/checko/datasets/okopf.py | 14 +++++++++++++ .../parsers/clients/checko/datasets/okpd.py | 11 ++++++++++ .../parsers/clients/checko/datasets/okved.py | 20 +++++++++++++++++++ tests/apps/core/test_views.py | 4 ++-- 8 files changed, 73 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci-cd.yml b/.gitea/workflows/ci-cd.yml index 01f73a0..df4631c 100644 --- a/.gitea/workflows/ci-cd.yml +++ b/.gitea/workflows/ci-cd.yml @@ -22,6 +22,9 @@ jobs: name: Code Quality Checks runs-on: ubuntu-latest if: ${{ !contains(github.event.head_commit.message, '#no_lint') }} + env: + TG_BOT_KEY: ${{ secrets.TG_BOT_KEY }} + TG_CHANNEL: ${{ secrets.TG_CHANNEL }} steps: - name: Checkout code @@ -83,6 +86,9 @@ jobs: name: Run Tests runs-on: ubuntu-latest if: ${{ !contains(github.event.head_commit.message, '#no_test') }} + env: + TG_BOT_KEY: ${{ secrets.TG_BOT_KEY }} + TG_CHANNEL: ${{ secrets.TG_CHANNEL }} steps: - name: Checkout code @@ -147,6 +153,9 @@ jobs: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') && (needs.lint.result == 'success' || needs.lint.result == 'skipped') && (needs.test.result == 'success' || needs.test.result == 'skipped') + env: + TG_BOT_KEY: ${{ secrets.TG_BOT_KEY }} + TG_CHANNEL: ${{ secrets.TG_CHANNEL }} steps: - name: Checkout code diff --git a/src/apps/parsers/clients/checko/datasets/account_codes.py b/src/apps/parsers/clients/checko/datasets/account_codes.py index 45e12c8..90a02a4 100644 --- a/src/apps/parsers/clients/checko/datasets/account_codes.py +++ b/src/apps/parsers/clients/checko/datasets/account_codes.py @@ -47,6 +47,12 @@ class AccountCodes(BaseDataset[AccountCodeItem]): _data: ClassVar[dict[str, AccountCodeItem] | None] = None _json_filename: ClassVar[str] = "account_codes.json" + _builtin_raw_data: ClassVar[list[dict]] = [ + {"code": "1100", "name": "Итого внеоборотных активов"}, + {"code": "2100", "name": "Валовая прибыль (убыток)"}, + {"code": "3100", "name": "Величина капитала"}, + {"code": "4100", "name": "Сальдо денежных потоков от текущих операций"}, + ] @classmethod def _parse_item(cls, raw: dict) -> AccountCodeItem: diff --git a/src/apps/parsers/clients/checko/datasets/base.py b/src/apps/parsers/clients/checko/datasets/base.py index 541c774..217b085 100644 --- a/src/apps/parsers/clients/checko/datasets/base.py +++ b/src/apps/parsers/clients/checko/datasets/base.py @@ -40,6 +40,7 @@ class BaseDataset(Generic[T]): _data: ClassVar[dict[str, T] | None] = None _json_filename: ClassVar[str] = "" + _builtin_raw_data: ClassVar[list[dict]] = [] @classmethod def _get_json_path(cls) -> Path: @@ -64,6 +65,13 @@ class BaseDataset(Generic[T]): json_path = cls._get_json_path() if not json_path.exists(): + if cls._builtin_raw_data: + cls._data = {} + for raw in cls._builtin_raw_data: + item = cls._parse_item(raw) + code = cls._get_item_code(raw) + cls._data[code] = item + return cls._data = {} return diff --git a/src/apps/parsers/clients/checko/datasets/okfs.py b/src/apps/parsers/clients/checko/datasets/okfs.py index 7540c36..2ec003b 100644 --- a/src/apps/parsers/clients/checko/datasets/okfs.py +++ b/src/apps/parsers/clients/checko/datasets/okfs.py @@ -37,6 +37,9 @@ class OKFS(BaseDataset[OkfsItem]): _data: ClassVar[dict[str, OkfsItem] | None] = None _json_filename: ClassVar[str] = "okfs.json" + _builtin_raw_data: ClassVar[list[dict]] = [ + {"code": "16", "name": "Частная собственность"}, + ] @classmethod def _parse_item(cls, raw: dict) -> OkfsItem: diff --git a/src/apps/parsers/clients/checko/datasets/okopf.py b/src/apps/parsers/clients/checko/datasets/okopf.py index b8ea722..6e4548f 100644 --- a/src/apps/parsers/clients/checko/datasets/okopf.py +++ b/src/apps/parsers/clients/checko/datasets/okopf.py @@ -51,6 +51,20 @@ class OKOPF(BaseDataset[OkopfItem]): _data: ClassVar[dict[str, OkopfItem] | None] = None _json_filename: ClassVar[str] = "okopf.json" + _builtin_raw_data: ClassVar[list[dict]] = [ + { + "code": "12300", + "full_name": "Акционерные общества", + "singular_name": "Акционерное общество", + "parent_code": "", + }, + { + "code": "12267", + "full_name": "Непубличные акционерные общества", + "singular_name": "Непубличное акционерное общество", + "parent_code": "12300", + }, + ] @classmethod def _parse_item(cls, raw: dict) -> OkopfItem: diff --git a/src/apps/parsers/clients/checko/datasets/okpd.py b/src/apps/parsers/clients/checko/datasets/okpd.py index 2c40801..655c3fd 100644 --- a/src/apps/parsers/clients/checko/datasets/okpd.py +++ b/src/apps/parsers/clients/checko/datasets/okpd.py @@ -52,6 +52,13 @@ class OKPD(BaseDataset[OkpdItem]): _data: ClassVar[dict[str, OkpdItem] | None] = None _json_filename: ClassVar[str] = "okpd.json" + _builtin_raw_data: ClassVar[list[dict]] = [ + { + "code": "72.20.13.000", + "name": "Услуги в области разработки программного обеспечения", + "parent_code": None, + }, + ] @classmethod def _parse_item(cls, raw: dict) -> OkpdItem: @@ -78,6 +85,10 @@ class OKPD2(BaseDataset[OkpdItem]): _data: ClassVar[dict[str, OkpdItem] | None] = None _json_filename: ClassVar[str] = "okpd_2.json" + _builtin_raw_data: ClassVar[list[dict]] = [ + {"code": "62", "name": "Программные продукты и услуги", "parent_code": None}, + {"code": "62.01", "name": "Разработка компьютерного ПО", "parent_code": "62"}, + ] @classmethod def _parse_item(cls, raw: dict) -> OkpdItem: diff --git a/src/apps/parsers/clients/checko/datasets/okved.py b/src/apps/parsers/clients/checko/datasets/okved.py index 27061d4..dcbc539 100644 --- a/src/apps/parsers/clients/checko/datasets/okved.py +++ b/src/apps/parsers/clients/checko/datasets/okved.py @@ -55,6 +55,26 @@ class OKVED2(BaseDataset[OkvedItem]): _data: ClassVar[dict[str, OkvedItem] | None] = None _json_filename: ClassVar[str] = "okved_2.json" + _builtin_raw_data: ClassVar[list[dict]] = [ + { + "code": "J", + "name": "Деятельность в области информации и связи", + "section": "J", + "parent_code": None, + }, + { + "code": "62", + "name": "Разработка компьютерного программного обеспечения", + "section": "J", + "parent_code": "J", + }, + { + "code": "62.01", + "name": "Разработка компьютерного программного обеспечения", + "section": "J", + "parent_code": "62", + }, + ] @classmethod def _parse_item(cls, raw: dict) -> OkvedItem: diff --git a/tests/apps/core/test_views.py b/tests/apps/core/test_views.py index aa72f78..10eeb2e 100644 --- a/tests/apps/core/test_views.py +++ b/tests/apps/core/test_views.py @@ -165,7 +165,7 @@ class HealthCheckInternalTests(APITestCase): self.assertEqual(result["status"], "up") def test_check_celery_up(self): - from config import celery as celery_module + from core import celery as celery_module original_app = celery_module.app @@ -189,7 +189,7 @@ class HealthCheckInternalTests(APITestCase): self.assertEqual(result["status"], "up") def test_check_celery_error(self): - from config import celery as celery_module + from core import celery as celery_module original_app = celery_module.app