class Root(rend.Page): addSlash = True docFactory = loaders.stan( t.html[t.head[t.title["Nested Sequence"]], t.body[t.ul( data=t.directive("vertexes"), render=t.directive("sequence"))[t.li( pattern="item" )[t.span(data=t.directive("name"), render=t.directive("string")), t.ul(data=t.directive('edges'), render=t.directive("sequence") )[t.li(pattern="item", render=t.directive("string"))]]]]]) def data_vertexes(self, ctx, data): return [v1, v2, v3]
def render_pagination(self, ctx, data): pagin = T.ul(id='pagination') numPages = self.getNumPages() request = inevow.IRequest(ctx) href = str(request.URLPath()) def createPageLink(pageId, pageTitle, isActive=False): _ = pagin[T.li(_class = 'active' if isActive else '')[ T.a(onclick=livepage.server.handle('page', pageId), href='#')[pageTitle]]] firstPage = max(self.pageId - 1, 0) lastPage = min(firstPage + 3, numPages) # print 'first: %d last: %d num: %d cur: %d' % (firstPage, lastPage, numPages, self.pageId) if firstPage > 0: createPageLink(0, '<<') if self.pageId > 0: createPageLink(self.pageId - 1, '<') pageList = map(lambda p: (p, str(p+1)), range(firstPage, lastPage)) for pageId, pageTitle in pageList: createPageLink(pageId, pageTitle, pageId == self.pageId) if self.pageId < (numPages - 1): createPageLink(self.pageId + 1, '>') if lastPage < numPages: createPageLink(numPages, '>>') return pagin
class Root(TransactionalPage): child_webform_css = webform.defaultCSS implements(IInsert) docFactory = loaders.stan(t.html[ t.head[t.title['Imagination'], t.link(rel='stylesheet', type='text/css', href=url.root.child('webform_css'))], t.body[webform.renderForms(), t.ul(render=t.directive("sequence"), data=t.directive("images") )[t.li(pattern="item", render=t.directive("image")), t.li(pattern="empty")["No images yet"]]]]) def data_images(self, ctx, data): return IImages(self.store).getImages(15) def render_image(self, ctx, data): return t.a(href=url.root.child('fs').child(data.hash))[data.title] def insert(self, ctx, title, author, image): img = Image(store=self.store, image=image.value, title=title.decode('utf-8'), author=author.decode('utf-8'), hash=label().decode('utf-8')) def locateChild(self, ctx, segments): if segments[0] == 'fs': data = IImages(self.store).getOne(segments[1].decode('utf-8')) return static.Data(data.image, 'image/jpeg'), () return super(Root, self).locateChild(ctx, segments)
class R(rend.Page): def data_numbers(context, data): return ['one', 'two', 'three'] tags = ul(data=data_numbers, render=directive('sequence'))[li( pattern='item')[span(render=str)]] docFactory = loaders.stan(tags)
def render_links(self, context, data): ds = self.root.edits(self.ob) therange = range(len(ds)) rev = therange[self.rev] ul = tags.ul() for i in therange: li = tags.li() if i: li[tags.a(href=url.URL.fromContext( context).sibling('diff').add('ob', self.ob.fullName()).add( 'revA', i - 1).add('revB', i))["(diff)"]] else: li["(diff)"] li[" - "] if i == len(ds) - 1: label = "Latest" else: label = str(i) if i == rev: li[label] else: li[tags.a(href=url.gethere.replace('rev', str(i)))[label]] li[' - ' + ds[i].user + '/' + ds[i].time] ul[li] return context.tag[ul]
class Page(rend.Page): def render_item(self, ctx, data): return inevow.IRenderer(data) docFactory = loaders.stan( T.html[T.body[T.ul(data=objs, render=rend.sequence)[T.li( pattern='item')[render_item], ], ], ])
def create_nav_list(self, ctx, items, uri_builder, external=False, disabled=False): tmp = inevow.IRequest(ctx).URLPath() tmp = tmp.clear() # remove query parameters pageuri = str(tmp) ul = T.ul() for [text, urilist] in items: classes = [] if disabled: classes.append('disabled') li = T.li[text] else: # first uri in list is the 'primary' URI (in menu) href = uri_builder(urilist[0]) a = T.a(href=href)[text] if external: a(target='_blank') li = T.li[a] for u in urilist: # any uri in the list is recognized as 'current' page if pageuri.endswith(u): # XXX: could be better classes.append('current') break if len(classes) > 0: li(_class=' '.join(classes)) ul[li] return ul
def render_pagination(self, ctx, data): pagin = T.ul(id='pagination') numPages = self.getNumPages() request = inevow.IRequest(ctx) href = str(request.URLPath()) def createPageLink(pageId, pageTitle, isActive=False): _ = pagin[T.li(_class='active' if isActive else '')[T.a( onclick=livepage.server.handle('page', pageId), href='#')[pageTitle]]] firstPage = max(self.pageId - 1, 0) lastPage = min(firstPage + 3, numPages) # print 'first: %d last: %d num: %d cur: %d' % (firstPage, lastPage, numPages, self.pageId) if firstPage > 0: createPageLink(0, '<<') if self.pageId > 0: createPageLink(self.pageId - 1, '<') pageList = map(lambda p: (p, str(p + 1)), range(firstPage, lastPage)) for pageId, pageTitle in pageList: createPageLink(pageId, pageTitle, pageId == self.pageId) if self.pageId < (numPages - 1): createPageLink(self.pageId + 1, '>') if lastPage < numPages: createPageLink(numPages, '>>') return pagin
def gotMail(mail): print mail attachments, hdrs, data = mail uFrom, uDate, uSubject = hdrs toolbar = [("/mail/Mail/##%s" % self.params[0], 'Inbox', "/images/inbox.png"), ("/mail/New/##%s.%s" % self.params, 'Reply', "/images/inbox.png")] return ctx.tag[tags.div( id="mailViewHolder")[ tags.ul( id="mailTools")[[ tags.li[tags.a(href=link)[tags.div[tags.img( src=image)], name]] for link, name, image in toolbar ]], tags.table( id="mailViewHeaders" )[tags.tr[tags.td["From:"], tags.td[uFrom]], tags.tr[tags.td["Date:"], tags.td[uDate]], tags.tr[tags.td["Subject:"], tags.td[uSubject]], tags.tr[tags.td["Attachments:"], tags.td[[[ tags.a(href="/mail/mdata/%s/%s" % (self.avatarId.username, v[0]))[tags.img( src="/images/attachment.png"), " ", k], " (%0.2f KB)" % (v[1] / 1024.0), tags.br ] for k, v in attachments.items()]]], ], tags.div(id="mailViewContentBox")[tags.xml(data)], ]]
class DBBrowser(rend.Page): implements(IAddItem) addSlash = True def addItem(self, newSubject): doQuery('insert into foo values subject = "%s"', newSubject) def data_queryDatabase(self, context, data): return doQuery('select * from foo') def render_row(self, context, data): theId, theSubj = data return context.tag[ # put our anchor in the li provided by the template tags.a(href=theId)[theSubj]] docFactory = loaders.stan(tags.html[tags.body[ tags.h1["Welcome, user"], tags.ul(data=tags.directive("queryDatabase"), render=tags.directive("sequence") )[tags.li(pattern="item", render=render_row)], webform.renderForms()]]) def childFactory(self, ctx, name): """Since we created anchor tags linking to children of this resource directly by id, when the anchor is clicked, childFactory will be called with the appropriate id as the name argument.""" try: ## Pass the id of the database item we want to be rendered on this page ## to the DBItem constructor. This integer will be used as the default data ## for this page. return DBItem(int(name)) except ValueError: pass
def render_lease_last_cycle_results(self, ctx, data): lc = self.storage.lease_checker h = lc.get_state()["history"] if not h: return "" last = h[max(h.keys())] start, end = last["cycle-start-finish-times"] ctx.tag["Last complete cycle (which took %s and finished %s ago)" " recovered: " % (abbreviate_time(end-start), abbreviate_time(time.time() - end)), self.format_recovered(last["space-recovered"], "actual") ] p = T.ul() def add(*pieces): p[T.li[pieces]] saw = self.format_recovered(last["space-recovered"], "examined") add("and saw a total of ", saw) if not last["expiration-enabled"]: rec = self.format_recovered(last["space-recovered"], "configured") add("but expiration was not enabled. If it had been, " "it would have recovered: ", rec) if last["corrupt-shares"]: add("Corrupt shares:", T.ul[ [T.li[ ["SI %s shnum %d" % corrupt_share for corrupt_share in last["corrupt-shares"] ] ]]]) return ctx.tag[p]
def render_links(self, context, data): ds = self.root.edits(self.ob) therange = range(len(ds)) rev = therange[self.rev] ul = tags.ul() for i in therange: li = tags.li() if i: li[tags.a(href=url.URL.fromContext(context).sibling( 'diff').add( 'ob', self.ob.fullName()).add( 'revA', i-1).add( 'revB', i))["(diff)"]] else: li["(diff)"] li[" - "] if i == len(ds) - 1: label = "Latest" else: label = str(i) if i == rev: li[label] else: li[tags.a(href=url.gethere.replace('rev', str(i)))[label]] li[' - ' + ds[i].user + '/' + ds[i].time] ul[li] return context.tag[ul]
def render_menu(self, context, items, class_='menu'): def _menu(items, class_): for item in items: yield T.li(class_=class_)[T.a(href=item.get_url(), class_=class_)[item.title]] return T.ul(class_=class_)[_menu(items, class_)]
def render(ctx, data): def render_children(ctx, data): yield [T.invisible(data=child, render=render_node) for child in data ] def render_node(ctx, data): tag = T.li[item()] children = INode(data).children if children: tag[T.ul[render_children(ctx, children)]] return tag item = inevow.IQ(ctx).patternGenerator('item') try: itemdisabled = inevow.IQ(ctx).patternGenerator('itemdisabled') except stan.NodeNotFound: itemdisabled = item tag = T.ul() if isinstance(data, (tuple,list)): tag = tag[render_children] else: tag = tag[render_node] return tag
def _render(sharemap): if sharemap is None: return "None" l = T.ul() for shnum, servers in sorted(sharemap.items()): server_names = ', '.join([s.get_name() for s in servers]) l[T.li["%d -> placed on [%s]" % (shnum, server_names)]] return l
def _render(sharemap): if sharemap is None: return "None" l = T.ul() for shnum, peerids in sorted(sharemap.items()): peerids = ', '.join([idlib.shortnodeid_b2a(i) for i in peerids]) l[T.li["%d -> placed on [%s]" % (shnum, peerids)]] return l
def render_images(self, ctx, data): """Render a list of images. """ tag = T.div(data=images, render=rend.sequence)[T.div(pattern='item')[ T.p(data=T.directive('filename'), render=T.directive('data')), T.ul(data=T.directive('comments'), render=rend.sequence)[ T.li(pattern='item', render=T.directive('data')), ], ], ] return tag
def _got(server_problems): if not server_problems: return "" l = T.ul() for peerid in sorted(server_problems.keys()): peerid_s = idlib.shortnodeid_b2a(peerid) l[T.li["[%s]: %s" % (peerid_s, server_problems[peerid])]] return T.li["Server Problems:", l]
class Root(rend.Page): implements(ITodo) child_css = webform.defaultCSS docFactory = loaders.stan( t.html(render=t.directive("time"))[ t.head[ t.title['todo'], t.style(type="text/css")[".done { color: #dddddd; }"], t.style(type="text/css")["@import url(/css);"] ], t.body[ webform.renderForms(), t.ul(data=t.directive("findAll"), render=t.directive("sequence"))[ t.li(pattern="item",render=t.directive('todo')), t.li(pattern="empty",render=t.directive('empty')), ], t.p(render=t.directive("end")) ] ] ) def insert(self, ctx, description): return itodo.ITodos(ctx).add(description, 0) def delete(self, ctx, id): return itodo.ITodos(ctx).delete(id) def update(self, ctx, id, oldstate): newstate = [1, 0][oldstate] return itodo.ITodos(ctx).update(id, newstate) def data_findAll(self, ctx, data): return itodo.ITodos(ctx).findAll() def render_todo(self, ctx, data): deluri = "freeform_post!!delete?id="+str(data[0]) updateuri = "freeform_post!!update?id="+str(data[0])+"&oldstate="+str(data[2]) state = [" Done", " To Do"][int(data[2])==0] tag = ctx.tag if data[2]: tag = ctx.tag(_class="done") return tag[data[1]+" - ", t.a(href=deluri)["Delete"], " / ", t.a(href=updateuri)[("Mark Done", "Mark Undone")[data[2]]], state] def render_empty(self, ctx, data): return ctx.tag["No Todos"] def render_time(self, ctx, data): ctx.remember(now(), itodo.ITimer) return ctx.tag def render_end(self, ctx, data): return ctx.tag["%.3f"%(now()-itodo.ITimer(ctx))]
def _render(per_server): if per_server is None: return "" l = T.ul() for peerid in sorted(per_server.keys()): peerid_s = idlib.shortnodeid_b2a(peerid) times_s = ", ".join([self.render_time(None, t) for t in per_server[peerid]]) l[T.li["[%s]: %s" % (peerid_s, times_s)]] return T.li["Per-Server Segment Fetch Response Times: ", l]
def _render(servermap): if servermap is None: return "None" l = T.ul() for peerid in sorted(servermap.keys()): peerid_s = idlib.shortnodeid_b2a(peerid) shares_s = ",".join(["#%d" % shnum for shnum in servermap[peerid]]) l[T.li["[%s] got share%s: %s" % (peerid_s, plural(servermap[peerid]), shares_s)]] return l
def render_sharemap(self, ctx, data): servermap = data.get_servermap() if servermap is None: return ctx.tag["None"] l = T.ul() sharemap = servermap.make_sharemap() for shnum in sorted(sharemap.keys()): l[T.li["%d -> Placed on " % shnum, ", ".join(["[%s]" % server.get_name() for server in sharemap[shnum]])]] return ctx.tag["Sharemap:", l]
def entrySerializer(original, context): ul = tags.ul() for a,l in original.items(): if len(l)==0: ul[tags.li[a, ': none']] elif len(l)==1: for attr in l: first = attr break ul[tags.li[a, ': ', first]] else: li=tags.li[a, ':'] ul[li] liul=tags.ul() li[liul] for i in l: liul[tags.li[i]] return flat.serialize(ul, context)
def render_problems(self, ctx, data): problems = data.problems if not problems: return "" l = T.ul() for peerid in sorted(problems.keys()): peerid_s = idlib.shortnodeid_b2a(peerid) l[T.li["[%s]: %s" % (peerid_s, problems[peerid])]] return ctx.tag["Server Problems:", l]
def _render(sharemap): if sharemap is None: return "None" l = T.ul() for shnum, peerids in sorted(sharemap.items()): peerids = ', '.join( [idlib.shortnodeid_b2a(i) for i in peerids]) l[T.li["%d -> placed on [%s]" % (shnum, peerids)]] return l
def _render(servermap): if servermap is None: return "None" l = T.ul() for server, shnums in sorted(servermap.items()): shares_s = ",".join(["#%d" % shnum for shnum in shnums]) l[T.li["[%s] got share%s: %s" % (server.get_name(), plural(shnums), shares_s)]] return l
def entrySerializer(original, context): ul = tags.ul() for a, l in original.items(): if len(l) == 0: ul[tags.li[a, ': none']] elif len(l) == 1: for attr in l: first = attr break ul[tags.li[a, ': ', first]] else: li = tags.li[a, ':'] ul[li] liul = tags.ul() li[liul] for i in l: liul[tags.li[i]] return flat.serialize(ul, context)
def render_content(self, ctx, data): toolbar = [("#", 'Send', "/images/inbox.png", "sendBtn")] return ctx.tag[tags.ul(id="mailTools")[[ tags.li[tags.a(id=id, href=link)[tags.div[tags.img(src=image)], name]] for link, name, image, id in toolbar ]], tags.invisible(render=tags.directive('thisFragment'))]
def render_lease_current_cycle_results(self, ctx, data): lc = self.storage.lease_checker p = lc.get_progress() if not p["cycle-in-progress"]: return "" s = lc.get_state() so_far = s["cycle-to-date"] sr = so_far["space-recovered"] er = s["estimated-remaining-cycle"] esr = er["space-recovered"] ec = s["estimated-current-cycle"] ecr = ec["space-recovered"] p = T.ul() def add(*pieces): p[T.li[pieces]] def maybe(d): if d is None: return "?" return "%d" % d add("So far, this cycle has examined %d shares in %d buckets" % (sr["examined-shares"], sr["examined-buckets"]), " (%d mutable / %d immutable)" % (sr["examined-buckets-mutable"], sr["examined-buckets-immutable"]), " (%s / %s)" % (abbreviate_space(sr["examined-diskbytes-mutable"]), abbreviate_space(sr["examined-diskbytes-immutable"])), ) add("and has recovered: ", self.format_recovered(sr, "actual")) if so_far["expiration-enabled"]: add("The remainder of this cycle is expected to recover: ", self.format_recovered(esr, "actual")) add("The whole cycle is expected to examine %s shares in %s buckets" % (maybe(ecr["examined-shares"]), maybe(ecr["examined-buckets"]))) add("and to recover: ", self.format_recovered(ecr, "actual")) else: add("If expiration were enabled, we would have recovered: ", self.format_recovered(sr, "configured"), " by now") add("and the remainder of this cycle would probably recover: ", self.format_recovered(esr, "configured")) add("and the whole cycle would probably recover: ", self.format_recovered(ecr, "configured")) add("if we were strictly using each lease's default 31-day lease lifetime " "(instead of our configured behavior), " "this cycle would be expected to recover: ", self.format_recovered(ecr, "original")) if so_far["corrupt-shares"]: add("Corrupt shares:", T.ul[ [T.li[ ["SI %s shnum %d" % corrupt_share for corrupt_share in so_far["corrupt-shares"] ] ]]]) return ctx.tag["Current cycle:", p]
def render_server_timings(self, ctx, data): per_server = self.publish_status.timings.get("send_per_server") if not per_server: return "" l = T.ul() for server in sorted(per_server.keys(), key=lambda s: s.get_name()): times_s = ", ".join( [self.render_time(None, t) for t in per_server[server]]) l[T.li["[%s]: %s" % (server.get_name(), times_s)]] return T.li["Per-Server Response Times: ", l]
def render_server_timings(self, ctx, data): per_server = self.publish_status.timings.get("send_per_server") if not per_server: return "" l = T.ul() for server in sorted(per_server.keys(), key=lambda s: s.get_name()): times_s = ", ".join([self.render_time(None, t) for t in per_server[server]]) l[T.li["[%s]: %s" % (server.get_name(), times_s)]] return T.li["Per-Server Response Times: ", l]
def render_server_timings(self, ctx, data): per_server = self.publish_status.timings.get("send_per_server") if not per_server: return "" l = T.ul() for peerid in sorted(per_server.keys()): peerid_s = idlib.shortnodeid_b2a(peerid) times_s = ", ".join([self.render_time(None, t) for t in per_server[peerid]]) l[T.li["[%s]: %s" % (peerid_s, times_s)]] return T.li["Per-Server Response Times: ", l]
def _render(per_server): if per_server is None: return "" l = T.ul() for peerid in sorted(per_server.keys()): peerid_s = idlib.shortnodeid_b2a(peerid) times_s = ", ".join( [self.render_time(None, t) for t in per_server[peerid]]) l[T.li["[%s]: %s" % (peerid_s, times_s)]] return T.li["Per-Server Segment Fetch Response Times: ", l]
def render_sharemap(self, ctx, data): servermap = data.get_servermap() if servermap is None: return ctx.tag["None"] l = T.ul() sharemap = servermap.make_sharemap() for shnum in sorted(sharemap.keys()): l[T.li["%d -> Placed on " % shnum, ", ".join( ["[%s]" % server.get_name() for server in sharemap[shnum]])]] return ctx.tag["Sharemap:", l]
def _render(self, ctx, key, args, errors, value, tag): def data_facets(ctx, data): storeSession = util.getStoreSession(ctx) avatar = util.getAvatar(ctx) @defer.deferredGenerator def loadCategories(facets): d = defer.waitForDeferred(avatar.getCategoryManager(storeSession)) yield d categories = d.getResult() rv = [] for f in facets: facetData = FacetData() facetData.label = f[2] facetData.textid = f[1] rv.append(facetData) d = defer.waitForDeferred(categories.loadCategories(facetData.textid)) yield d facetData.tree = d.getResult().children yield rv d = avatar.getCategoryManager(storeSession) d.addCallback(lambda categories: categories.loadFacets()) d.addCallback(loadCategories) return d def render_facet(ctx, data): tag = ctx.tag tag.fillSlots("facetlabel", data.label) return tag def render_node(ctx, data): tag = ctx.tag tag.fillSlots("value", data.path) tag.fillSlots("label", data.label) if data.path in value: tag.children[0] = tag.children[0](checked="checked") else: tag.children[0](checked=None) return tag template = T.div(class_="categorieswidget")[ T.p(class_="opener")["click to open/close"], T.ul(class_="panel", data=data_facets, render=rend.sequence)[ T.li(pattern="item", render=render_facet)[ T.slot("facetlabel"), T.div(data=T.directive("tree"), render=tree.render)[ T.invisible(pattern="item", render=render_node)[tag, T.slot("label")] ], ] ], ] return T.invisible()[template]
def render_problems(self, ctx, data): problems = data.get_problems() if not problems: return "" l = T.ul() # XXX: is this exercised? I don't think PublishStatus.problems is # ever populated for peerid in sorted(problems.keys()): peerid_s = idlib.shortnodeid_b2a(peerid) l[T.li["[%s]: %s" % (peerid_s, problems[peerid])]] return ctx.tag["Server Problems:", l]
def _render(servermap): if servermap is None: return "None" l = T.ul() for peerid in sorted(servermap.keys()): peerid_s = idlib.shortnodeid_b2a(peerid) shares_s = ",".join( ["#%d" % shnum for shnum in servermap[peerid]]) l[T.li["[%s] has share%s: %s" % (peerid_s, plural(servermap[peerid]), shares_s)]] return l
def data_identities(self, ctx, data): """ Template function to display a list of user identities. """ result = yield self.user.getIdentities() output = [tags.h3()['identities'], tags.ul(_class="url-list")[[ tags.li()[item['url']] for item in result ]] ] returnValue(output)
def data_trusted_roots(self, ctx, data): """ Template function to display a list of user roots. """ result = yield self.user.getTrustedRoots() output = [tags.h3()['trusted roots'], tags.ul(_class="url-list")[[ tags.li()[item['url']] for item in result ]] ] returnValue(output)
def render_server_timings(self, ctx, data): per_server = self.publish_status.timings.get("send_per_server") if not per_server: return "" l = T.ul() for peerid in sorted(per_server.keys()): peerid_s = idlib.shortnodeid_b2a(peerid) times_s = ", ".join( [self.render_time(None, t) for t in per_server[peerid]]) l[T.li["[%s]: %s" % (peerid_s, times_s)]] return T.li["Per-Server Response Times: ", l]
def render_images(self, ctx, data): """Render a list of images. """ tag = T.div(data=images, render=rend.sequence)[ T.div(pattern='item')[ T.p(data=T.directive('filename'), render=T.directive('data')), T.ul(data=T.directive('comments'), render=rend.sequence)[ T.li(pattern='item', render=T.directive('data')), ], ], ] return tag
def tabbedPane(self, ctx, data): tab_names = [element[0] for element in data] return t.invisible[ t.div(class_='tabbedPane')[ t.ul(class_='tabs')[ [t.li(id_="tab-"+name.replace(' ', '_'))[name] for name in tab_names] ], [t.div(id_="page-"+name.replace(' ', '_'))[fragment] for name, fragment in data] ], t.inlineJS('setupTabbedPane(['+','.join([le.flt(le.js['tab-'+name.replace(' ', '_'),'page-'+name.replace(' ', '_')], quote=False) for name, junk in data])+']);') ]
def render_content(self, ctx, data): toolbar = [ ("/mail/New/", 'New', "/images/inbox.png", "newmail"), ("#", 'Delete', "/images/inbox.png", "deletesel"), ] return ctx.tag[tags.ul(id="mailTools")[[ tags.li(id=id)[tags.a(href=link)[tags.div[tags.img(src=image)], name]] for link, name, image, id in toolbar ]], tags.invisible(render=tags.directive('thisFragment'))]
def moduleSummary(modorpack): r = tags.li[taglink(modorpack), ' - ', epydoc2stan.doc2html(modorpack, summary=True)[0]] if not isinstance(modorpack, model.Package): return r contents = [m for m in modorpack.orderedcontents if m.isVisible and m.name != '__init__'] if not contents: return r ul = tags.ul() for m in sorted(contents, key=lambda m:m.fullName()): ul[moduleSummary(m)] return r[ul]
def workloadType(self, ctx, wltypeName): session = inevow.ISession(ctx) if self.workloadTypes is None: self.workloadTypes = yield session.agent.expsvcAgent.getWorkloadTypes( agentId=self.agentId) wltype = self.workloadTypes[wltypeName] wlcDescriptions = [T.li[wlclasses[wlc][1]] for wlc in wltype.wlclass] ctx.fillSlots('name', wltypeName) ctx.fillSlots('module', wltype.module) ctx.fillSlots('path', wltype.path) ctx.fillSlots('classes', T.ul()[wlcDescriptions]) self.data_workloadParams = [] for paramName, param in wltype.params.iteritems(): if param.flags & TSWLParamCommon.WLPF_OPTIONAL: paramName = T.span[paramName, T.sup['OPT']] wlpType = WLParamHelper.getTypeName(param) minVal, maxVal = WLParamHelper.getIntegerRange(param) lenVal = WLParamHelper.getStringLength(param) range = 'None' if minVal is not None and maxVal is not None: range = '[%s...%s]' % (_wlparamToStr( minVal, param), _wlparamToStr(maxVal, param)) elif lenVal is not None: range = 'len: %s' % lenVal default = WLParamHelper.getDefaultValue(param) if default is not None: default = _wlparamToStr(default, param) else: default = 'None' self.data_workloadParams.append({ 'param': paramName, 'type': wlpType, 'range': range, 'default': default, 'description': param.description }) wltparams = loaders.xmlfile(webappPath('agent/wltypeparam.html')) returnValue(wltparams)
def workloadType(self, ctx, wltypeName): session = inevow.ISession(ctx) if self.workloadTypes is None: self.workloadTypes = yield session.agent.expsvcAgent.getWorkloadTypes(agentId = self.agentId) wltype = self.workloadTypes[wltypeName] wlcDescriptions = [T.li[wlclasses[wlc][1]] for wlc in wltype.wlclass] ctx.fillSlots('name', wltypeName) ctx.fillSlots('module', wltype.module) ctx.fillSlots('path', wltype.path) ctx.fillSlots('classes', T.ul()[wlcDescriptions]) self.data_workloadParams = [] for paramName, param in wltype.params.iteritems(): if param.flags & TSWLParamCommon.WLPF_OPTIONAL: paramName = T.span[paramName, T.sup['OPT']] wlpType = WLParamHelper.getTypeName(param) minVal, maxVal = WLParamHelper.getIntegerRange(param) lenVal = WLParamHelper.getStringLength(param) range = 'None' if minVal is not None and maxVal is not None: range = '[%s...%s]' % (_wlparamToStr(minVal, param), _wlparamToStr(maxVal, param)) elif lenVal is not None: range = 'len: %s' % lenVal default = WLParamHelper.getDefaultValue(param) if default is not None: default = _wlparamToStr(default, param) else: default = 'None' self.data_workloadParams.append({'param': paramName, 'type': wlpType, 'range': range, 'default': default, 'description': param.description}) wltparams = loaders.xmlfile(webappPath('agent/wltypeparam.html')) returnValue(wltparams)
def test_stanPrecompiled(self): """ Test that a stan loader works with precompiled documents. (This behavior will probably be deprecated soon, but we need to test that it works right until we remove it.) """ doc = flat.precompile(t.ul(id='nav')[t.li['one'], t.li['two'], t.slot('three')]) df = loaders.stan(doc) loaded = df.load() self.assertEqual(loaded[0], '<ul id="nav"><li>one</li><li>two</li>') self.failUnless(isinstance(loaded[1], _PrecompiledSlot)) self.assertEqual(loaded[1].name, 'three') self.assertEqual(loaded[2], '</ul>')
def stuff(self, request, tag): t = tag anchors = set() for b, o in findRootClasses(self.system): if isinstance(o, model.Class): t[subclassesFrom(self.system, o, anchors)] else: item = tags.li[b] if o: ul = tags.ul() for sc in sorted(o, key=_lckey): ul[subclassesFrom(self.system, sc, anchors)] item[ul] t[item] return t
def tabbedPane(self, ctx, data): tab_names = [element[0] for element in data] return t.invisible[t.div(class_='tabbedPane')[t.ul(class_='tabs')[[ t.li(id_="tab-" + name.replace(' ', '_'))[name] for name in tab_names ]], [ t.div(id_="page-" + name.replace(' ', '_'))[fragment] for name, fragment in data ]], t.inlineJS('setupTabbedPane([' + ','.join([ le.flt(le.js['tab-' + name.replace(' ', '_'), 'page-' + name.replace(' ', '_')], quote=False) for name, junk in data ]) + ']);')]
def data_trusted_roots(self, ctx, data): """ Template function to display a checkbox list of user roots. """ result = yield self.user.getTrustedRoots() output = [tags.h3()['trusted roots'], tags.ul(_class="url-list")[[ tags.li()[[ tags.input(type='checkbox', name='root-%s' % item['id'], value='1'), item['url'], ]] for item in result ]] ] returnValue(output)
def data_identities(self, ctx, data): """ Template function to display a checkbox list of user identities. """ result = yield self.user.getIdentities() output = [tags.h3()['identities'], tags.ul(_class="url-list")[[ tags.li()[[ tags.input(type='checkbox', name='identity-%s' % item['id'], value='1'), item['url'], ]] for item in result ]] ] returnValue(output)
def render_magic_folder_row(self, ctx, data): magic_folder = self.client._magic_folders[data] (ok, messages) = magic_folder.get_public_status() ctx.fillSlots("magic_folder_name", data) if ok: ctx.fillSlots("magic_folder_status", "yes") ctx.fillSlots("magic_folder_status_alt", "working") else: ctx.fillSlots("magic_folder_status", "no") ctx.fillSlots("magic_folder_status_alt", "not working") status = T.ul(class_="magic-folder-status") for msg in messages: status[T.li[str(msg)]] return ctx.tag[status]