[Zope-dev] z3c.recipe.i18n and zope.app.locales.extract

Roger Ineichen dev at projekt01.ch
Thu Jul 16 19:13:43 EDT 2009


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



More information about the Zope-Dev mailing list