Sqlalchemy_i18n erstellen Übersetzungen verursachen FehlerPython

Python-Programme
Anonymous
 Sqlalchemy_i18n erstellen Übersetzungen verursachen Fehler

Post by Anonymous »

Ich habe eine Strawberry GraphQL -App, die SQLalchemy für Modelle verwendet, und sqlalchemy_i18n für die Internationalisierung. Ich habe die grundlegende Setup -Handbuch für i18n auf den Paketdokumenten verfolgt, aber ich kann es einfach nicht zum Laufen bringen.

Code: Select all

# app/db/__init__.py
import sqlalchemy_utils
from sqlalchemy_i18n import make_translatable

from app.locale import get_locale

sqlalchemy_utils.i18n.get_locale = get_locale
make_translatable(options={"locales": ["en", "fr"], "auto_create_locales": True})
< /code>
app.locale ist nur eine Datei, die sqlalchemy_utils.i18n.get_locale = "en" zum Testen überschreibt.from sqlalchemy import (
Boolean,
Column,
Date,
Float,
ForeignKey,
Integer,
String,
Table,
Text,
)

from sqlalchemy.orm import relationship
from sqlalchemy_i18n import Translatable, translation_base

from app.db.session import Base

class Category(Base, Translatable):
__tablename__ = "category"
__translatable__ = {'locales': ["en", "fr"]}
category_id = Column(Integer, primary_key=True)
uuid = Column(String, nullable=False)
code = Column(String)
locale = "en"

class CategoryTranslation(translation_base(Category)):
__tablename__ = "category_trans"
category = Column(String, nullable=False)
desc = Column(String, nullable=False)
< /code>
Und ich versuche eine GraphQL -Mutation auszuführen, die so aussieht: < /p>
import uuid
import strawberry
from strawberry.types import Info
from app.db.session import get_db
from app.models.models import Category, CategoryTranslation
from app.types.types import Category as CategoryType

@strawberry.input
class CreateCategoryInput:
category: str
desc: str

def create_category_resolver(
data: CreateCategoryInput, info: Info, locale: str = "en"
) -> CategoryType:
db_session = next(get_db())
try:
uuid_str = str(uuid.uuid4())
new_category = Category(locale=locale, uuid=uuid_str, code=None)
print(f"Locale for new category: {new_category.locale}")
print(f"Valid locales: {new_category.__translatable__['manager'].option(new_category, 'locales')}")
db_session.add(new_category)
print("test123")
db_session.flush()
new_category.translations['en'] = CategoryTranslation(
category=data.category,
desc=data.desc,

)
print("Translations:", new_category.translations)

db_session.flush()
db_session.commit()

return CategoryType(
categoryId=new_category.category_id,
uuid=new_category.uuid,
code=new_category.code,
category=new_category.translations[locale].category,
desc=new_category.translations[locale].desc,
)
except Exception as e:
db_session.rollback()
print(f"Error creating category: {e}")
raise e
finally:
db_session.close()
< /code>
Die Idee am Ende ist es, das Gebietsschema vom Frontend aus zu greifen, aber ich bin an einigen Orten für das Debuggen fest. Wie Sie sehen, habe ich dort ein paar Testdrucke, es schafft es nie zu "testing123", was bedeutet, dass es beim Hinzufügen der Instanz fehlschlägt. Ich habe zuerst versucht, Übersetzungen durchzuführen, bevor ich zur Sitzung hinzugefügt wurde und das auch fehlschlägt. Die Orte drucken wie erwartet, "en" zuerst und ['en', 'fr'] im zweiten Druck.  < /P>
Der Fehler, den ich bekomme, lautet wie folgt:File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 3481, in add
self._save_or_update_state(state)
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/sqlalchemy/orm/session.py", line 3508, in _save_or_update_state
for o, m, st_, dct_ in mapper.cascade_iterator(
~~~~~~~~~~~~~~~~~~~~~~~^
"save-update", state, halt_on=self._contains_state
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
):
^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/sqlalchemy/orm/mapper.py", line 3979, in cascade_iterator
queue = deque(
prop.cascade_iterator(
......
)
)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/sqlalchemy/orm/relationships.py", line 1524, in cascade_iterator
tuples = state.manager[self.key].impl.get_all_pending(state, dict_)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get_all_pending'
Die Dokumente, die ich auf i18n konsultiert habe>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post