File: PackagesParser.py

package info (click to toggle)
aptoncd 0.1-1.2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 1,572 kB
  • ctags: 544
  • sloc: python: 3,125; xml: 1,216; makefile: 125; sh: 6
file content (221 lines) | stat: -rw-r--r-- 9,892 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
######################################################
##
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published
#  by the Free Software Foundation; version 2 only.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
##
######################################################
## 
#  Project: AptOnCd
#  File: PackagesParser.py
#  Author: Laudeci Oliveira <laudeci@gmail.com>
#  Creation: 26/12/2006
#  Changed: 
#  Purpose: 
##
######################################################
import rfc822
import StringIO
import gzip
import string
import os
import sys

PACKAGE = 'Package'
PRIORITY = 'Priority'
SECTION = 'Section'
INSTALLED_SIZE = 'Installed-Size'
MAINTAINER = 'Maintainer'
ORIGINAL_MAINTAINER = 'Original-Maintainer'
ARCHITECTURE = 'Architecture'
VERSION = 'Version'
DEPENDS = 'Depends'
FILENAME = 'Filename'
SIZE = 'Size'
MD5SUM = 'MD5sum'
SHA1 = 'SHA1'
SHA256 = 'SHA256'
DESCRIPTON = 'Description'
BUGS = 'Bugs'
ORIGIN = 'Origin'


class ParseGZ:
    
    def __init__(self, filename = ''):
        self.filename = filename
        self.collection = []
    
    def __get_value(self,source, string, default = ''):
        try:
            return source[string]
        except:
            return default
        
    def Parse(self, filename = ''):
        if self.filename  == '' and filename == '':
            raise AttributeError, "missing filename parameter"
        if filename !='':
            self.filename = filename
            
        if not os.path.isfile(self.filename):
            raise AttributeError , self.filename
        
        try:
            pkgfile=gzip.open(self.filename)
            pkgdata=pkgfile.read()
        except IOError, msg:
            raise AttributeError ,"File doesn't seems to be valid"
        
        packages = string.split(pkgdata,"\n\n")
        for package in packages:
            if package:
                tmp=StringIO.StringIO(package)
                p=rfc822.Message(tmp)
                pk = PackageInfo()
                pk.Priority = self.__get_value(p,PRIORITY)
                pk.Section = self.__get_value(p,SECTION)
                pk.InstaledSize =  self.__get_value(p,INSTALLED_SIZE)
                pk.Maintainer = self.__get_value(p,MAINTAINER)
                pk.OrinalMantainer = self.__get_value(p,ORIGINAL_MAINTAINER)
                pk.Architecture = self.__get_value(p,ARCHITECTURE)
                pk.Version = self.__get_value(p,VERSION)
                pk.Depends = self.__get_value(p,DEPENDS)
                pk.Filename = self.__get_value(p,FILENAME)
                pk.Size = self.__get_value(p,SIZE)
                pk.MD5sum = self.__get_value(p,MD5SUM)
                pk.SHA1 = self.__get_value(p,SHA1)
                pk.SHA256 = self.__get_value(p,SHA256)
                pk.Description = self.__get_value(p,DESCRIPTON)
                pk.Bugs = self.__get_value(p,BUGS)
                pk.Origin = self.__get_value(p,ORIGIN)
                self.collection.append(pk)
                
        return self.collection
    
    def get_collection(self):
        return self.collection
    
class PackageInfo(object):
        """
          This class holds packages info stored in Packages.gz file. 
        """
        def __init__(self):
            self.__Package =''
            self.__Priority = ''
            self.__Section = ''
            self.__Installed_Size = ''
            self.__Maintainer = ''
            self.__Original_Maintainer = ''
            self.__Architecture = ''
            self.__Version = ''
            self.__Depends = ''
            self.__Filename = ''
            self.__Size = ''
            self.__MD5sum = ''
            self.__SHA1 = ''
            self.__SHA256 = ''
            self.__Description = ''
            self.__Bugs = ''
            self.__Origin = ''
            self.__root_folder = ''
            self.__destinationfile=''
            self.__targz_path = ''
            self.__PackageSection = ''
        
        def __get_Package(self):    return self.__Package
        def __set_Pakcage(self,value):    self.__Package = value
        Package = property(fget=__get_Package, fset=__set_Pakcage, doc='Get/Set Package name.')
        
        def __get_Priority(self):    return self.__Priority
        def __set_Priority(self,value):    self.__Priority = value
        Priority = property(fget=__get_Priority, fset=__set_Priority, doc='Get/Set Package Priority.')
        
        def __get_Section(self):    return self.__Section
        def __set_Section(self,value):    self.__Section = value
        Section = property(fget=__get_Section, fset=__set_Section, doc='Get/Set Package Section.')
        
        def __get_Installed_Size(self):    return self.__Installed_Size
        def __set_Installed_Size(self,value):    self.__Installed_Size = value
        InstalledSize = property(fget=__get_Installed_Size, fset=__set_Installed_Size, doc='Get/Set Package Installed Size.')
        
        def __get_Maintainer(self):    return self.__Maintainer
        def __set_Maintainer(self,value):    self.__Maintainer = value
        Maintainer = property(fget=__get_Maintainer, fset=__set_Maintainer, doc="Get/Set Package Maintainer's name.")
        
        def __get_Original_Maintainer(self):    return self.__Original_Maintainer
        def __set_Original_Maintainer(self,value):    self.__Original_Maintainer = value
        OriginalMaintainer = property(fget=__get_Original_Maintainer, fset=__set_Original_Maintainer, doc='Get/Set Package Original Maintainer.')
        
        def __get_Architecture(self):    return self.__Architecture
        def __set_Architecture(self,value):    self.__Architecture = value
        Architecture = property(fget=__get_Architecture, fset=__set_Architecture, doc='Get/Set Package Architecture.')
        
        def __get_Version(self):    return self.__Version
        def __set_Version(self,value):    self.__Version = value
        Version = property(fget=__get_Version, fset=__set_Version, doc='Get/Set Package Version.')
        
        def __get_Depends(self):    return self.__Depends
        def __set_Depends(self,value):    self.__Depends = value
        Depends = property(fget=__get_Depends, fset=__set_Depends, doc='Get/Set Package Depends.')
        
        def __get_Filename(self):    return self.__Filename
        def __set_Filename(self,value):    self.__Filename = value
        Filename = property(fget=__get_Filename, fset=__set_Filename, doc='Get/Set Package Filename.')
        
        def __get_Size(self):    return self.__Size
        def __set_Size(self,value):    self.__Size = value
        Size = property(fget=__get_Size, fset=__set_Size, doc='Get/Set Package Size.')
        
        def __get_MD5sum(self):    return self.__MD5sum
        def __set_MD5sum(self,value):    self.__MD5sum = value
        MD5sum = property(fget=__get_MD5sum, fset=__set_MD5sum, doc='Get/Set Package MD5sum.')
        
        def __get_SHA1(self):    return self.__SHA1
        def __set_SHA1(self,value):    self.__SHA1 = value
        SHA1 = property(fget=__get_SHA1, fset=__set_SHA1, doc='Get/Set Package SHA1.')

        def __get_SHA256(self):    return self.__SHA256
        def __set_SHA256(self,value):    self.__SHA256 = value
        SHA256 = property(fget=__get_SHA256, fset=__set_SHA256, doc='Get/Set Package SHA256.')
        
        def __get_Description(self):    return self.__Description
        def __set_Description(self,value):    self.__Description = value
        Description = property(fget=__get_Description, fset=__set_Description, doc='Get/Set Package Description.')
        
        def __get_Bugs(self):    return self.__Bugs
        def __set_Bugs(self,value):    self.__Bugs = value
        Bugs = property(fget=__get_Bugs, fset=__set_Bugs, doc='Get/Set Package Bugs.')
        
        def __get_Origin(self):    return self.__Origin
        def __set_Origin(self,value):    self.__Origin = value
        Origin = property(fget=__get_Origin, fset=__set_Origin, doc='Get/Set Package Origin.')
        
        def __get_Destination(self):    return self.__destinationfile
        def __set_Destination(self,value):    self.__destinationfile = value
        Destination = property(fget=__get_Destination, fset=__set_Destination, doc='Get/Set Package Destination file and path.')
        
        def __get_root_folder(self):    return self.__root_folder
        def __set_root_folder(self,value):    self.__root_folder = value
        SourceLocation = property(fget=__get_root_folder, fset=__set_root_folder, doc='Get/Set Package Destination file and path.')
        
        def __get_TarGZ_Path(self):    return self.__targz_path
        def __set_TarGZ_Path(self,value):    self.__targz_path = value
        TarGZ_Path = property(fget=__get_TarGZ_Path, fset=__set_TarGZ_Path, doc='Get/Set Package Tar file  name.')
        
        def __get_PackageSection(self):    return self.__PackageSection
        def __set_PackageSection(self,value):    self.__PackageSection = value
        PackageSection = property(fget=__get_PackageSection, fset=__set_PackageSection, doc='Get/Set Package Main section name.')
        
        
        def get_as_list(self):
            return [self.__Package,  self.__Priority, self.__Section, self.__Installed_Size, self.__Maintainer, self.__Original_Maintainer,  \
                     self.__Architecture, self.__Version, self.__Depends, self.__Filename, self.__Size, self.__MD5sum, self.__SHA1, \
                     self.__SHA256, self.__Description, self.__Bugs, self.__Origin]