Исправлены падения тестов и Telegram-уведомления CI
- Исправлен импорт 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
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user