Исправлены падения тестов и 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
|
name: Code Quality Checks
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: ${{ !contains(github.event.head_commit.message, '#no_lint') }}
|
if: ${{ !contains(github.event.head_commit.message, '#no_lint') }}
|
||||||
|
env:
|
||||||
|
TG_BOT_KEY: ${{ secrets.TG_BOT_KEY }}
|
||||||
|
TG_CHANNEL: ${{ secrets.TG_CHANNEL }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@@ -83,6 +86,9 @@ jobs:
|
|||||||
name: Run Tests
|
name: Run Tests
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: ${{ !contains(github.event.head_commit.message, '#no_test') }}
|
if: ${{ !contains(github.event.head_commit.message, '#no_test') }}
|
||||||
|
env:
|
||||||
|
TG_BOT_KEY: ${{ secrets.TG_BOT_KEY }}
|
||||||
|
TG_CHANNEL: ${{ secrets.TG_CHANNEL }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@@ -147,6 +153,9 @@ jobs:
|
|||||||
(github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') &&
|
(github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') &&
|
||||||
(needs.lint.result == 'success' || needs.lint.result == 'skipped') &&
|
(needs.lint.result == 'success' || needs.lint.result == 'skipped') &&
|
||||||
(needs.test.result == 'success' || needs.test.result == 'skipped')
|
(needs.test.result == 'success' || needs.test.result == 'skipped')
|
||||||
|
env:
|
||||||
|
TG_BOT_KEY: ${{ secrets.TG_BOT_KEY }}
|
||||||
|
TG_CHANNEL: ${{ secrets.TG_CHANNEL }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
|
|||||||
@@ -47,6 +47,12 @@ class AccountCodes(BaseDataset[AccountCodeItem]):
|
|||||||
|
|
||||||
_data: ClassVar[dict[str, AccountCodeItem] | None] = None
|
_data: ClassVar[dict[str, AccountCodeItem] | None] = None
|
||||||
_json_filename: ClassVar[str] = "account_codes.json"
|
_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
|
@classmethod
|
||||||
def _parse_item(cls, raw: dict) -> AccountCodeItem:
|
def _parse_item(cls, raw: dict) -> AccountCodeItem:
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ class BaseDataset(Generic[T]):
|
|||||||
|
|
||||||
_data: ClassVar[dict[str, T] | None] = None
|
_data: ClassVar[dict[str, T] | None] = None
|
||||||
_json_filename: ClassVar[str] = ""
|
_json_filename: ClassVar[str] = ""
|
||||||
|
_builtin_raw_data: ClassVar[list[dict]] = []
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _get_json_path(cls) -> Path:
|
def _get_json_path(cls) -> Path:
|
||||||
@@ -64,6 +65,13 @@ class BaseDataset(Generic[T]):
|
|||||||
|
|
||||||
json_path = cls._get_json_path()
|
json_path = cls._get_json_path()
|
||||||
if not json_path.exists():
|
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 = {}
|
cls._data = {}
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,9 @@ class OKFS(BaseDataset[OkfsItem]):
|
|||||||
|
|
||||||
_data: ClassVar[dict[str, OkfsItem] | None] = None
|
_data: ClassVar[dict[str, OkfsItem] | None] = None
|
||||||
_json_filename: ClassVar[str] = "okfs.json"
|
_json_filename: ClassVar[str] = "okfs.json"
|
||||||
|
_builtin_raw_data: ClassVar[list[dict]] = [
|
||||||
|
{"code": "16", "name": "Частная собственность"},
|
||||||
|
]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _parse_item(cls, raw: dict) -> OkfsItem:
|
def _parse_item(cls, raw: dict) -> OkfsItem:
|
||||||
|
|||||||
@@ -51,6 +51,20 @@ class OKOPF(BaseDataset[OkopfItem]):
|
|||||||
|
|
||||||
_data: ClassVar[dict[str, OkopfItem] | None] = None
|
_data: ClassVar[dict[str, OkopfItem] | None] = None
|
||||||
_json_filename: ClassVar[str] = "okopf.json"
|
_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
|
@classmethod
|
||||||
def _parse_item(cls, raw: dict) -> OkopfItem:
|
def _parse_item(cls, raw: dict) -> OkopfItem:
|
||||||
|
|||||||
@@ -52,6 +52,13 @@ class OKPD(BaseDataset[OkpdItem]):
|
|||||||
|
|
||||||
_data: ClassVar[dict[str, OkpdItem] | None] = None
|
_data: ClassVar[dict[str, OkpdItem] | None] = None
|
||||||
_json_filename: ClassVar[str] = "okpd.json"
|
_json_filename: ClassVar[str] = "okpd.json"
|
||||||
|
_builtin_raw_data: ClassVar[list[dict]] = [
|
||||||
|
{
|
||||||
|
"code": "72.20.13.000",
|
||||||
|
"name": "Услуги в области разработки программного обеспечения",
|
||||||
|
"parent_code": None,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _parse_item(cls, raw: dict) -> OkpdItem:
|
def _parse_item(cls, raw: dict) -> OkpdItem:
|
||||||
@@ -78,6 +85,10 @@ class OKPD2(BaseDataset[OkpdItem]):
|
|||||||
|
|
||||||
_data: ClassVar[dict[str, OkpdItem] | None] = None
|
_data: ClassVar[dict[str, OkpdItem] | None] = None
|
||||||
_json_filename: ClassVar[str] = "okpd_2.json"
|
_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
|
@classmethod
|
||||||
def _parse_item(cls, raw: dict) -> OkpdItem:
|
def _parse_item(cls, raw: dict) -> OkpdItem:
|
||||||
|
|||||||
@@ -55,6 +55,26 @@ class OKVED2(BaseDataset[OkvedItem]):
|
|||||||
|
|
||||||
_data: ClassVar[dict[str, OkvedItem] | None] = None
|
_data: ClassVar[dict[str, OkvedItem] | None] = None
|
||||||
_json_filename: ClassVar[str] = "okved_2.json"
|
_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
|
@classmethod
|
||||||
def _parse_item(cls, raw: dict) -> OkvedItem:
|
def _parse_item(cls, raw: dict) -> OkvedItem:
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ class HealthCheckInternalTests(APITestCase):
|
|||||||
self.assertEqual(result["status"], "up")
|
self.assertEqual(result["status"], "up")
|
||||||
|
|
||||||
def test_check_celery_up(self):
|
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
|
original_app = celery_module.app
|
||||||
|
|
||||||
@@ -189,7 +189,7 @@ class HealthCheckInternalTests(APITestCase):
|
|||||||
self.assertEqual(result["status"], "up")
|
self.assertEqual(result["status"], "up")
|
||||||
|
|
||||||
def test_check_celery_error(self):
|
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
|
original_app = celery_module.app
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user