Skip to content

Commit 7b55ea0

Browse files
committed
0.1.5 *Features: Parameters to views*
1 parent cecf12b commit 7b55ea0

File tree

5 files changed

+131
-15
lines changed

5 files changed

+131
-15
lines changed

pypulse/Socket/request_handler.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def do_GET(self):
2525
}
2626

2727
render = execute_ast_view_request(
28-
node_body=current_view.view, request=request, requirement_view=current_view.requirement_view)
28+
node_body=current_view.view, request=request, requirement_view=current_view.requirement_view, other_variables=current_view.variables_list)
2929

3030
if type(render).__name__ == 'Redirect':
3131
render = render.get_render(request)
@@ -75,7 +75,7 @@ def do_POST(self):
7575
self.end_headers()
7676
self.wfile.write(template.encode())
7777
else:
78-
super().do_GET()
78+
super().do_POST()
7979

8080
def do_PUT(self):
8181
content_length = int(self.headers['Content-Length'])
@@ -114,7 +114,7 @@ def do_PUT(self):
114114
self.end_headers()
115115
self.wfile.write(template.encode())
116116
else:
117-
super().do_GET()
117+
super().do_PUT()
118118

119119
def do_PATCH(self):
120120
content_length = int(self.headers['Content-Length'])
@@ -153,4 +153,4 @@ def do_PATCH(self):
153153
self.end_headers()
154154
self.wfile.write(template.encode())
155155
else:
156-
super().do_GET()
156+
super().do_PATCH()

pypulse/Utils/call_ast_exec_module.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import ast
22

33

4-
def execute_ast_view_request(request: str, node_body: object, requirement_view: list) -> None:
4+
def execute_ast_view_request(request: str, node_body: object, requirement_view: list, other_variables: dict = {}) -> None:
55
module_body = []
66

77
for i in requirement_view:
@@ -35,4 +35,10 @@ def execute_ast_view_request(request: str, node_body: object, requirement_view:
3535
namespace
3636
)
3737

38-
return namespace[node_body.name](request)
38+
variables = {
39+
'request': request
40+
}
41+
42+
variables.update(other_variables)
43+
44+
return namespace[node_body.name](**variables)

pypulse/View/callview.py

Lines changed: 91 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,100 @@
22

33

44
class CallView:
5-
def __init__(self, path: str) -> None:
5+
def __init__(self, path_to_find: str) -> None:
66
self.name = None
77
self.view = None
88
self.requirement_view = None
99
self.path_trigger = None
10+
self.variables_list = {}
11+
12+
path_to_find = path_to_find.split('/')
1013

1114
for i in View.instances:
12-
if i.path_trigger == path:
13-
self.name = i.name
14-
self.view = i.view
15-
self.requirement_view = i.requirement_view
16-
self.path_trigger = i.path_trigger
17-
break
18-
15+
path = i.path_trigger.split('/')
16+
17+
if len(path) != len(path_to_find):
18+
continue
19+
20+
path_contain_variable = False
21+
index = []
22+
variables_for_index = {}
23+
24+
for j in path:
25+
if len(j) > 0:
26+
path_variable_parameters = self.find_if_variable_in_path(j)
27+
if path_variable_parameters[0] != False:
28+
path_contain_variable = True
29+
30+
variables_for_index[j] = (
31+
path_variable_parameters[2], path_variable_parameters[1])
32+
index.append(j)
33+
34+
# infind the variable and his context call
35+
if path_contain_variable:
36+
# this is the part wee dont check at moment
37+
view_finded = True
38+
39+
for path_view in range(len(path)):
40+
# excluding the variables
41+
element_finded = False
42+
for elements_in_path in index:
43+
if path.index(elements_in_path) == path_view:
44+
element_finded = True
45+
break
46+
47+
if element_finded:
48+
continue
49+
50+
if path[path_view] != path_to_find[path_view]:
51+
view_finded = False
52+
53+
if view_finded:
54+
self.name = i.name
55+
self.view = i.view
56+
self.requirement_view = i.requirement_view
57+
self.path_trigger = i.path_trigger
58+
59+
for current_index_path_variable in index:
60+
self.variables_list[variables_for_index[current_index_path_variable][0]] = self.parse_varible(
61+
path_to_find[path.index(current_index_path_variable)], variables_for_index[current_index_path_variable][1])
62+
63+
break
64+
65+
if path_contain_variable == False:
66+
if path == path_to_find:
67+
self.name = i.name
68+
self.view = i.view
69+
self.requirement_view = i.requirement_view
70+
self.path_trigger = i.path_trigger
71+
break
72+
73+
def find_if_variable_in_path(self, current_path_element: str):
74+
# works whit: int, str, float
75+
76+
methods_allowed = ['str', 'int', 'float']
77+
78+
if '<' != current_path_element[0] and '>' != current_path_element[-1]:
79+
return (False, )
80+
81+
if ':' not in current_path_element:
82+
raise ValueError(
83+
f'The parameter you are setting in the path {current_path_element} are incorrect formated')
84+
85+
type_of_var, var_name = current_path_element[1:-1].split(':')
86+
87+
if type_of_var.lower() not in methods_allowed:
88+
raise TypeError(
89+
f'The type you are passing in the path {current_path_element} are not in the list of allowed var types {methods_allowed}')
90+
91+
return (True, type_of_var, var_name)
92+
93+
def parse_varible(self, variable: str, type_var: str):
94+
if type_var.lower() == 'str':
95+
return str(variable)
96+
97+
if type_var.lower() == 'int':
98+
return int(variable)
99+
100+
if type_var.lower() == 'float':
101+
return float(variable)

pypulse/View/setview.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,33 @@ def _validate_new_view_consistance(self, name, path_trigger):
1717
raise KeyError(
1818
f'The view with the path_trigger {path_trigger} already exists')
1919

20+
for i in View.instances:
21+
current_path_instance_new = []
22+
current_paths_in_views_new = []
23+
24+
current_path_instance = path_trigger.split('/')
25+
current_paths_in_views = i.path_trigger.split('/')
26+
27+
# removing the variables and see if match
28+
29+
for j in current_path_instance:
30+
if len(j) == 0:
31+
current_path_instance_new.append(j)
32+
continue
33+
if j[0] != '<' and j[-1] != '>':
34+
current_path_instance_new.append(j)
35+
36+
for j in current_paths_in_views:
37+
if len(j) == 0:
38+
current_paths_in_views_new.append(j)
39+
continue
40+
if j[0] != '<' and j[-1] != '>':
41+
current_paths_in_views_new.append(j)
42+
43+
if current_path_instance_new == current_paths_in_views_new:
44+
raise KeyError(
45+
f'The view with the path_trigger {path_trigger} already exists, coincidende path: {i.path_trigger}')
46+
2047

2148
def view(name: str, path_trigger: str):
2249
def decorator(func):

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
setup(
1010
name='python-pulse',
1111
packages=find_packages(),
12-
version='0.1.4',
12+
version='0.1.5',
1313
description='Python, create desktop applications based on Chromium',
1414
long_description=long_description,
1515
long_description_content_type="text/markdown",

0 commit comments

Comments
 (0)