[Import-SIG] Loading Resources From a Python Module/Package
Donald Stufft
donald at stufft.io
Sat Jan 31 19:18:05 CET 2015
> On Jan 31, 2015, at 1:11 PM, Barry Warsaw <barry at python.org> wrote:
>
> On Jan 31, 2015, at 11:43 AM, Donald Stufft wrote:
>
>> I think we do want to allow directories, it’s not unusual to have something
>> like:
>>
>> warehouse
>> ├── __init__.py
>> ├── templates
>> │ ├── accounts
>> │ │ └── profile.html
>> │ └── hello.html
>> ├── utils
>> │ └── mapper.py
>> └── wsgi.py
>>
>> Conceptually templates isn’t a package (even though with namespace packages
>> it kinda is) and I’d want to load profile.html by doing something like:
>>
>> importlib.resources.get_bytes(“warehouse”, “templates/accounts/profile.html”)
>
> I understand there's a conceptual wart, but I have no problem dropping an
> empty __init__.py file in those subdirectories and then using:
>
> importlib.resources.get_bytes('warehouse.templates.accounts', 'profile.html')
>
> And given how much easier it makes life from an implementation and description
> standpoint, I think it's a fine compromise.
I think it actually makes things *harder* from an implementation and description
standpoint. You’re thinking in terms of implementation for the FileLoader, but
say for a PostgreSQLLoader now I have to create mock packages for warehouse.templates
and warehouse.templates.accounts whereas if we treat the resource path not as a
file path, but as a key for an object store where “/“ is slightly special then
my PostgreSQL loader only need to have a “warehouse” package, and then a table
that essentially does something like:
package | resource key | data
--------------------------------------------------
warehouse | templates/accounts/profile.html | …
In the FileLoader we’d obviously treat the / as path separators and create directory
entries, but in reality it’s just a key: value store. I already implemented one of
these functions in a way that allows the / separator and I would have had to have
gone out of my way to disallow it rather than allow it.
---
Donald Stufft
PGP: 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA
More information about the Import-SIG
mailing list