<p>jinja2 tidak lagi mendukung pemuat pytest</p>

Dibuat pada 10 Mar 2020  ·  18Komentar  ·  Sumber: pallets/jinja

Saat ini, jinja2 mengharapkan _path didefinisikan atau get_filenames: https://github.com/pallets/jinja/blob/master/src/jinja2/loaders.py#L262 -L281

Penulis ulang pernyataan pytest tidak mendefinisikan keduanya (lihat https://github.com/pytest-dev/pytest/blob/master/src/_pytest/assertion/rewrite.py#L48 ), dan dengan demikian menjalankan rangkaian pengujian pada kode sumber yang memiliki global berikut:

from jinja2 import PackageLoader
LOADER = PackageLoader(__name__, "templates")

akan gagal dengan:

    raise ValueError(
E   ValueError: The 'xxx' package was not installed in a way that PackageLoader understands.

Tidak yakin apakah di sini jinja2 perlu mendukung lebih banyak cara untuk mendapatkan root template, atau pytest loader kehilangan beberapa metode.

Semua 18 komentar

Ini sepertinya terkait dengan #1148. Kami menjatuhkan pkg_resources dan sekarang menggunakan pkgutil.get_loader() dan loader.get_filename() . Jika pemuat Pytest menyediakan get_filename itu akan berfungsi.

Di sinilah kami mendeteksi paket, ada juga beberapa solusi dalam kode sekitarnya untuk mendukung impor zip dan namespace: https://github.com/pallets/jinja/blob/45a76a3794a91e6d7077ced88c814a96cc87d5c2/src/jinja2/loaders.py#L262 -L267

Pemuat Pytest tidak menyediakan get_filename seperti yang saya tunjukkan di posting pertama. Apakah Anda yakin itu harus untuk loader apa pun?

jinja2 membuat asumsi tentang loader yang bukan bagian dari PEP 451 -- mungkin harus menggunakan atribut .origin dari spesifikasi modul di dunia pep451+

Kami membutuhkan cara untuk mendapatkan jalur ke file dalam sebuah paket untuk memuatnya. Tampaknya ini adalah cara untuk melakukannya dengan API yang disediakan oleh Python, tetapi memang dokumentasi tentang cara melakukan apa pun dengan API tersebut tidak dapat ditembus oleh saya.

Jika ada yang punya saran lebih baik yang bermain lebih bagus dengan loader yang berbeda sambil tetap mendukung direktori, zip, dan ruang nama, saya akan sangat menghargai bantuannya.

cc @jaraco

Jika Anda ingin memuat beberapa sumber, bukankah Anda harus menggunakan https://docs.python.org/3/library/importlib.html#module -importlib.resources; Anda tidak perlu tahu sumber filenya, hanya apa isinya, bukan?

resources mengharuskan semua direktori "sumber daya" untuk memiliki file __init__.py , yang akan lebih tidak sesuai dengan cara kerja Jinja. Lihat https://gitlab.com/python-devs/importlib_resources/issues/58#note_232533726 untuk umpan balik saya tentang itu.

ini mungkin merupakan titik awal yang membantu, saya akan melihat apakah saya dapat memasukkan beberapa kode ke jinja2: https://github.com/asottile/aspy.refactor_imports/blob/519ee18ea75e0045b9b53644c627c6817b2a0748/aspy/refactor_imports/classify.py#L76 -L91

Tampaknya ini mungkin merupakan oklusi dari desain awal untuk imporltib.resources ; mengadopsinya dalam bentuknya saat ini meskipun menyebabkan regresi fitur untuk jinja2; yaitu tiba-tiba tidak lagi mendukung pytest; jadi ya mungkin kode tertaut @asottile harus ditambahkan untuk mengisi celah sementara upstream menambahkan dukungan.

Sepertinya mungkin importlib_resources mendapat pembaruan yang memungkinkan subdirektori? https://importlib-resources.readthedocs.io/en/latest/changelog%20 (links).html#v1-1-0 Mungkin bagus untuk dilihat juga.

1169 adalah upaya perbaikan, saya mungkin masih memerlukan changelog dll. tetapi Anda mungkin dapat mencobanya dan melihat apakah itu memperbaiki masalah Anda @gaborbernat

Tidak apa-apa, masalah ini masih berlaku.

Dikembalikan di #1182 kembali menggunakan pkg_resources untuk 2.11.2, akan menggunakan #1169 untuk 3.0.

Bisakah kita mendapatkan rilis dengan ini?

Menunggu satu PR lainnya.

Bisakah Anda menghubungkannya? 😄

Saya menduga itu #1183 mengingat tonggak sejarah

Baru saja merilis 2.11.2 yang mengembalikan perubahan. 3.0 akan memiliki perilaku baru dengan perbaikan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat