Skip to content

Commit cecf12b

Browse files
committed
0.1.4: *Features: Redirect in views*, *Bugs: Solving post no body error and multiple one line imports bug*
1 parent acf6a34 commit cecf12b

File tree

7 files changed

+119
-22
lines changed

7 files changed

+119
-22
lines changed

pypulse/Aplication/reader.py

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,18 @@
55
from pypulse import View
66

77

8-
def collect_imports(node):
9-
if isinstance(node, ast.Import):
10-
for alias in node.names:
11-
import_name = alias.name
12-
as_name = alias.asname
13-
return (import_name, as_name)
14-
15-
elif isinstance(node, ast.ImportFrom):
16-
module_name = node.module
17-
for alias in node.names:
18-
import_name = alias.name
19-
as_name = alias.asname
20-
return (f"{module_name}.{import_name}", as_name)
8+
def get_imports(node):
9+
imports = []
10+
for item in node.body:
11+
if isinstance(item, ast.Import):
12+
for alias in item.names:
13+
imports.append((alias.name, alias.asname))
14+
15+
elif isinstance(item, ast.ImportFrom):
16+
module = item.module
17+
for alias in item.names:
18+
imports.append((f"{module}.{alias.name}", alias.asname))
19+
return imports
2120

2221

2322
class ReadViews:
@@ -44,14 +43,9 @@ def find_views_ho_are_using_the_decoratos(aplication_dir: str):
4443

4544
target_decorator = "@view"
4645

47-
all_imports = []
46+
all_imports = get_imports(parsed_ast)
4847

4948
for node in ast.walk(parsed_ast):
50-
if isinstance(node, (ast.Import, ast.ImportFrom)):
51-
lib = collect_imports(node)
52-
if lib != None:
53-
all_imports.append(lib)
54-
5549
if isinstance(node, ast.FunctionDef):
5650

5751
for decorator in node.decorator_list:

pypulse/Socket/request_handler.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ def do_GET(self):
2626

2727
render = execute_ast_view_request(
2828
node_body=current_view.view, request=request, requirement_view=current_view.requirement_view)
29+
30+
if type(render).__name__ == 'Redirect':
31+
render = render.get_render(request)
32+
2933
template = str.join(" ", render.render_template().splitlines())
3034
self.send_response(200)
3135
self.send_header('Content-type', 'text/html')
@@ -61,6 +65,88 @@ def do_POST(self):
6165

6266
render = execute_ast_view_request(
6367
node_body=current_view.view, request=request, requirement_view=current_view.requirement_view)
68+
69+
if type(render).__name__ == 'Redirect':
70+
render = render.get_render(request)
71+
72+
template = str.join(" ", render.render_template().splitlines())
73+
self.send_response(200)
74+
self.send_header('Content-type', 'text/html')
75+
self.end_headers()
76+
self.wfile.write(template.encode())
77+
else:
78+
super().do_GET()
79+
80+
def do_PUT(self):
81+
content_length = int(self.headers['Content-Length'])
82+
post_body = self.rfile.read(content_length)
83+
temp_post_body = {}
84+
for i in post_body.decode('utf-8').split('&'):
85+
element = i.split('=')
86+
if len(element) == 2:
87+
temp_post_body[element[0]] = element[1]
88+
89+
current_view = View.CallView(self.path)
90+
91+
if current_view.name is not None:
92+
request = {
93+
'method': 'PUT',
94+
'headers': {
95+
'Host': self.headers.get('Host'),
96+
'Upgrade-Insecure-Requests': self.headers.get('Upgrade-Insecure-Requests'),
97+
'User-Agent': self.headers.get('User-Agent'),
98+
'Accept': self.headers.get('Accept'),
99+
'Accept-Encoding': self.headers.get('Accept-Encoding'),
100+
'Accept-Language': self.headers.get('Accept-Language')
101+
},
102+
'body': temp_post_body
103+
}
104+
105+
render = execute_ast_view_request(
106+
node_body=current_view.view, request=request, requirement_view=current_view.requirement_view)
107+
108+
if type(render).__name__ == 'Redirect':
109+
render = render.get_render(request)
110+
111+
template = str.join(" ", render.render_template().splitlines())
112+
self.send_response(200)
113+
self.send_header('Content-type', 'text/html')
114+
self.end_headers()
115+
self.wfile.write(template.encode())
116+
else:
117+
super().do_GET()
118+
119+
def do_PATCH(self):
120+
content_length = int(self.headers['Content-Length'])
121+
post_body = self.rfile.read(content_length)
122+
temp_post_body = {}
123+
for i in post_body.decode('utf-8').split('&'):
124+
element = i.split('=')
125+
if len(element) == 2:
126+
temp_post_body[element[0]] = element[1]
127+
128+
current_view = View.CallView(self.path)
129+
130+
if current_view.name is not None:
131+
request = {
132+
'method': 'PATCH',
133+
'headers': {
134+
'Host': self.headers.get('Host'),
135+
'Upgrade-Insecure-Requests': self.headers.get('Upgrade-Insecure-Requests'),
136+
'User-Agent': self.headers.get('User-Agent'),
137+
'Accept': self.headers.get('Accept'),
138+
'Accept-Encoding': self.headers.get('Accept-Encoding'),
139+
'Accept-Language': self.headers.get('Accept-Language')
140+
},
141+
'body': temp_post_body
142+
}
143+
144+
render = execute_ast_view_request(
145+
node_body=current_view.view, request=request, requirement_view=current_view.requirement_view)
146+
147+
if type(render).__name__ == 'Redirect':
148+
render = render.get_render(request)
149+
64150
template = str.join(" ", render.render_template().splitlines())
65151
self.send_response(200)
66152
self.send_header('Content-type', 'text/html')

pypulse/Template/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
from .render_template import RenderTemplate
22
from .template import Template
3+
from .redirect_path import Redirect

pypulse/Template/redirect_path.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from pypulse.View import CallView
2+
from pypulse.Utils import execute_ast_view_request
3+
4+
5+
class Redirect():
6+
def __init__(self, path: str) -> None:
7+
self.view = CallView(path)
8+
9+
def get_render(self, request):
10+
render = execute_ast_view_request(
11+
node_body=self.view.view, request=request, requirement_view=self.view.requirement_view)
12+
13+
if type(render).__name__ == 'Redirect':
14+
raise RecursionError('You cant do a recursive redirect!')
15+
16+
return render

pypulse/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import importlib.metadata
22

33
__all__ = ["window"]
4-
__version__ = importlib.metadata.version('pypulse')
4+
__version__ = importlib.metadata.version('python-pulse')
55
__author__ = "The pypulse Authors"

pypulse/manage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020

2121
def main():
22-
print(f'v{importlib.metadata.version("pypulse")}')
22+
print(f'v{importlib.metadata.version("python-pulse")}')
2323
print(MANAGE_lOGO)
2424

2525
parser = argparse.ArgumentParser(

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.3',
12+
version='0.1.4',
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)