framework-lib 0.1.2__tar.gz

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
@@ -0,0 +1,54 @@
1
+ Metadata-Version: 2.4
2
+ Name: framework-lib
3
+ Version: 0.1.2
4
+ Summary: Python Framework Library, expandable, provides support for Console, Tkinter and Pygame.
5
+ Author-email: Ad1Ad1 <help91922@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/Ad1Ad1/game-framework
8
+ Project-URL: Issues, https://github.com/Ad1Ad1/game-framework/issues
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.13
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Dynamic: license-file
15
+
16
+ # Quick Start and PyPI guide for Page Framework(v1.0)
17
+
18
+ ## Useful Links
19
+
20
+ [View official API documentation](https://github.com/Ad1Ad1/game-framework/blob/main/README.md)
21
+
22
+ [View official examples page](https://github.com/Ad1Ad1/game-framework/blob/main/EXAMPLES.md)
23
+
24
+ ## Installation
25
+ First, install the framework with this command
26
+
27
+ ```shell
28
+ pip install framework-lib
29
+ ```
30
+
31
+ ## Project creation
32
+ Now, create a new project(maybe in a separate folder) with this command
33
+ ```shell
34
+ framework-lib project create {name}
35
+ ```
36
+ Open created folder. List contents with this command:
37
+ ```shell
38
+ ls
39
+ ```
40
+ You should see something like this
41
+
42
+ ```plaintext
43
+ Mode LastWriteTime Length Name
44
+ ---- ------------- ------ ----
45
+ -a---- 10.07.2026 19:53 4294 data.py
46
+ -a---- 10.07.2026 19:53 72680 models.py
47
+ -a---- 10.07.2026 19:53 2 models_requirements.json
48
+ -a---- 10.07.2026 19:53 6578 program.py
49
+ ```
50
+
51
+ Now create your file there.
52
+
53
+ ## What to use?
54
+ Choose one from our examples or create your own
@@ -0,0 +1,39 @@
1
+ # Quick Start and PyPI guide for Page Framework(v1.0)
2
+
3
+ ## Useful Links
4
+
5
+ [View official API documentation](https://github.com/Ad1Ad1/game-framework/blob/main/README.md)
6
+
7
+ [View official examples page](https://github.com/Ad1Ad1/game-framework/blob/main/EXAMPLES.md)
8
+
9
+ ## Installation
10
+ First, install the framework with this command
11
+
12
+ ```shell
13
+ pip install framework-lib
14
+ ```
15
+
16
+ ## Project creation
17
+ Now, create a new project(maybe in a separate folder) with this command
18
+ ```shell
19
+ framework-lib project create {name}
20
+ ```
21
+ Open created folder. List contents with this command:
22
+ ```shell
23
+ ls
24
+ ```
25
+ You should see something like this
26
+
27
+ ```plaintext
28
+ Mode LastWriteTime Length Name
29
+ ---- ------------- ------ ----
30
+ -a---- 10.07.2026 19:53 4294 data.py
31
+ -a---- 10.07.2026 19:53 72680 models.py
32
+ -a---- 10.07.2026 19:53 2 models_requirements.json
33
+ -a---- 10.07.2026 19:53 6578 program.py
34
+ ```
35
+
36
+ Now create your file there.
37
+
38
+ ## What to use?
39
+ Choose one from our examples or create your own
File without changes
@@ -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()