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