[Chandler-dev] Re: Parcel loading vs. Egg loading
Brian Kirsch
bkirsch at osafoundation.org
Thu Jun 8 18:01:25 PDT 2006
Sure I understand that :)
It was more of a question of do we want to allow third party developers
to install translations via the installParcel
mechanism as a convience.
My personal opinion at this point is no! Lets just use eggs and have
that be our one and only means of doing resource
and localization registration.
-Brian
Brian Kirsch - Cosmo Developer / Chandler Internationalization Engineer
Open Source Applications Foundation
543 Howard St. 5th Floor
San Francisco, CA 94105
http://www.osafoundation.org
Phillip J. Eby wrote:
> At 01:05 PM 6/8/2006 -1000, Brian Kirsch wrote:
>
>> From my understanding:
>>
>> 1. Translations and resources will be kept in eggs
>> 2. The Chandler level translations and resource eggs will be on the
>> sys.path at the very start of Chandler.py
>> 3. At that point it is open for discussion but third party developers
>> could certainly use the installParcel logic
>> either in eggs or just as a regular old parcel.
>>
>> I am still a little unclear on number 3.
>
>
> installParcel is entirely unrelated. Markku's prototype code is 100%
> Chandler-agnostic. It doesn't import anything from Chandler, it
> doesn't do anything with the repository. It has no idea that there is
> such a thing as a "parcel". :)
>
> It doesn't need any of these things because all it does is support
> eggs publishing their i18n resources, and provide an API for looking
> up the resources and retrieving them later. So we can use it in
> Chandler, and it could be made available for any other project with
> similar needs.
>
>
> Phillip J. Eby wrote:
>
>>>>>> At 12:51 PM 6/8/2006 -0700, John Anderson wrote:
>>>>>>
>>>>>>> This helps, but I'm still a little confused about one issue.
>>>>>>> installParcel is called only if the parcel hasn't been loaded,
>>>>>>> i.e. we don't pay the it's cost every time Chandler is run, only
>>>>>>> the first time it's run. This turns out to be a big performance
>>>>>>> win. Can we get the same performance win while
>>>>>>> loading/registering egg resources?
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> This approach already does that, by piggybacking on the egg
>>>>>> scanning that Chandler already does at startup. installParcel
>>>>>> and parcel creation happen as a side effect of egg scanning,
>>>>>> where Chandler notices that there is an egg containing parcels
>>>>>> that are not in the repository. This process simply also checks
>>>>>> for resources in the eggs as it scans them.
>>>>>>
>>>>>>
>>>>>>> Phillip J. Eby wrote:
>>>>>>>
>>>>>>>> At 12:09 PM 6/8/2006 -0700, John Anderson wrote:
>>>>>>>>
>>>>>>>>> I was talking to Markku today and we thought it would be
>>>>>>>>> useful to have a 4-way Skype conversation to discuss parcel
>>>>>>>>> loading and egg loading as it related to discovering the
>>>>>>>>> internationalization files. So, how about meeting via Skype
>>>>>>>>> tomorrow morning, say 9:30 AM?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> In the interest of moving more of this kind of information to
>>>>>>>> the development lists, I'd just like to go ahead and propose
>>>>>>>> what I think Chandler should do to load the
>>>>>>>> internationalization data, using a mechanism based on Markku's
>>>>>>>> work so far.
>>>>>>>>
>>>>>>>> Markku currently has code (if I understand correctly) that
>>>>>>>> loops over the eggs on sys.path and builds an index, something
>>>>>>>> like:
>>>>>>>>
>>>>>>>> from pkg_resources import working_set
>>>>>>>>
>>>>>>>> for egg in working_set:
>>>>>>>> if egg.has_metadata('resource.info'):
>>>>>>>> # code here to update the registry of resource
>>>>>>>> # information by reading the 'resource.info' from
>>>>>>>> # the egg
>>>>>>>>
>>>>>>>> What I would propose doing is to change this code to read instead:
>>>>>>>>
>>>>>>>> from pkg_resources import working_set, add_activation_listener
>>>>>>>>
>>>>>>>> @add_activation_listener
>>>>>>>> def update_resources(egg):
>>>>>>>> if egg.has_metadata('resource.info'):
>>>>>>>> # code here to update the registry of resource
>>>>>>>> # information by reading the 'resource.info' from
>>>>>>>> # the egg
>>>>>>>>
>>>>>>>> What this code will do, is that whenever an egg is "activated"
>>>>>>>> (added to sys.path), its resources will be immediately detected
>>>>>>>> and loaded.
>>>>>>>>
>>>>>>>> Thus, any eggs that are on sys.path when Chandler starts, will
>>>>>>>> have their resources detected immediately (because
>>>>>>>> add_activation_listener calls the callback immediately for eggs
>>>>>>>> that are *already* on sys.path). Any that are loaded later
>>>>>>>> (e.g. by the parcel loader scanning PARCELPATH for more eggs)
>>>>>>>> will automatically cause the resource registry to be updated,
>>>>>>>> as the egg runtime will call the callback routine as shown above.
>>>>>>>>
>>>>>>>> As a side effect, if we later add the ability to download and
>>>>>>>> install eggs while Chandler is running, any resources they
>>>>>>>> define will also be registered.
>>>>>>>>
>>>>>>>> Does this answer the questions that you had in mind for the
>>>>>>>> meeting, or was there something else you wanted to cover?
>>>>>>>
>>>>>>>
>
More information about the chandler-dev
mailing list