-
Notifications
You must be signed in to change notification settings - Fork 0
/
PackageCreator.py
58 lines (48 loc) · 1.87 KB
/
PackageCreator.py
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
import os
from shutil import copy2, copytree, make_archive, rmtree
from PyQt6.QtCore import QObject, pyqtSignal, pyqtSlot
from BiPackage import BiPackage
from Elements import *
class PackageCreator (QObject):
finished = pyqtSignal()
def __init__(self, biPackage: BiPackage, path: str):
super().__init__()
self.biPackage = biPackage
self.path = path
@pyqtSlot()
def start(self):
self.createDirs()
self.addElements()
self.writeManifset()
self.createBi()
self.finished.emit()
def createBi(self):
path = self.path
if path.endswith('/'):
path = path[:-1]
make_archive(path, 'zip', self.path)
rmtree(path)
os.rename(path + '.zip', path + '.bi')
def createDirs(self):
os.mkdir(self.path)
if not self.path.endswith('/'):
self.path += '/'
os.mkdir(self.path + 'packages')
os.mkdir(self.path + 'configurations')
def addElements(self):
for i in self.biPackage.getElements():
(elementType, element), = i.items()
if isinstance(element, File):
destFolder = self.path + 'configurations/' + element.description
os.makedirs(destFolder)
copy2(element.source, destFolder)
if isinstance(element, Folder):
dest = self.path + 'configurations/' + element.description + element.source[element.source.rfind('/'):]
copytree(element.source, dest)
if isinstance(element, Package):
if element.packageType == 'deb':
dest = self.path + 'packages/' + element.description
copy2(element.source, dest)
def writeManifset(self):
with open(self.path + self.biPackage.name + '.json', 'w') as manifest:
manifest.write(self.biPackage.toJson())