Hi Yuppie > Betreff: Re: z3c.recipe.i18n and zope.app.locales.extract > > Hi Roger, > > > Thanks for your feedback! > > Roger Ineichen wrote: > >> -----Ursprüngliche Nachricht----- > >> 2.) looking up the product version > >> ---------------------------------- > >> > >> POTMaker._getProductVersion() doesn't work for me. > >> zope.app.applicationcontrol is not used by Zope 2 and is > not part of > >> the specified dependencies. This raises an error. > >> > >> Proposal: Catch the error. Return an empty string if > version is not > >> found. > > > > Sounds good to me as a workarround > > > > Probably we should try to use the package version of the egg which > > uses the i18n recipe? > > Not every buildout is itself an egg. So in any case we need a > fallback. > > In my use case I plan to set the version manually in the > pot_header template. So I don't need the version lookup.
Agreed, sound good to me. > i18nextract.main() initializes POTMaker this way: > > # setup pot maker > maker = POTMaker(output_file, '') > > The second argument is the path that is used by > POTMaker._getProductVersion() to look up a 'version.txt' > file. Maybe we could use a better path than ''. But I'll > leave it to someone else to figure that out. I'm not sure and didn't look at the code but I guess the existing zope implementation depends on subversion get version info or something like that. This pattern is probably totaly out of date since we use buildout and eggs. > >> 4.) looking up basePath > >> ----------------------- > >> > >> i18nextract.main() contains these lines: > >> > >> # add maker for each given path > >> for pkgName, path in eggPaths: > >> srcIdx = path.rfind('src') > >> if srcIdx == -1: > >> # this is an egg package, strip down base path > >> basePath = path > >> moduleNames = pkgName.split('.') > >> moduleNames.reverse() > >> for mName in moduleNames: > >> mIdx = path.rfind(mName) > >> basePath = basePath[:mIdx] > >> pkgPath = path[len(basePath):] > >> else: > >> # this is a package linked in as externals > >> basePath = path[:srcIdx] > >> pkgPath = path[len(basePath):] > >> > >> I don't understand why we need different code for > "packages linked in > >> as externals". The "egg package" code works actually better for > >> linked in packages that don't follow the 'src' convention. > >> > >> Proposal: Use the 'if' code for all packages. > > > > I was fighting several times with this part during coding. > > The only thing which this part has to make sure is that we > do not use > > anything outside of the package in our path. > > > > The reason for not including everything outside the package in our > > path is that such a path whould be depend on the local setup e.g. > > > > D:\foo\dev\zope\session:3 > > > > We only have to make sure that this never will happen and > that we for > > each use case generate path like: > > > > zope/session.py:3 > > > > It could be that the if part is working for all usecases. > > but I'n not sure without debugging. > > Debugging doesn't help much if we don't know all use cases. Yes, that's true > What about testing it like this: > > We remove the 'else' part and wait until someone complains. > In that case we have a scenario for testing and fixing the > issue. If nobody complains, the 'else' part was indeed useless. > > The current code doesn't work for me because 'src' is found > but not the right place to split the path. I'm fine with that. I can test the changes with the project which I used as base when I wrote the path cleanup code. Agreed, using "src" as a hard coded name can end in a bad result. Regards Roger Ineichen _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )