Re: building plugin that simulates repository...

Dmitry Makovey <[email protected]>
Newsgroups gmane.linux.rpm.yum
Organization Athabasca University
Message-ID <[email protected]>
On Friday, October 14, 2011, James Antill wrote:
> >> > 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)

thanks for the reminder to do that. Now I've got things moving!

ended up with "enhanced" CPacManPackage class:

class CPacManPackage(YumHeaderPackage):$
    def __init__(self,repo,hdr):$
        YumHeaderPackage.__init__(self,repo,hdr)$
        self.pkgid = self.hdr[rpm.RPMTAG_SHA1HEADER]$
        if not self.pkgid:$
            self.pkgid = "%s.%s" %(self.hdr['name'], self.hdr['buildtime'])$
        self.id=self.pkgid$
        self.pkgKey = self.__hash__()$

and had to add things to CPacManRepo::__init_sack code:

            ypkg=CPacManPackage(self, hdr)$
            ypkg._populatePrco()$
            ypkg.basepath='file://'+pkg['path']$
            ypkg.relativepath=pkg['package_name']$

now I have working transactions integrating CPacMan repos with yum and have to 
polish details, but that is minor in comparison to all of the above. Once I 
figure it all out and clean things up a bit I can submit back if not code to 
the core than at least some more examples for people to use and save some poor 
soul days and weeks of aggravation ;)

> > 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 :)

as it stands tmprepo while being an inspiration and glimmer of hope is not 
needed after all. Now that I have much more seemless integration without extra 
artefacts I can concentrate on functions :) 

James, thanks for your help.

-- 
Dmitry Makovey
Web Systems Administrator
Athabasca University
(780) 675-6245
---
Confidence is what you have before you understand the problem
    Woody Allen

When in trouble when in doubt run in circles scream and shout 
     http://www.wordwizard.com/phpbb3/viewtopic.php?f=16&t=19330

_______________________________________________
Yum mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum
signature.asc (application/pgp-signature, 190 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.18 (GNU/Linux)

iD8DBQBOmGKmyDrVuGfS98QRAqi4AJ0SwLGeAbxxgIH5suoelvu7ynMqIgCeNhcv
XKInAxgsNvOunBmqEXB4XRA=
=tRLt
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.