Я пытаюсь написать плагин воздушного потока, который добавляет кнопку меню, новый вид и конечную точку API.Кроме того, мне нужно прочитать и сохранить некоторые данные в таблице базы данных, которую плагин должен создать, когда воздушный поток подхватывает их.
Проблема существует, когда у меня есть 2 файла, назовите их view.py и mymodel.py .В view.py определены все мои представления, кнопки меню и т. Д.
В mymodel.py только модель sqlalchemy (только соответствующие строки и определение разбитой таблицы - см. Ниже)
mymodel.py :
from airflow.models.base import Base
class someDataBase(Base):
"""
Create Model someDataBase
"""
print('create table someDataBaseTableName')
__tablename__ = "someDataBaseTableName"
id = Column(Integer, primary_key=True)
В view.py я импортирую файл:
from someplugin.models.mymodel import someDataBase
структура папок:
├── plugins
│ └── someplugin
│ ├── __init__.py
│ ├── models
│ │ ├── mymodel.py
│ └── views
│ ├── __init__.py
│ └── view.py
При этом выдается следующее сообщение об ошибке:
{{plugins_manager.py:146}} ОШИБКА - Таблица 'someDataBaseTableName' уже определена для этого экземпляра MetaData.Укажите 'extension_existing = True', чтобы переопределить параметры и столбцы в существующем объекте таблицы.
(кстати: exte_existing = True не решает проблему :()
Я предполагаю проблемузаключается в том, что airflow загружает плагин через plugin_manager, а оператор import снова загружает класс someDataBase. Думаю, можно подтвердить это поведение, если я добавлю некоторые записи в класс someDataBase (назовем его «mylogging» - см. ниже).
airflow | create table someDataBaseTableName
airflow | create table someDataBaseTableName
В некотором роде исправление, но не удовлетворительное: если я определяю свою модель someDataBase непосредственно в view.py, она работает.
Любые советы о том, как решить эту проблему, очень приветствуются. Спасибо