~romaimperator/keryx/devel

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
""" Dpkg plugin """

__appname__  = 'dpkg'
__version__  = '1.0.0'
__supports__ = '0'
__author__   = 'Buran Ayuthia'

from libkeryx import Definition, gen_table, queue_table
import os.path
from commands import getstatusoutput
from sqlalchemy import *
from sqlalchemy.orm import mapper, sessionmaker

class pkg_table(object):
    def __init__(self, project, package_name, version, section, \
                 installed_size, maintainer, original_maintainer, \
                 architecture, replaces, provides, depends, recommends, \
                 suggests, conflicts, filename, size, md5sum, sha256, \
                 shortdesc, longdesc, homepage, bugs, origin, task):
        self.project = project
        self.package_name = package_name
        self.version = version
        self.section = section
        self.installed_size = installed_size
        self.maintainer = maintainer
        self.original_maintainer = original_maintainer
        self.architecture = architecture
        self.replaces = replaces
        self.provides = provides
        self.depends = depends
        self.recommends = recommends
        self.suggests = suggests
        self.conflicts = conflicts
        self.filename = filename
        self.size = size
        self.md5sum = md5sum
        self.sha256 = sha256
        self.shortdesc = shortdesc
        self.longdesc = longdesc
        self.homepage = homepage
        self.bugs = bugs
        self.origin = origin
        self.task = task

    def __repr__(self):
        return "<pkg_table('%s, %s, %s ,%s, %s, %s, %s, %s, %s, %s, %s, \
                %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s')>" % \
                (self.project, self.package_name, self.version, self.section, \
                self.installed_size, self.maintainer, \
                self.original_maintainer, self.architecture, self.replaces, \
                 self.provides, self.depends, self.recommends, self.suggests, \
                 self.conflicts, self.filename, self.size, self.md5sum, \
                 self.sha256, self.shortdesc, self.longdesc, self.homepage, \
                 self.bugs, self.origin, self.task)

class dpkg(Definition):
    """Definition for dpkg/apt support"""

    name = __appname__
    version = __version__

    def OnInit(self, project):
        # Set the project so that it can be used in other methods for
        # this class
        self.project = project
        # The project directory
        self.project_folder_dir = "projects/"
        if not os.path.exists(self.project_folder_dir):
            os.mkdir(self.project_folder_dir)

        # Create the project in the project folder
        self.project_dir = self.project_folder_dir + self.project + "/"
        if not os.path.exists(self.project_dir):
            os.mkdir(self.project_dir)

        # Create the directory to store the package lists
        # from the internet
        self.lists_dir = self.project_dir + "lists/"
        if not os.path.exists(self.lists_dir):
            os.mkdir(self.lists_dir)

        # The location where the package lists are stored.
        self.package_list_path = "/var/lib/apt/lists/"
        Session = sessionmaker(bind=self.engine, autoflush=True, transactional=True)
        self.session = Session()

        # Define your definition-specific tables here
        self.packages_table = Table("packages", self.keryx_db, \
                              Column("project", String(256), primary_key=True), \
                              Column("package_name", String(256), primary_key=True), \
                              Column("version", String(256), primary_key=True), \
                              Column("section", String(256)), \
                              Column("installed_size", Integer), \
                              Column("maintainer", String(256)), \
                              Column("original_maintainer", String(256)), \
                              Column("architecture", String(256)), \
                              Column("replaces", String(256)), \
                              Column("provides", String(256)), \
                              Column("depends", String(256)), \
                              Column("recommends", String(256)), \
                              Column("suggests", String(256)), \
                              Column("conflicts", String(256)), \
                              Column("filename", String(256)), \
                              Column("size", Integer), \
                              Column("md5sum", Integer), \
                              Column("sha256", Integer), \
                              Column("shortdesc", String(256)), \
                              Column("longdesc", String(256)), \
                              Column("homepage", String(256)), \
                              Column("bugs", String(256)), \
                              Column("origin", String(256)), \
                              Column("task", String(256)))

        self.keryx_db.create_all()

        mapper(gen_table, self.general_table)
        mapper(queue_table, self.queue_table)
        mapper(pkg_table, self.packages_table)

    def OnCreate(self):
        pm = PackageManager()
        pm.fetch_from_local(self.package_list_path)

    def UpdateInternet(self):
        query = self.session.query(gen_table)

        for general in self.session.query(gen_table):
            print general.definition_name
        pm = PackageManager()
        pm.fetch_from_internet(["a", "b"], "lists")

class PackageManager:
    def __init__(self):
        pass

    def fetch_from_local(self, list_path):
        print "fetching from local"
# No longer going to be storing the local data
#        # Check to see if the dest_path directory exists
#        if not os.path.isdir(dest_path):
#            print "pkgmgr.py: Directory \"%s\" does not exist.  Cannot copy files." % dest_path
#            return None
#
#        # Copy files if list_path directory exists
#        if os.path.isdir(list_path):
#            dir_list = os.listdir(list_path)
#            for file in dir_list:
#                test_file = list_path + "/" + file
#                if os.path.isfile(test_file) and file != "lock":
#                    copy_string = "cp -v %s %s" % (test_file, dest_path)
#                    copy_value = getstatusoutput(copy_string)
#                    if not copy_value:
#                        print "pkgmgr.py: Unable to copy %s.  " \
#                              "Error code= %d Error message=%s" % \
#                              (test_file, copy_value[0], copy_value[1])
#                        return None
#                    else:
#                        print file + " copied."
#        else:
#            print "pkgmgr.py: Could not find list_path %s" % list_path
#            return None

    def fetch_from_internet(self, url_list, dest_path):
        print "fetch_from_internet"