[Yum] building plugin that simulates repository...
James Antill
james-yum at and.org
Fri Oct 14 13:31:10 UTC 2011
Dmitry Makovey <dmitry at athabascau.ca> writes:
> Hi James,
>
> thanks for the reply! Some clarifications inline...
>
> On Thursday, October 13, 2011, James Antill wrote:
>> Dmitry Makovey <dmitry at athabascau.ca> writes:
>> > Hi,
>> >
>> > I'm trying to build a plugin that would dynamically "inject" local
>> > "repositories" (which are nothing more than collections of RPM files) but
>> > I keep on bumping into problems. Latest one is:
>> >
>> > File "/usr/lib/python2.4/site-packages/yum/packages.py", line 1145, in
>> > __getattr__
>> >
>> > return self.hdr[thing]
>> >
>> > KeyError: 'unknown header tag'
[...]
>> Change the code to what is done upstream (gives the attribute name),
>> will help debugging a lot.
>
> you got me there. What do you mean? So far I'm stuck trying to figure out what
> the hdr['tag'] should include - from what I've seen _populatePrco() is
> supposed to do exactly that, but apparently it doesn't.
This is __getattr__ from current upstream:
def __getattr__(self, thing):
#FIXME - if an error - return AttributeError, not KeyError
# ONLY FIX THIS AFTER THE API BREAK
if thing.startswith('__') and thing.endswith('__'):
# If these existed, then we wouldn't get here ...
# So these are missing.
raise AttributeError, "%s has no attribute %s" % (self, thing)
try:
return self.hdr[thing]
except KeyError:
# Note above, API break to fix this ... this at least is a nicer
# msg. so we know what we accessed that is bad.
raise KeyError, "%s has no attribute %s" % (self, thing)
except ValueError:
# Note above, API break to fix this ... this at least is a nicer
# msg. so we know what we accessed that is bad.
raise ValueError, "%s has no attribute %s" % (self, thing)
[...]
> File "/usr/lib/python2.4/site-packages/yum/packages.py", line 1145, in
> __getattr__
> return self.hdr[thing]
> KeyError: 'unknown header tag'
...which will at least tell you what 'thing' is here, which should
give some idea about why it can't find it.
>> The attached code looks like it should work (just creating a normal
>> PackageSack() out of YumLocalPackages(), AIUI). So you should be able
>> to debug it and have it work ... and I'd thought about adding
>> something like that to core yum too, for a few reasons, so parts of it
>> could go upstream.
>
> thus the intent to go as "generic" as I can get away with.
*nods*
>> However if you don't need to squeeze every last bit of speed out of
>> it, look at what the tmprepo plugin does and just do that (I'm
>> assuming it the tmprepo way isn't _much_ slower).
>
> tmprepo is where I've got the "inspiration" but turned out it was creating
> temp files on a disk (in other words being a bit "hackish").
Yeh, it's not great (relies on createrepo etc.) ... but it works. If
you create a real "dir. repo" then it'd probably move to using that
pretty quickly :)
--
James Antill -- james at and.org
More information about the Yum
mailing list