Skip to content

Commit a096ae9

Browse files
authored
allow debugging for view (#1)
1 parent 675efa9 commit a096ae9

23 files changed

+327
-467
lines changed

pypulse/Aplication/reader.py

Lines changed: 0 additions & 72 deletions
This file was deleted.
Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11
from .aplication import Aplication
2-
from .reader import ReadViews
3-
from pypulse.View.view import View
42

53

64
class SetAplication:
75
def __init__(self, name: str) -> None:
8-
# finding the views of this aplication
96
self._check_if_aplication_is_already_registered(name)
10-
ReadViews.find_views_ho_are_using_the_decoratos(name)
117
Aplication(name)
128

139
def _check_if_aplication_is_already_registered(self, name:str):
1410
for i in Aplication.instances:
1511
if i.name == name:
1612
raise ValueError('The Aplication is already registered: {name}')
17-

pypulse/Aplication/vars.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
class Vars:
22
APLICATION_PATH = None
33
INTERNAL_HTTP_SERVER_PORT = 63333
4+
VIEWS = []

pypulse/Socket/handler.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import http.server
2+
from urllib import parse
3+
4+
from pypulse.Template import Template
5+
from pypulse.View.views import get
6+
7+
8+
class Request(http.server.SimpleHTTPRequestHandler):
9+
raw_request = None
10+
response = None
11+
12+
def __check_request(self):
13+
self.__request_content()
14+
15+
view = get(self.path)
16+
if not view:
17+
return False
18+
19+
self.response = view[0](
20+
self) if not view[1] else view[0](self, **view[1])
21+
22+
if type(self.response).__name__ not in ['Redirect', 'RenderTemplate', 'Reload']:
23+
return False
24+
25+
return True
26+
27+
def __request_content(self):
28+
raw_length = self.headers.get('content-length')
29+
if not raw_length:
30+
return
31+
length = int(raw_length)
32+
33+
self.raw_request = self.rfile.read(length)
34+
35+
def __return_template(self):
36+
if not self.response:
37+
return
38+
39+
render, redirect = self.response.render_template(self)
40+
self.end_headers()
41+
if not redirect:
42+
template = ' '.join(render.splitlines())
43+
44+
self.wfile.write(template.encode())
45+
46+
def __handler(self):
47+
condition = self.__check_request()
48+
49+
if not condition:
50+
return getattr(http.server.SimpleHTTPRequestHandler, f'do_{self.command}')(self)
51+
52+
self.__return_template()
53+
54+
def __init__(self, *args, **kwargs):
55+
super().__init__(*args, directory=Template.STATIC_PATH, **kwargs)
56+
57+
@property
58+
def parameters(self):
59+
result = {}
60+
for i in parse.parse_qsl(self.raw_request):
61+
result[i[0].decode()] = i[1].decode()
62+
return result
63+
64+
def do_GET(self): self.__handler()
65+
def do_POST(self): self.__handler()

pypulse/Socket/request_handler.py

Lines changed: 0 additions & 155 deletions
This file was deleted.

pypulse/Socket/server.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import socketserver
2-
from .request_handler import RequestHandler
2+
from pypulse.Socket.handler import Request
33
from pypulse.Aplication import Vars
44

55

66
httpd = socketserver.TCPServer(
7-
("", Vars.INTERNAL_HTTP_SERVER_PORT), RequestHandler)
7+
("", Vars.INTERNAL_HTTP_SERVER_PORT), Request)
88

99

1010
def run_socket():

pypulse/Template/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
from .render_template import RenderTemplate
2-
from .template import Template
3-
from .redirect_path import Redirect
1+
from pypulse.Template.render import RenderTemplate
2+
from pypulse.Template.redirect import Redirect
3+
from pypulse.Template.reload import Reload

pypulse/Template/redirect.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from pypulse.Aplication.vars import Vars
2+
from pypulse.View.views import get
3+
4+
5+
class Redirect():
6+
def __init__(self, path: str) -> None:
7+
self.path = path
8+
9+
def render_template(self, request):
10+
if self.path == request.path or get(request.path) == self.path:
11+
print(
12+
f'You tried to redirect to `{self.path}`, route that you are already in.')
13+
print(f'If you want to reload the current view, use `Reload`.')
14+
exit(1)
15+
16+
request.send_response(301)
17+
request.send_header(
18+
'Location', f'http://localhost:{Vars.INTERNAL_HTTP_SERVER_PORT}' + self.path)
19+
return None, True

pypulse/Template/redirect_path.py

Lines changed: 0 additions & 16 deletions
This file was deleted.

pypulse/Template/reload.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from pypulse.Aplication.vars import Vars
2+
from pypulse.View.views import get
3+
4+
5+
class Reload:
6+
7+
def __init__(self) -> None:
8+
pass
9+
10+
def render_template(self, request):
11+
view = get(request.path)
12+
request.command = 'GET'
13+
response = view[0](request) if not view[1] else view[0](
14+
request, **view[1])
15+
if type(response).__name__ == 'Reload':
16+
print(
17+
f'Path `{request.path}` returns reload in a loop (infinite recursion).')
18+
exit(1)
19+
20+
request.send_response(301)
21+
request.send_header(
22+
'Location', f'http://localhost:{Vars.INTERNAL_HTTP_SERVER_PORT}' + request.path)
23+
return None, True

0 commit comments

Comments
 (0)