importlib.resources.abc -- کلاس‌های پایه انتزاعی برای منابع

کد منبع: Lib/importlib/resources/abc.py


اضافه شده در نسخه‌ی 3.11.

class importlib.resources.abc.ResourceReader

جایگزین‌شده با TraversableResources

یک کلاس پایه انتزاعی برای فراهم کردن امکان خواندن منابع.

از دیدگاه این ABC، یک منبع یک مصنوع دودویی است که درون یک بسته گنجانده شده است. معمولاً این چیزی مانند یک پرونده داده است که در کنار پرونده __init__.py آن بسته قرار دارد. هدف این کلاس کمک به انتزاع دسترسی به چنین پرونده‌های داده‌ای است، به‌طوری که مهم نباشد بسته و پرونده(های) داده‌ی آن مثلاً در یک پرونده zip ذخیره شده‌اند یا روی سامانه فایل‌بندی.

برای هر یک از متدهای این کلاس، انتظار می‌رود آرگومان resource یک شیء شبه‌مسیر باشد که از نظر مفهومی صرفاً یک نام پرونده را نشان می‌دهد. این بدان معناست که نباید هیچ مسیر زیرپوشه‌ای در آرگومان resource گنجانده شود. این به آن دلیل است که مکان بسته‌ای که خواننده به آن تعلق دارد، به‌عنوان «پوشه» عمل می‌کند. بر این اساس، پوشه‌ها و نام پرونده‌ها به‌ترتیب به بسته‌ها و منابع تشبیه شده‌اند. به همین دلیل نیز انتظار می‌رود نمونه‌های این کلاس مستقیماً به بسته‌ای مشخص مرتبط باشند (به‌جای آنکه بتوانند چندین بسته یا یک ماژول را نشان دهند).

انتظار می‌رود بارگذارهایی که می‌خواهند از خواندن منابع پشتیبانی کنند، متدی به نام get_resource_reader(fullname) ارائه دهند که شیءای را برمی‌گرداند که رابط این ABC را پیاده‌سازی می‌کند. اگر ماژول مشخص‌شده با fullname یک بسته نباشد، این متد باید None را برگرداند. شیءای سازگار با این ABC باید تنها زمانی برگردانده شود که ماژول مشخص‌شده یک بسته باشد.

منسوخ شده از نسخه‌ی 3.12: به‌جای آن از importlib.resources.abc.TraversableResources استفاده کنید.

abstractmethod open_resource(resource)

یک شیء شبه‌پرونده بازشده برای خواندن منبع به‌صورت دودویی برمی‌گرداند.

اگر منبع یافت نشود، FileNotFoundError پرتاب می‌شود.

abstractmethod resource_path(resource)

مسیر سامانه فایل‌بندی برای resource را برمی‌گرداند.

اگر منبع به‌طور مشخص در سامانه فایل‌بندی وجود ندارد، FileNotFoundError را پرتاب کنید.

abstractmethod is_resource(path)

اگر مسیر مشخص‌شده با path یک منبع در نظر گرفته شود، True برگردانده می‌شود. اگر path وجود نداشته باشد، FileNotFoundError پرتاب می‌شود.

تغییر یافته در نسخه‌ی 3.10: آرگومان name به path تغییر نام یافت.

abstractmethod contents()

یک پیمایش‌پذیر از رشته‌ها بر روی محتوای بسته برمی‌گرداند. توجه داشته باشید که لازم نیست همه‌ی نام‌هایی که پیمایش‌گر برمی‌گرداند، منابع واقعی باشند، برای مثال، برگرداندن نام‌هایی که is_resource() برای آن‌ها نادرست باشد، قابل قبول است.

مجاز بودن برگرداندن نام‌های غیرمنبع به منظور پوشش موقعیت‌هایی است که نحوه ذخیره‌سازی یک بسته و منابع آن از پیش مشخص است و نام‌های غیرمنبع مفید خواهند بود. برای مثال، برگرداندن نام‌های زیرپوشه مجاز است تا در صورتی که مشخص است بسته و منابع در سامانه فایل‌بندی ذخیره شده‌اند، بتوان مستقیماً از آن نام‌های زیرپوشه استفاده کرد.

این متد انتزاعی یک پیمایش‌پذیر بدون هیچ آیتمی بازمی‌گرداند.

class importlib.resources.abc.Traversable

یک شیء با زیرمجموعه‌ای از متدهای pathlib.Path که برای پیمایش پوشه‌ها و باز کردن پرونده‌ها مناسب است.

برای بازنمایی شیء در سامانه فایل‌بندی، از importlib.resources.as_file() استفاده کنید.

name

انتزاعی. نام پایه‌ی این شیء بدون هیچ ارجاعی به والد.

abstractmethod iterdir()

اشیای Traversable در self را yield می‌کند.

abstractmethod is_dir()

اگر self یک پوشه باشد، True را برمی‌گرداند.

abstractmethod is_file()

اگر self یک پرونده باشد، True را برمی‌گرداند.

abstractmethod joinpath(*pathsegments)

پوشه‌ها را بر اساس pathsegments پیمایش می‌کند و نتیجه را به‌عنوان Traversable برمی‌گرداند.

هر آرگومان pathsegments می‌تواند شامل چندین نام باشد که با اسلش‌های رو به جلو (/، posixpath.sep) از هم جدا شده‌اند. برای مثال، موارد زیر معادل هستند:

files.joinpath('subdir', 'subsuddir', 'file.txt')
files.joinpath('subdir/subsuddir/file.txt')

توجه داشته باشید که برخی پیاده‌سازی‌های Traversable ممکن است به آخرین نسخه‌ی پروتکل به‌روزرسانی نشده باشند. برای سازگاری با چنین پیاده‌سازی‌هایی، برای هر فراخوانی joinpath یک آرگومان واحد بدون جداکننده‌های مسیر ارائه دهید. برای مثال:

files.joinpath('subdir').joinpath('subsubdir').joinpath('file.txt')

تغییر یافته در نسخه‌ی 3.11: joinpath چندین pathsegments را می‌پذیرد، و این بخش‌ها می‌توانند شامل اسلش‌های رو به جلو به‌عنوان جداکننده‌های مسیر باشند. پیش‌تر، تنها یک آرگومان child پذیرفته می‌شد.

abstractmethod __truediv__(child)

برگرداندن فرزند Traversable در self. معادل joinpath(child).

abstractmethod open(mode='r', *args, **kwargs)

mode می‌تواند 'r' یا 'rb' باشد تا به‌صورت متنی یا دودویی باز شود. دسته‌ای مناسب برای خواندن برمی‌گرداند (مشابه pathlib.Path.open).

هنگام باز کردن به‌صورت متن، پارامترهای کدگذاری را می‌پذیرد، مانند آن‌هایی که io.TextIOWrapper می‌پذیرد.

read_bytes()

محتویات self را به‌صورت بایت بخوانید.

read_text(encoding=None)

محتوای self را به‌صورت متن بخوانید.

class importlib.resources.abc.TraversableResources

یک کلاس پایه انتزاعی برای خواننده‌های منابعی که قادر به ارائه رابط importlib.resources.files() هستند. این کلاس، زیرکلاسی از ResourceReader است و پیاده‌سازی‌های مشخصی از متدهای انتزاعی ResourceReader را ارائه می‌دهد. بنابراین، هر بارگذاری که TraversableResources را فراهم کند، ResourceReader را نیز فراهم می‌کند.

انتظار می‌رود بارگذارهایی که مایل به پشتیبانی از خواندن منابع هستند، این رابط را پیاده‌سازی کنند.

abstractmethod files()

یک شیء importlib.resources.abc.Traversable برای بسته بارگذاری‌شده برمی‌گرداند.