Exemple #1
0
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
Exemple #2
0
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."
Exemple #3
0
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 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, ""
Exemple #6
0
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."
Exemple #8
0
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
Exemple #10
0
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
Exemple #12
0
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