framework-lib 0.1.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- framework_lib/__init__.py +0 -0
- framework_lib/data.py +156 -0
- framework_lib/framework.py +139 -0
- framework_lib/models.py +1470 -0
- framework_lib/program.py +126 -0
- framework_lib/setup.py +12 -0
- framework_lib-0.1.2.dist-info/METADATA +54 -0
- framework_lib-0.1.2.dist-info/RECORD +11 -0
- framework_lib-0.1.2.dist-info/WHEEL +5 -0
- framework_lib-0.1.2.dist-info/licenses/LICENSE +0 -0
- framework_lib-0.1.2.dist-info/top_level.txt +1 -0
|
File without changes
|
framework_lib/data.py
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"""data.py"""
|
|
2
|
+
import json
|
|
3
|
+
from models import ErrorForm, ErrorHelper
|
|
4
|
+
import sys
|
|
5
|
+
import shutil
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
class Database:
|
|
9
|
+
def __init__(self, path, page, initial={}, sinit=False):
|
|
10
|
+
asr=["page", "path to database", "initial data"]
|
|
11
|
+
args=[page, path, initial]
|
|
12
|
+
types=[str, str, dict]
|
|
13
|
+
self.c=ErrorHelper(asr, args, types)
|
|
14
|
+
self.pat=path
|
|
15
|
+
self.p=page
|
|
16
|
+
self.i=initial
|
|
17
|
+
self.sinit=sinit
|
|
18
|
+
|
|
19
|
+
def new(self):
|
|
20
|
+
if self.c:
|
|
21
|
+
return 1
|
|
22
|
+
try:
|
|
23
|
+
with open(self.pat, "w") as db:
|
|
24
|
+
json.dump(self.i, db, indent=4)
|
|
25
|
+
return 0
|
|
26
|
+
except:
|
|
27
|
+
ErrorForm(f"Could not create database {self.pat}: invalid file path", self.p, "102 DATABASE ERROR").call()
|
|
28
|
+
self.c=True
|
|
29
|
+
return 1
|
|
30
|
+
|
|
31
|
+
def pageswap(self, pgnew):
|
|
32
|
+
c=ErrorHelper(["page"], [pgnew], [str])
|
|
33
|
+
if not self.c and not c:
|
|
34
|
+
self.p=pgnew
|
|
35
|
+
return 0
|
|
36
|
+
return 1
|
|
37
|
+
def change(self, name, to, total=False):
|
|
38
|
+
c=ErrorHelper(["page", "total data marker"], [self.p, total], [str, bool])
|
|
39
|
+
asr=["page", "field name"]
|
|
40
|
+
args=[self.p, name]
|
|
41
|
+
types=[str, str]
|
|
42
|
+
if not c and not self.c:
|
|
43
|
+
if total:
|
|
44
|
+
asr.append("to")
|
|
45
|
+
args.append(to)
|
|
46
|
+
types.append(dict)
|
|
47
|
+
if True:
|
|
48
|
+
c=c or ErrorHelper(asr, args, types)
|
|
49
|
+
if not c:
|
|
50
|
+
data={}
|
|
51
|
+
try:
|
|
52
|
+
with open(self.pat, "r") as db:
|
|
53
|
+
data=json.load(db)
|
|
54
|
+
except FileNotFoundError:
|
|
55
|
+
ErrorForm("Database file was not found. A new file will be created.", self.p, "102 DATABASE ERROR").call()
|
|
56
|
+
self.new()
|
|
57
|
+
if self.c:
|
|
58
|
+
return 1
|
|
59
|
+
if not total:
|
|
60
|
+
try:
|
|
61
|
+
data[name]=to
|
|
62
|
+
except:
|
|
63
|
+
ErrorForm(f"Field {name} is badly defined in this database.", self.p, "102 DATABASE ERROR").call()
|
|
64
|
+
return 1
|
|
65
|
+
with open(self.pat, "w") as db:
|
|
66
|
+
if total:
|
|
67
|
+
json.dump(to, db, indent=4)
|
|
68
|
+
else:
|
|
69
|
+
json.dump(data, db, indent=4)
|
|
70
|
+
return 0
|
|
71
|
+
|
|
72
|
+
return 1
|
|
73
|
+
|
|
74
|
+
def retrieve(self, name, total=False):
|
|
75
|
+
if self.c:
|
|
76
|
+
return "ERR"
|
|
77
|
+
asr=["page", "total data marker", "name"]
|
|
78
|
+
args=[self.p, name, total]
|
|
79
|
+
types=[str, str, bool]
|
|
80
|
+
c=ErrorHelper(asr, args, types)
|
|
81
|
+
if not c:
|
|
82
|
+
dt={}
|
|
83
|
+
err=False
|
|
84
|
+
try:
|
|
85
|
+
with open(self.pat, "r") as db:
|
|
86
|
+
dt=json.load(db)
|
|
87
|
+
except FileNotFoundError:
|
|
88
|
+
if not self.sinit:
|
|
89
|
+
ErrorForm("Database file was not found.",self.p, "102 DATABASE ERROR").call()
|
|
90
|
+
err=True
|
|
91
|
+
except json.JSONDecodeError:
|
|
92
|
+
ErrorForm("Database file was not decoded properly.", self.p, "102 DATABASE ERROR").call()
|
|
93
|
+
err=True
|
|
94
|
+
if err:
|
|
95
|
+
return "ERR"
|
|
96
|
+
if total:
|
|
97
|
+
return dt
|
|
98
|
+
else:
|
|
99
|
+
try:
|
|
100
|
+
return dt[name]
|
|
101
|
+
except:
|
|
102
|
+
if not self.sinit:
|
|
103
|
+
ErrorForm(f"Field {name} is badly defined in this database.", self.p, "102 DATABASE ERROR").call()
|
|
104
|
+
return "ERR"
|
|
105
|
+
def delete(self, name, total=False):
|
|
106
|
+
c=ErrorHelper(["page", "total data marker"], [self.p, total], [str, bool])
|
|
107
|
+
asr=["page", "field name"]
|
|
108
|
+
args=[self.p, name]
|
|
109
|
+
types=[str, str]
|
|
110
|
+
if not c and not self.c:
|
|
111
|
+
if True:
|
|
112
|
+
c=c or ErrorHelper(asr, args, types)
|
|
113
|
+
if not c:
|
|
114
|
+
data={}
|
|
115
|
+
try:
|
|
116
|
+
with open(self.pat, "r") as db:
|
|
117
|
+
data=json.load(db)
|
|
118
|
+
except FileNotFoundError:
|
|
119
|
+
ErrorForm("Database file was not found. A new file will be created.", self.p, "102 DATABASE ERROR").call()
|
|
120
|
+
self.new()
|
|
121
|
+
if self.c:
|
|
122
|
+
return 1
|
|
123
|
+
if not total:
|
|
124
|
+
try:
|
|
125
|
+
del data[name]
|
|
126
|
+
except:
|
|
127
|
+
ErrorForm(f"Field {name} is badly defined in this database.", self.p, "102 DATABASE ERROR").call()
|
|
128
|
+
return 1
|
|
129
|
+
with open(self.pat, "w") as db:
|
|
130
|
+
if total:
|
|
131
|
+
json.dump({}, db, indent=4)
|
|
132
|
+
else:
|
|
133
|
+
json.dump(data, db, indent=4)
|
|
134
|
+
return 0
|
|
135
|
+
|
|
136
|
+
return 1
|
|
137
|
+
def upload(self, img):
|
|
138
|
+
c=ErrorHelper(["page", "image file path"], [self.p, img], [str, str])
|
|
139
|
+
if c:
|
|
140
|
+
return 1
|
|
141
|
+
strk=""
|
|
142
|
+
for x in range(len(img)):
|
|
143
|
+
if img[x]=="/":
|
|
144
|
+
strk=""
|
|
145
|
+
else:
|
|
146
|
+
strk+=img[x]
|
|
147
|
+
dest=f"./uploads/{strk}"
|
|
148
|
+
os.makedirs("./uploads", exist_ok=True)
|
|
149
|
+
try:
|
|
150
|
+
shutil.copy(img, dest)
|
|
151
|
+
return 0
|
|
152
|
+
except FileNotFoundError:
|
|
153
|
+
ErrorForm(f"Invalid directory or file for upload.", self.p, type="104 UPLOAD ERROR").call()
|
|
154
|
+
except PermissionError:
|
|
155
|
+
ErrorForm(f"Upload directory has an invalid permission setting. Please adjust the settings to proceed.", self.p, type="104 UPLOAD ERROR").call()
|
|
156
|
+
return 1
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import argparse
|
|
3
|
+
import shutil
|
|
4
|
+
import inspect
|
|
5
|
+
import models
|
|
6
|
+
import program
|
|
7
|
+
import data
|
|
8
|
+
import warnings
|
|
9
|
+
|
|
10
|
+
def main():
|
|
11
|
+
datapath, programpath, modelspath=inspect.getfile(data), inspect.getfile(program), inspect.getfile(models)
|
|
12
|
+
|
|
13
|
+
working_dir=os.getcwd()
|
|
14
|
+
|
|
15
|
+
parser=argparse.ArgumentParser(description="Manage framework")
|
|
16
|
+
subparsers = parser.add_subparsers(dest='function', required=True, help="function to execute")
|
|
17
|
+
subparsers.add_parser('view_models_packs')
|
|
18
|
+
|
|
19
|
+
register_parser = subparsers.add_parser('register_models_pack')
|
|
20
|
+
register_parser.add_argument('name', type=str, help="name of pack to register")
|
|
21
|
+
register_parser.add_argument("-f", "--folder",help="folder where to execute function")
|
|
22
|
+
|
|
23
|
+
delete_parser=subparsers.add_parser('delete_models_pack')
|
|
24
|
+
delete_parser.add_argument('name', type=str, help="name of pack to delete")
|
|
25
|
+
delete_parser.add_argument("-f", "--folder",help="folder where to execute function")
|
|
26
|
+
|
|
27
|
+
project_parser = subparsers.add_parser('project')
|
|
28
|
+
project_subparsers = project_parser.add_subparsers(dest='project_function', required=True, help="project function to execute")
|
|
29
|
+
|
|
30
|
+
create_parser = project_subparsers.add_parser('create')
|
|
31
|
+
create_parser.add_argument('name', type=str, help="name of project to create")
|
|
32
|
+
create_parser.add_argument("-f", "--folder",help="folder where to execute function")
|
|
33
|
+
create_parser.add_argument("-n", "--requirementfilename",help="custom requirement file name")
|
|
34
|
+
|
|
35
|
+
add_requirement_parser=project_subparsers.add_parser("add_requirement")
|
|
36
|
+
add_requirement_parser.add_argument('name', type=str, help="name of requirement to add")
|
|
37
|
+
add_requirement_parser.add_argument("-f", "--folder",help="folder where to execute function")
|
|
38
|
+
add_requirement_parser.add_argument("-n", "--requirementfilename",help="custom requirement file name")
|
|
39
|
+
|
|
40
|
+
delete_requirement_parser=project_subparsers.add_parser("delete_requirement")
|
|
41
|
+
delete_requirement_parser.add_argument('name', type=str, help="name of requirement to delete")
|
|
42
|
+
delete_requirement_parser.add_argument("-f", "--folder",help="folder where to execute function")
|
|
43
|
+
delete_requirement_parser.add_argument("-n", "--requirementfilename",help="custom requirement file name")
|
|
44
|
+
delete_requirement_parser.add_argument("-a", "--deleteallrequirements",help="marker if delete all file requirements")
|
|
45
|
+
|
|
46
|
+
import_requirement_parser=project_subparsers.add_parser("import_requirements")
|
|
47
|
+
import_requirement_parser.add_argument("-n", "--requirementfilename",help="custom requirement file name")
|
|
48
|
+
import_requirement_parser.add_argument("-i", "--ignore",help="ignore warnings(any except e) or display errors(e)")
|
|
49
|
+
|
|
50
|
+
import_requirement_parser=project_subparsers.add_parser("view_requirements")
|
|
51
|
+
import_requirement_parser.add_argument("-n", "--requirementfilename",help="custom requirement file name")
|
|
52
|
+
|
|
53
|
+
args = parser.parse_args()
|
|
54
|
+
|
|
55
|
+
try:
|
|
56
|
+
if args.folder:
|
|
57
|
+
working_dir=os.path.join(working_dir, args.folder)
|
|
58
|
+
except:
|
|
59
|
+
pass
|
|
60
|
+
|
|
61
|
+
library_dir = os.path.dirname(os.path.abspath(__file__))
|
|
62
|
+
requirements=data.Database(os.path.join(library_dir, "models_requirements.json"), "FRAMEWORK MANAGER", sinit=True)
|
|
63
|
+
if requirements.retrieve("", total=True)=="ERR":
|
|
64
|
+
requirements.new()
|
|
65
|
+
REQUIREMENTS={}
|
|
66
|
+
else:
|
|
67
|
+
REQUIREMENTS=requirements.retrieve("", total=True)
|
|
68
|
+
|
|
69
|
+
if args.function=="register_models_pack":
|
|
70
|
+
file=os.path.join(working_dir, f"{args.name}.py")
|
|
71
|
+
if os.path.isfile(file):
|
|
72
|
+
if requirements.retrieve(args.name)!="ERR":
|
|
73
|
+
parser.error(f"A models pack with name {args.name} already exists")
|
|
74
|
+
else:
|
|
75
|
+
requirements.change(args.name,[file, f"{args.name}.py"])
|
|
76
|
+
else:
|
|
77
|
+
parser.error(f"The file {args.name}.py does not exist at that path. Please check the correctness of path")
|
|
78
|
+
|
|
79
|
+
elif args.function=="delete_models_pack":
|
|
80
|
+
if requirements.retrieve(args.name)!="ERR":
|
|
81
|
+
requirements.delete(args.name)
|
|
82
|
+
else:
|
|
83
|
+
parser.error(f"A models pack with name {args.name} does not exist")
|
|
84
|
+
|
|
85
|
+
elif args.function=="view_models_packs":
|
|
86
|
+
print("=================")
|
|
87
|
+
for requirement in REQUIREMENTS:
|
|
88
|
+
print(requirement)
|
|
89
|
+
print("=================")
|
|
90
|
+
|
|
91
|
+
elif args.function=="project":
|
|
92
|
+
req_fn="models_requirements.json" if not args.requirementfilename else args.requirementfilename
|
|
93
|
+
if args.project_function=="create":
|
|
94
|
+
os.makedirs(os.path.join(working_dir, args.name),exist_ok=True)
|
|
95
|
+
project_requirements=data.Database(os.path.join(working_dir, args.name, req_fn), "FRAMEWORK MANAGER", sinit=True)
|
|
96
|
+
project_requirements.new()
|
|
97
|
+
shutil.copy(modelspath, os.path.join(working_dir, args.name, "models.py"))
|
|
98
|
+
shutil.copy(datapath, os.path.join(working_dir, args.name, "data.py"))
|
|
99
|
+
shutil.copy(programpath, os.path.join(working_dir, args.name, "program.py"))
|
|
100
|
+
else:
|
|
101
|
+
project_requirements=data.Database(os.path.join(working_dir, req_fn), "FRAMEWORK MANAGER", sinit=True)
|
|
102
|
+
if args.project_function=="add_requirement":
|
|
103
|
+
if args.name in REQUIREMENTS:
|
|
104
|
+
if args.name in project_requirements.retrieve("",total=True):
|
|
105
|
+
parser.error(f"A models pack with name {args.name} is already in project requirements")
|
|
106
|
+
else:
|
|
107
|
+
project_requirements.change(args.name, 0)
|
|
108
|
+
else:
|
|
109
|
+
parser.error(f"A models pack with name {args.name} does not exist")
|
|
110
|
+
|
|
111
|
+
elif args.project_function=="delete_requirement":
|
|
112
|
+
if args.deleteallrequirements or args.deleteallrequirements==0:
|
|
113
|
+
project_requirements.delete("", total=True)
|
|
114
|
+
else:
|
|
115
|
+
if args.name in project_requirements.retrieve("",total=True):
|
|
116
|
+
project_requirements.delete(args.name)
|
|
117
|
+
else:
|
|
118
|
+
parser.error(f"A models pack with name {args.name} does not exist in project requirements")
|
|
119
|
+
|
|
120
|
+
elif args.project_function=="import_requirements":
|
|
121
|
+
for requirement in project_requirements.retrieve("",total=True):
|
|
122
|
+
if requirement in REQUIREMENTS:
|
|
123
|
+
shutil.copy(REQUIREMENTS[requirement][0], os.path.join(working_dir, REQUIREMENTS[requirement][1]))
|
|
124
|
+
else:
|
|
125
|
+
if args.ignore=="e":
|
|
126
|
+
parser.error(f"A models pack with name {requirement} does not exist")
|
|
127
|
+
elif args.ignore or args.ignore==0:
|
|
128
|
+
pass
|
|
129
|
+
else:
|
|
130
|
+
warnings.warn(f"A models pack with name {requirement} does not exist, skipping this requirement")
|
|
131
|
+
|
|
132
|
+
elif args.project_function=="view_requirements":
|
|
133
|
+
print("=================")
|
|
134
|
+
for requirement in project_requirements.retrieve("",total=True):
|
|
135
|
+
print(requirement)
|
|
136
|
+
print("=================")
|
|
137
|
+
|
|
138
|
+
if __name__ == "__main__":
|
|
139
|
+
main()
|