Merge lp:~isoschiz/endroid/httpindex into lp:endroid

Proposed by Martin Morrison
Status: Superseded
Proposed branch: lp:~isoschiz/endroid/httpindex
Merge into: lp:endroid
Prerequisite: lp:~isoschiz/endroid/globalplugins
Diff against target: 127 lines (+40/-7)
2 files modified
debian/endroid.install (+1/-0)
src/endroid/plugins/httpinterface.py (+39/-7)
To merge this branch: bzr merge lp:~isoschiz/endroid/httpindex
Reviewer Review Type Date Requested Status
ChrisD Approve
Review via email: mp+180386@code.launchpad.net

This proposal supersedes a proposal from 2013-08-15.

This proposal has been superseded by a proposal from 2013-08-15.

Commit message

Add an HTTP front page with links to any plugins with registered pages.

Description of the change

Add an HTTP front page with links to any plugins with registered pages.

To post a comment you must log in.
Revision history for this message
ChrisD (gingerchris) wrote :

looks good

review: Approve
Revision history for this message
Martin Morrison (isoschiz) wrote :

The prerequisite lp:~isoschiz/endroid/globalplugins has not yet been merged into lp:endroid.

Revision history for this message
Martin Morrison (isoschiz) wrote :

Attempt to merge into lp:endroid failed due to conflicts:

text conflict in src/endroid/plugins/httpinterface.py

lp:~isoschiz/endroid/httpindex updated
117. By Martin Morrison

Merge in latest collapses

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/endroid.install'
2--- debian/endroid.install 2013-08-14 10:00:18 +0000
3+++ debian/endroid.install 2013-08-15 17:27:24 +0000
4@@ -5,3 +5,4 @@
5 bin/endroid_echo usr/bin/
6 lib/wokkel-0.7.1-py2.7.egg usr/lib/endroid/dependencies
7 var/endroid.db var/lib/endroid/db
8+doc/EnDroid.png usr/share/endroid/media/
9
10=== added file 'doc/EnDroid.png'
11Binary files doc/EnDroid.png 1970-01-01 00:00:00 +0000 and doc/EnDroid.png 2013-08-15 17:27:24 +0000 differ
12=== modified file 'src/endroid/plugins/httpinterface.py'
13--- src/endroid/plugins/httpinterface.py 2013-08-09 11:45:04 +0000
14+++ src/endroid/plugins/httpinterface.py 2013-08-15 17:27:24 +0000
15@@ -5,14 +5,17 @@
16
17 import collections
18 import re
19+import logging
20
21 from endroid.pluginmanager import Plugin
22 from twisted.internet import reactor
23 from twisted.web.resource import Resource
24 from twisted.web.server import Site
25+from twisted.web.static import File
26
27 DEFAULT_HTTP_PORT = 8880
28 DEFAULT_HTTP_INTERFACE = '127.0.0.1'
29+DEFAULT_MEDIA_DIR = "/usr/share/endroid/media/"
30
31 NOT_FOUND_TEMPLATE = """
32 <html>
33@@ -24,6 +27,18 @@
34 </html>
35 """
36
37+INDEX_TEMPLATE = """
38+<html>
39+ <head><title>EnDroid</title></head>
40+ <body bgcolor="white">
41+ <h1>EnDroid HTTP interface</h1>
42+ <img style='float: right;' src='_media/EnDroid.png'>
43+ <ul>
44+{}
45+ </ul>
46+ </body>
47+</html>"""
48+
49 class HandlerNotFoundError(Exception):
50 pass
51
52@@ -31,12 +46,18 @@
53 """
54 Only registered resource. Route requests to callbacks.
55 """
56- isLeaf = True
57
58 def __init__(self, interface):
59+ Resource.__init__(self)
60 self.interface = interface
61+
62+ def getChild(self, name, request):
63+ if name == "_media":
64+ return self.interface._media
65+ else:
66+ return self
67
68- def render(self, request):
69+ def _render(self, request):
70 try:
71 callback = self.interface.lookup_handler(request.path)
72 except HandlerNotFoundError as e:
73@@ -46,8 +67,8 @@
74
75 return page
76
77- render_GET = render
78- render_POST = render
79+ render_GET = _render
80+ render_POST = _render
81
82
83 class HTTPInterfaceSingleton(object):
84@@ -59,6 +80,11 @@
85 def __init__(self):
86 self.registrations = collections.defaultdict(list)
87
88+ def _index(self, request):
89+ return INDEX_TEMPLATE.format("\n".join("<li><a href='{0}/'>{0}</a></li>"
90+ .format(name)
91+ for name in self.registrations))
92+
93 def lookup_handler(self, path):
94 """"
95 Search for a callback function registered to handle the given path.
96@@ -71,6 +97,8 @@
97 path = path[1:]
98
99 spl = path.split('/', 1)
100+ if len(spl) != 2 and not spl[0]:
101+ return self._index
102 if len(spl) != 2:
103 raise HandlerNotFoundError("Path only has one component")
104 plugin_name, sub_path = spl
105@@ -111,9 +139,12 @@
106 raise ValueError("Prefix %s ends with a slash" % path_prefix)
107 re_src = re.escape(path_prefix) + r"(/.*)?"
108 self.register_regex_path(plugin, callback, re_src)
109-
110- def endroid_init(self, port, interface):
111+
112+ def endroid_init(self, port, interface, media_dir):
113 self.root = IndexPage(self)
114+ logging.info("Publishing static files from {}".format(media_dir))
115+ self._media = File(media_dir)
116+ self.root.putChild("_media", self._media)
117 factory = Site(self.root)
118 reactor.listenTCP(port, factory, interface=interface)
119
120@@ -161,5 +192,6 @@
121 if not HTTPInterface.enInited:
122 port = self.vars.get("port", DEFAULT_HTTP_PORT)
123 interface = self.vars.get("interface", DEFAULT_HTTP_INTERFACE)
124- HTTPInterface.object.endroid_init(port, interface)
125+ media_dir = self.vars.get("media_dir", DEFAULT_MEDIA_DIR)
126+ HTTPInterface.object.endroid_init(port, interface, media_dir)
127 HTTPInterface.enInited = True

Subscribers

People subscribed via source and target branches