حاليًا ، تتوقع jinja2 إما _path المعرفة أو get_filenames: https://github.com/pallets/jinja/blob/master/src/jinja2/loaders.py#L262 -L281
لا تحدد أداة إعادة كتابة تأكيد pytest أيًا منهما (انظر https://github.com/pytest-dev/pytest/blob/master/src/_pytest/assertion/rewrite.py#L48) ، وعلى هذا النحو تشغيل مجموعة اختبار على كود المصدر التي لديها ما يلي العالمية:
from jinja2 import PackageLoader
LOADER = PackageLoader(__name__, "templates")
سوف تفشل مع:
raise ValueError(
E ValueError: The 'xxx' package was not installed in a way that PackageLoader understands.
لست متأكدًا مما إذا كان jinja2 هنا يحتاج إلى دعم المزيد من الطرق للحصول على جذر القالب ، أو أن أداة تحميل pytest تفتقد إلى بعض الطرق.
يبدو أن هذا مرتبط بـ # 1148. لقد أسقطنا pkg_resources
ونستخدم الآن pkgutil.get_loader()
و loader.get_filename()
. إذا كان مُحمل Pytest يوفر get_filename
، فيجب أن يعمل.
هنا حيث نكتشف الحزمة ، هناك أيضًا بعض الحلول في الكود المحيط لدعم عمليات استيراد zip ومساحة الأسماء: https://github.com/pallets/jinja/blob/45a76a3794a91e6d7077ced88c814a96cc87d5c2/src/jinja2/loaders.py#L262 -L267
لا يوفر مُحمل Pytest get_filename كما أشرت في
تضع jinja2 افتراضات حول اللوادر التي ليست جزءًا من PEP 451 - من المحتمل أن تستخدم السمة .origin
لمواصفات الوحدة في pep451 + worlds
نحتاج إلى طريقة للحصول على المسار إلى الملفات داخل الحزمة من أجل تحميلها. يبدو أن هذه هي الطريقة للقيام بذلك باستخدام واجهات برمجة التطبيقات التي توفرها Python ، ولكن من المسلم به أن التوثيق حول كيفية القيام بأي شيء باستخدام واجهات برمجة التطبيقات تلك كان غير قابل للاختراق إلى حد كبير بالنسبة لي.
إذا كان لدى أي شخص اقتراح أفضل يلعب بشكل أفضل مع أدوات تحميل مختلفة بينما لا يزال يدعم الدلائل والكود البريدية ومساحات الأسماء ، فسأكون ممتنًا للمساعدة.
سي سيjaraco
إذا كنت تريد تحميل بعض الموارد ، فلا يجب أن تستخدم https://docs.python.org/3/library/importlib.html#module -importlib.resources؛ لا داعي لك لمعرفة مصدر الملف ، فقط ما يحتويه ، أليس كذلك؟
يتطلب resources
أن تحتوي جميع أدلة "الموارد" على ملفات __init__.py
، والتي ستكون أكثر تعارضًا مع طريقة عمل Jinja. راجع https://gitlab.com/python-devs/importlib_resources/issues/58#note_232533726 للحصول على ملاحظاتي حول ذلك.
قد تكون هذه نقطة بداية مفيدة ، سأرى ما إذا كان بإمكاني إضفاء بعض التعليمات البرمجية إلى jinja2: https://github.com/asottile/aspy.refactor_imports/blob/519ee18ea75e0045b9b53644c627c6817b2a0748/aspy/refactor_imports/classify.py#L76 -L91
يبدو أن هذا قد يكون انسدادًا للتصميم الأولي لـ imporltib.resources
؛ اعتماده في شكله الحالي على الرغم من أنه يتسبب في تراجع ميزات jinja2 ؛ أي أن فجأة لم يعد يدعم pytest ؛ لذلك ربما يجب إضافة كود مرتبط asottile لملء الفراغ بينما يضيف المنبع الدعم.
يبدو أنه ربما حصل importlib_resources
على تحديث يسمح بالأدلة الفرعية؟ https://importlib-resources.readthedocs.io/en/latest/changelog٪20 (الروابط) .html # v1-1-0 قد يكون جيدًا للتحقق أيضًا.
لا تهتم ، القضية لا تزال صالحة.
تم الإرجاع في # 1182 مرة أخرى إلى استخدام pkg_resources لـ 2.11.2 ، سيتم استخدام # 1169 لـ 3.0.
هل يمكننا الحصول على تحرير مع هذا من فضلك؟
في انتظار العلاقات العامة الأخرى.
هل يمكنك ربطه؟ 😄
أظن أنه رقم 1183 بالنظر إلى المعلم
تم إصدار 2.11.2 للتو والذي يعكس التغيير. 3.0 سيكون له السلوك الجديد مع الإصلاح.