-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata.py
More file actions
99 lines (86 loc) · 3.14 KB
/
data.py
File metadata and controls
99 lines (86 loc) · 3.14 KB
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
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
import json
import os
import msgpack
import flunn
PNG_SIGNATURE = bytes([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])
DEFAULT_IMAGE : bytearray
EMPTY_IMAGE : bytearray
LOGO_IMAGE : bytearray
# Representation of data packaged into sdop files
class Package:
def __init__(self, name, desc, data, images):
self.filepath = ""
self.name = name
self.desc = desc
# Data will be the dictionary of data to be converted to JSON
self.data = data
# images will be a list of (string, bytearray) tuples, to have index and name
self.images = images
def add_default(self):
self.images.append(("default", DEFAULT_IMAGE))
# Converts data to CBOR
def convert_data_to_bytes(self):
dict = {"name": self.name, "desc": self.desc, "data": self.data, "images": [i[0] for i in self.images]}
b = flunn.dumps(dict)
return b
# Converts data to msgpack byte format
def convert_data_to_msgpack(self):
dict = {"name": self.name, "desc": self.desc, "data": self.data, "images": [i[0] for i in self.images]}
b = msgpack.dumps(dict)
return b
# Trims path and returns filename
def get_filename(self):
return os.path.basename(self.filepath)
# Trims path and returns file extenstion
def get_file_extension(self):
return self.get_filename().split(".")[1]
# Reads package from CBOR
def read_package(bytes : bytes):
decode = flunn.loads(bytes)
name = decode["name"]
desc = decode["desc"]
data = decode["data"]
img = decode["images"]
return Package(name,desc,data,img)
# Reads package object from bytes
def read_msgpack_package(bytes : bytes):
decode = msgpack.loads(bytes)
name = decode["name"]
desc = decode["desc"]
data = decode["data"]
img = decode["images"]
return Package(name,desc,data,img)
# Parses available data types, and returns zero'd value if unable
def parse_data_type(data_type, val : str):
try:
if data_type.__name__ == "bool":
if val.strip().lower() == "true":
parsed_val = True
elif val.strip().lower() == "false":
parsed_val = False
else:
parsed_val = False
return parsed_val
elif data_type.__name__ == "list":
# Enforces formatting standards regarding lists
valid_val = val.replace("\'","\"").strip()
if valid_val[0] != '[' or valid_val[len(valid_val)-1] != ']':
valid_val = "[" + valid_val + "]"
vals = valid_val[1:-1].replace(" ", "").split(",")
parsed_vals = []
for i in range(len(vals)):
try:
v = json.loads(vals[i].lower())
parsed_vals.append(v)
except:
parsed_vals.append(None)
return parsed_vals
else:
parsed_val = data_type.__call__(val)
return parsed_val
except:
empty_val = data_type.__call__()
return empty_val