def do_action(request, page, inmetas, action='add', createpage=True, category_edit='add', catlist=[], template=''): cleared, added, discarded = {page: set()}, {page: dict()}, {page: dict()} if action == 'add': for key in inmetas: added[page][key] = inmetas[key] elif action == 'set': for key in inmetas: cleared[page].add(key) added[page][key] = inmetas[key] else: #4 is used by action/setMetaJSON.py raise ValueError(4, "action must be one of add, set (got %s)" % repr(action)) if category_edit == 'del': discarded[page].setdefault('gwikicategory', list()).extend(catlist) elif category_edit == 'set': cleared[page].add("gwikicategory") added[page].setdefault('gwikicategory', list()).extend(catlist) elif category_edit == 'add': added[page].setdefault('gwikicategory', list()).extend(catlist) else: raise ValueError("category_edit must be one of add, del, set (got %s)"% repr(category_edit)) if template: added[page]['gwikitemplate'] = template _, msg = set_metas(request, cleared, discarded, added) return msg
def save_report(request, control, activity): second = time.time() timestamp = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(int(second))) ts = time.strftime("%Y-%m-%d %H:%M:%SZ", time.gmtime(int(second))) second *= 10**6 timestamp += ".%06d" % (second % (10**6), ) pagename = "Stress-%s" % timestamp cleared = {pagename: set(["in control", "activity", "time"])} metas = { "gwikicategory": ["CategoryStress"], "in control": [control], "activity": [activity], "time": [ts], "activity level": [{ "low": "1", "medium": "2", "high": "3" }[activity]] } success, msg = set_metas(request, cleared, {}, {pagename: metas}) if not success: return False, u"Reporting failed. Try again or contact administrator." return True, u"Thank you for reporting."
def execute(pagename, request): request.content_type = "application/json" if request.environ['REQUEST_METHOD'] != 'POST': #405 Method Not Allowed request.status_code = 405 return pagename = pagename.strip() indata = request.read() if not indata: #400 Bad Request request.status_code = 400 request.write('No data') return cleared, added, discarded = {}, {}, {} def parse(row): op = row.get('op', None) page = row.get('page', pagename) key = row.get('key', None) value = row.get('value', []) if type(value) != list: value = [value] if op == 'set': cleared.setdefault(page, set()).add(key) elif op == 'del': disc = discarded.setdefault(page, dict()) disc.setdefault(key, list()).extend(value) if op in ['add', 'set']: add = added.setdefault(page, dict()) add.setdefault(key, list()).extend(value) indata = json.loads(indata) if type(indata) is list: for data in indata: parse(data) else: parse(indata) success, msg = set_metas(request, cleared, discarded, added) if not success: #403 Forbidden, the set_metas fails when user doesn't have write perms request.status_code = 403 json.dump(dict(msg=msg), request)
def write_timestamps(request, pagename, meta_keys): timestamp = datetime(*time.gmtime()[:6]).strftime("%Y-%m-%d %H:%M:%SZ") cleared = {} metas = {} for key in meta_keys: old = cleared.setdefault(pagename, set()) old.add(key) new = metas.setdefault(pagename, dict()) new[key] = [timestamp] success, msg = set_metas(request, cleared, {}, metas) if not success: return False, u"Timestamping failed. Try again or contact administrator." return True, ""
def save_report(request, control, activity): second = time.time() timestamp = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(int(second))) ts = time.strftime("%Y-%m-%d %H:%M:%SZ", time.gmtime(int(second))) second *= 10**6 timestamp += ".%06d" % (second % (10**6),) pagename = "Stress-%s" % timestamp cleared = {pagename: set(["in control", "activity", "time"])} metas = {"gwikicategory": ["CategoryStress"], "in control": [control], "activity": [activity], "time": [ts], "activity level": [{"low":"1","medium":"2","high":"3"}[activity]]} success, msg = set_metas(request, cleared, {}, {pagename: metas}) if not success: return False, u"Reporting failed. Try again or contact administrator." return True, u"Thank you for reporting."
def do_action(request, page, inmetas, action='add', createpage=True, category_edit='add', catlist=[], template=''): cleared, added, discarded = {page: set()}, {page: dict()}, {page: dict()} if action == 'add': for key in inmetas: added[page][key] = inmetas[key] elif action == 'set': for key in inmetas: cleared[page].add(key) added[page][key] = inmetas[key] else: #4 is used by action/setMetaJSON.py raise ValueError( 4, "action must be one of add, set (got %s)" % repr(action)) if category_edit == 'del': discarded[page].setdefault('gwikicategory', list()).extend(catlist) elif category_edit == 'set': cleared[page].add("gwikicategory") added[page].setdefault('gwikicategory', list()).extend(catlist) elif category_edit == 'add': added[page].setdefault('gwikicategory', list()).extend(catlist) else: raise ValueError( "category_edit must be one of add, del, set (got %s)" % repr(category_edit)) if template: added[page]['gwikitemplate'] = template _, msg = set_metas(request, cleared, discarded, added) return msg
def execute(pagename, request): _ = request.getText def wr(fmt, *args): request.write(form_writer(fmt, *args)) # This action generates data using the user language request.setContentLanguage(request.lang) form = values_to_form(request.values) if form.has_key('cancel'): request.reset() backto = form.get('backto', [None])[0] request.theme.add_msg(_('Edit was cancelled.'), "error") if backto: page = Page(request, backto) request.http_redirect(page.url(request)) request.page = page request.page.send_page() elif form.has_key('save') or form.has_key('saveform'): if request.environ['REQUEST_METHOD'] != 'POST': request.page.send_page() return template = form.get('template', [None])[0] # MetaFormEdit is much closer to set_meta in function if form.has_key('saveform'): added, cleared = {pagename: dict()}, {pagename: list()} # Pre-create page if it does not exist, using the template specified if template: added[pagename]['gwikitemplate'] = template # Ignore form clutter ignore = set() files = dict() for key in request.files: ignore.add(key) _file = request.files.get(key) filename = _file.filename fileobj = _file.stream # if type(fileobj) != file: # continue banana = key.split(SEPARATOR) keys = files.setdefault(banana[0], dict()) values = keys.setdefault(banana[1], list()) values.append((filename, fileobj)) keys = list() for key in form: if key not in ignore and SEPARATOR in key: keys.append(key.split(SEPARATOR)[1]) # keys = [x.split(SEPARATOR)[1] for x in form if SEPARATOR in x] for key in keys: cleared[pagename].append(key) vals = [x.strip() for x in form[pagename + SEPARATOR + key] if x.strip()] if vals: added[pagename].setdefault(key, list()).extend(vals) msgs = list() # Add attachments for pname in files: for key in files[pname]: for value in files[pname][key]: name = value[0] try: t, s = add_attachment(request, pname, name, value[1]) added.setdefault(pname, dict()).setdefault( key, list()).append("[[attachment:%s]]" % name) except AttachmentAlreadyExists: msgs = ["Attachment '%s' already exists." % name] _, msgss = set_metas(request, cleared, dict(), added) msgs.extend(msgss) else: # MetaEdit pages, msgs, files = parse_editform(request, form) if pages: saved_templates = False for page, _ in pages.iteritems(): # Save the template if needed if not Page(request, page).exists() and template: msgs.append(save_template(request, page, template)) saved_templates = True # If new pages were changed we need to redo parsing # the form to know what we really need to edit if saved_templates: pages, newmsgs, files = parse_editform(request, form) for page, (oldMeta, newMeta) in pages.iteritems(): msgs.append('%s: ' % page + edit_meta(request, page, oldMeta, newMeta)) for page in files: for key in files[page]: name, content = files[page][key] t, s = add_attachment(request, page, name, content) else: msgs.append(request.getText('No pages changed')) msg = '' for line in msgs: msg += line + request.formatter.linebreak(0) request.reset() backto = form.get('backto', [None])[0] if backto: page = Page(request, backto) request.http_redirect(page.url(request)) else: page = Page(request, pagename) request.theme.add_msg(msg) request.page = page page.send_page() elif form.has_key('args'): enter_page(request, pagename, 'Metatable editor') formatter = request.page.formatter request.write(formatter.heading(1, 2)) request.write(formatter.text(_("Edit metatable"))) request.write(formatter.heading(0, 2)) args = ', '.join(form['args']) show_editform(wr, request, pagename, args) exit_page(request, pagename) else: enter_page(request, pagename, 'Metatable editor') formatter = request.page.formatter request.write(formatter.heading(1, 2)) request.write(formatter.text(_("Edit current page"))) request.write(formatter.heading(0, 2)) show_editform(wr, request, pagename, pagename) request.write(formatter.heading(1, 2)) request.write(formatter.text(_("Edit metatable"))) request.write(formatter.heading(0, 2)) show_queryform(wr, request, pagename) exit_page(request, pagename) return
def execute(xmlrpcobj, cleared, discarded, added): request = xmlrpcobj.request return set_metas(request, cleared, discarded, added)
if not bookkeepingPage.exists(): if cfg["acls"]: acls = cfg["acls"] % username else: acls = "" if ownPutPage(request, pagename, acls + cfg["bookkeeping_page_template"]) is False: return xmlrpclib.Fault(1, "User is not allowed to edit bookkeeping page") cleared = dict() metas = {target: ["%s %s" % (timeToString(issued), timeToString(expires))], "gwikicategory": ["CategoryBookkeeping"]} if version: metas["Version"] = [version] cleared[pagename] = ["Version"] result = set_metas(request, cleared, dict(), {pagename: metas}) if isinstance(result, xmlrpclib.Fault): return xmlrpclib.Fault(1, "Failed to edit bookkeeping page: " + repr(result)) return None def countUsage(request, page, key): metas = get_metas(request, page, [key], checkAccess=False) spans = Spanner() values = metas[key] for value in values: value = value.strip().split() if len(value) != 2: continue
def execute(pagename, request): _ = request.getText def wr(fmt, *args): request.write(form_writer(fmt, *args)) # This action generates data using the user language request.setContentLanguage(request.lang) form = values_to_form(request.values) if form.has_key('cancel'): request.reset() backto = form.get('backto', [None])[0] request.theme.add_msg(_('Edit was cancelled.'), "error") if backto: page = Page(request, backto) request.http_redirect(page.url(request)) request.page = page request.page.send_page() elif form.has_key('save') or form.has_key('saveform'): if request.environ['REQUEST_METHOD'] != 'POST': request.page.send_page() return template = form.get('template', [None])[0] # MetaFormEdit is much closer to set_meta in function if form.has_key('saveform'): added, cleared = {pagename: dict()}, {pagename: list()} # Pre-create page if it does not exist, using the template specified if template: added[pagename]['gwikitemplate'] = template # Ignore form clutter ignore = set() files = dict() for key in request.files: ignore.add(key) _file = request.files.get(key) filename = _file.filename fileobj = _file.stream # if type(fileobj) != file: # continue banana = key.split(SEPARATOR) keys = files.setdefault(banana[0], dict()) values = keys.setdefault(banana[1], list()) values.append((filename, fileobj)) keys = list() for key in form: if key not in ignore and SEPARATOR in key: keys.append(key.split(SEPARATOR)[1]) # keys = [x.split(SEPARATOR)[1] for x in form if SEPARATOR in x] for key in keys: cleared[pagename].append(key) vals = [ x.strip() for x in form[pagename + SEPARATOR + key] if x.strip() ] if vals: added[pagename].setdefault(key, list()).extend(vals) msgs = list() # Add attachments for pname in files: for key in files[pname]: for value in files[pname][key]: name = value[0] try: t, s = add_attachment(request, pname, name, value[1]) added.setdefault(pname, dict()).setdefault( key, list()).append("[[attachment:%s]]" % name) except AttachmentAlreadyExists: msgs = ["Attachment '%s' already exists." % name] _, msgss = set_metas(request, cleared, dict(), added) msgs.extend(msgss) else: # MetaEdit pages, msgs, files = parse_editform(request, form) if pages: saved_templates = False for page, _ in pages.iteritems(): # Save the template if needed if not Page(request, page).exists() and template: msgs.append(save_template(request, page, template)) saved_templates = True # If new pages were changed we need to redo parsing # the form to know what we really need to edit if saved_templates: pages, newmsgs, files = parse_editform(request, form) for page, (oldMeta, newMeta) in pages.iteritems(): msgs.append('%s: ' % page + edit_meta(request, page, oldMeta, newMeta)) for page in files: for key in files[page]: name, content = files[page][key] t, s = add_attachment(request, page, name, content) else: msgs.append(request.getText('No pages changed')) msg = '' for line in msgs: msg += line + request.formatter.linebreak(0) request.reset() backto = form.get('backto', [None])[0] if backto: page = Page(request, backto) request.http_redirect(page.url(request)) else: page = Page(request, pagename) request.theme.add_msg(msg) request.page = page page.send_page() elif form.has_key('args'): enter_page(request, pagename, 'Metatable editor') formatter = request.page.formatter request.write(formatter.heading(1, 2)) request.write(formatter.text(_("Edit metatable"))) request.write(formatter.heading(0, 2)) args = ', '.join(form['args']) show_editform(wr, request, pagename, args) exit_page(request, pagename) else: enter_page(request, pagename, 'Metatable editor') formatter = request.page.formatter request.write(formatter.heading(1, 2)) request.write(formatter.text(_("Edit current page"))) request.write(formatter.heading(0, 2)) show_editform(wr, request, pagename, pagename) request.write(formatter.heading(1, 2)) request.write(formatter.text(_("Edit metatable"))) request.write(formatter.heading(0, 2)) show_queryform(wr, request, pagename) exit_page(request, pagename) return