I create a new method for the rpm module.

*With glob integration

The method for the rpm module is done, thanks for the suggestions given
during all of the work.

The code is available at: http://func.pastebin.com/f75c77458 and I also
am sending the diff and git file in annex.




Michael DeHaan wrote:
Seth Vidal wrote:


On Thu, 2 Apr 2009, Milton Paiva Neto wrote:

In a conjunct effort me and Varinder Singh merged the RPM Module with the Yum Module and we create a module called Packages.


The module is available at:
http://func.pastebin.com/f215bec3b
http://matrix.senecac.on.ca/~mpaivaneto/packages.py


Don't call it packages.

unless the plan is to merge in deb package and other support as well.

-sv

_______________________________________________
Func-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/func-list


Further -- joining the install and remove code with the yum code won't work on RHEL 4 installations, since it would require yum to be installed.

We also can't be changing API signatures for modules like this midstream, so this introduces duplication.

If you want to create a higher level packages module (that uses the rpm and yum module code), this is reasonable... but as Seth says, it should also support (at minimum) Debian and be an abstract
concept. It should also reuse the code from the other two modules.

That's a great idea, I want to upstream this method to the rpm module
than I can begin to work in create the higher level "Packages module".
In the time I was thinking in merge the rpm module with the yum module
I didn't think that other people could have been using scripts who uses
code from these modules as they are right now. Keeping the rpm and the
yum module and creating a super module that call these modules is
probably the best way to go, thanks again for the comments.


PackageKit sort of comes up as a logical abstraction layer, but I think that's a bad idea seeing that's not available for EL 4, and enterprise-ness is the primary install base.

--Michael


--
--------
Milton Paiva Neto
[email protected]
[email protected]
http://miltonpaiva.wordpress.com/


# Copyright 2007, Red Hat, Inc
# Michael DeHaan <[email protected]>
# Copyright 2009
# Milton Paiva Neto <[email protected]>
#
# This software may be freely redistributed under the terms of the GNU
# general public license.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

import func_module

class RpmModule(func_module.FuncModule):

    version = "0.0.1"
    api_version = "0.0.1"
    description = "RPM related commands."

    def inventory(self, flatten=True):
        """
        Returns information on all installed packages.
        By default, 'flatten' is passed in as True, which makes printouts very
        clean in diffs for use by func-inventory.  If you are writting another
        software application, using flatten=False will prevent the need to 
        parse the returns.
        """
        # I have not been able to get flatten=False to work if there 
        # is more than 491 entries in the dict -- ashcrow
        import rpm
        ts = rpm.TransactionSet()
        mi = ts.dbMatch()
        results = []
        for hdr in mi:
            name = hdr['name']
            epoch = (hdr['epoch'] or 0)
            version = hdr['version']
            release = hdr['release']
            arch = hdr['arch']
            if flatten:
                results.append("%s %s %s %s %s" % (name, epoch, version, 
                                                   release, arch))
            else:
                results.append([name, epoch, version, release, arch])
        return results

    def verify(self, pattern='', flatten=True):
        """
        Returns information on the verified package(s).
        """        
        import rpm
        import yum
        from re import split
        ts = rpm.TransactionSet()
        mi = (ts.dbMatch() if pattern == '' else self.glob(pattern))
        results = []
        for hdr in mi:
            name = hdr['name'] if pattern == '' else split("\s",hdr)[0]
            if flatten:                
                yb = yum.YumBase()
                pkgs = yb.rpmdb.searchNevra(name)
                for pkg in pkgs:
                    errors = pkg.verify()
                    for fn in errors.keys():
                        for prob in errors[fn]:
                            results.append('%s %s %s' % (name, fn, prob.message))
            else:
                results.append("%s-%s-%s.%s" % (name, version, release, arch))
        return results

    def glob(self, pattern, flatten=True):
        """
        Return a list of installed packages that match a pattern
        """
        import rpm
        ts = rpm.TransactionSet()
        mi = ts.dbMatch()
        results = []
        if not mi:
            return
        mi.pattern('name', rpm.RPMMIRE_GLOB, pattern)
        for hdr in mi:
            name = hdr['name']
            epoch = (hdr['epoch'] or 0)
            version = hdr['version']
            release = hdr['release']
            # gpg-pubkeys have no arch
            arch = (hdr['arch'] or "")

            if flatten:
                results.append("%s %s %s %s %s" % (name, epoch, version,
                                                       release, arch))
            else:
                results.append([name, epoch, version, release, arch])
        return results

    def register_method_args(self):
        """
        Implementing the method argument getter
        """
        return {
                'inventory':{
                    'args':{
                        'flatten':{
                            'type':'boolean',
                            'optional':True,
                            'default':True,
                            'description':"Print clean in difss"
                            }
                        },
                    'description':"Returns information on all installed packages"
                    },
                'verify':{
                    'args':{
                        'flatten':{
                            'type':'boolean',
                            'optional':True,
                            'default':True,
                            'description':"Print clean in difss"
                            }
                        },
                    'description':"Returns information on the verified package(s)"
                    },
                'glob':{
                    'args':{
                        'pattern':{
                            'type':'string',
                            'optional':False,
                            'description':"The glob packet pattern"
                            },
                        'flatten':{
                            'type':'boolean',
                            'optional':True,
                            'default':True,
                            'description':"Print clean in difss"
                                }
                        },
                    'description':"Return a list of installed packages that match a pattern"
                    }
                }
3,4d2
< # Copyright 2009
< # Milton Paiva Neto <[email protected]>
31c29
<         import rpm
---
>       import rpm
48,71d45
<     def verify(self, pattern='', flatten=True):
<         """
<         Returns information on the verified package(s).
<         """        
<         import rpm
<         import yum
<         from re import split
<         ts = rpm.TransactionSet()
<         mi = (ts.dbMatch() if pattern == '' else self.glob(pattern))
<         results = []
<         for hdr in mi:
<             name = hdr['name'] if pattern == '' else split("\s",hdr)[0]
<             if flatten:                
<                 yb = yum.YumBase()
<                 pkgs = yb.rpmdb.searchNevra(name)
<                 for pkg in pkgs:
<                     errors = pkg.verify()
<                     for fn in errors.keys():
<                         for prob in errors[fn]:
<                             results.append('%s %s %s' % (name, fn, 
prob.message))
<             else:
<                 results.append("%s-%s-%s.%s" % (name, version, release, arch))
<         return results
< 
76c50
<         import rpm
---
>       import rpm
101a76
> 
114,124d88
<                 'verify':{
<                     'args':{
<                         'flatten':{
<                             'type':'boolean',
<                             'optional':True,
<                             'default':True,
<                             'description':"Print clean in difss"
<                             }
<                         },
<                     'description':"Returns information on the verified 
package(s)"
<                     },
141c105
<                 }
\ No newline at end of file
---
>                 }

diff --git a/usr/lib/python2.5/site-packages/func/minion/modules/rpms.py 
b/func/func/minion/modules/rpms.py
index 3ed0290..746b9b8 100644
--- a/usr/lib/python2.5/site-packages/func/minion/modules/rpms.py
+++ b/func/func/minion/modules/rpms.py
@@ -1,7 +1,5 @@
 # Copyright 2007, Red Hat, Inc
 # Michael DeHaan <[email protected]>
-# Copyright 2009
-# Milton Paiva Neto <[email protected]>
 #
 # This software may be freely redistributed under the terms of the GNU
 # general public license.
@@ -28,7 +26,7 @@ class RpmModule(func_module.FuncModule):
         """
         # I have not been able to get flatten=False to work if there 
         # is more than 491 entries in the dict -- ashcrow
-        import rpm
+       import rpm
         ts = rpm.TransactionSet()
         mi = ts.dbMatch()
         results = []
@@ -45,35 +43,11 @@ class RpmModule(func_module.FuncModule):
                 results.append([name, epoch, version, release, arch])
         return results
 
-    def verify(self, pattern='', flatten=True):
-        """
-        Returns information on the verified package(s).
-        """        
-        import rpm
-        import yum
-        from re import split
-        ts = rpm.TransactionSet()
-        mi = (ts.dbMatch() if pattern == '' else self.glob(pattern))
-        results = []
-        for hdr in mi:
-            name = hdr['name'] if pattern == '' else split("\s",hdr)[0]
-            if flatten:                
-                yb = yum.YumBase()
-                pkgs = yb.rpmdb.searchNevra(name)
-                for pkg in pkgs:
-                    errors = pkg.verify()
-                    for fn in errors.keys():
-                        for prob in errors[fn]:
-                            results.append('%s %s %s' % (name, fn, 
prob.message))
-            else:
-                results.append("%s-%s-%s.%s" % (name, version, release, arch))
-        return results
-
     def glob(self, pattern, flatten=True):
         """
         Return a list of installed packages that match a pattern
         """
-        import rpm
+       import rpm
         ts = rpm.TransactionSet()
         mi = ts.dbMatch()
         results = []
@@ -99,6 +73,7 @@ class RpmModule(func_module.FuncModule):
         """
         Implementing the method argument getter
         """
+
         return {
                 'inventory':{
                     'args':{
@@ -111,17 +86,6 @@ class RpmModule(func_module.FuncModule):
                         },
                     'description':"Returns information on all installed 
packages"
                     },
-                'verify':{
-                    'args':{
-                        'flatten':{
-                            'type':'boolean',
-                            'optional':True,
-                            'default':True,
-                            'description':"Print clean in difss"
-                            }
-                        },
-                    'description':"Returns information on the verified 
package(s)"
-                    },
                 'glob':{
                     'args':{
                         'pattern':{
@@ -138,4 +102,4 @@ class RpmModule(func_module.FuncModule):
                         },
                     'description':"Return a list of installed packages that 
match a pattern"
                     }
-                }
\ No newline at end of file
+                }

_______________________________________________
Func-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/func-list

Reply via email to