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.
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()