Ejemplo n.º 1
0
    def route_save(self, path):
        cfg = get_project_config()
        data_file = get_data(cfg, path[1])
        if not data_file:
            return self.render_error(404)

        fn, data = data_file
        form_data = self.parse_form()
        reqs = get_video_requirements()

        for req in reqs:
            key = req['name']
            if key in form_data:
                value = None
                if req['type'] == 'IntegerField':
                    value = int(form_data[key].value)
                elif req['type'] == 'BooleanField':
                    value = bool(int(form_data[key].value))
                elif req['type'] in ('DateField', 'DateTimeField'):
                    # TODO: Verify the data format
                    value = form_data[key].value
                elif req['type'] in ('CharField', 'TextField'):
                    value = form_data[key].value.replace('\r\n', '\n')
                elif req['type'] == 'SlugField':
                    # TODO: Verify the data format. Maybe if there is
                    # no slug field, we create it from the title?
                    value = form_data[key].value
                elif req['type'] == 'TextArrayField':
                    # Split the field on carriage returns and drop any
                    # empty strings.
                    value = form_data[key].value
                    value = [
                        mem.strip() for mem in value.split('\n')
                        if mem.strip()
                    ]
                elif req['type'] in ('URLField'):
                    value = form_data[key].value
                else:
                    raise NotImplementedError

                data[key] = value
            else:
                if req['type'] in ('CharField', 'TextField'):
                    data[key] = ''
                elif req['type'] == 'TextArrayField':
                    data[key] = []

                # TODO: What to do about other fields? Set to default?

        # Category is a special case. If it's empty, we should remove
        # it so verify works well.
        if 'category' in data and not data['category'].strip():
            del data['category']

        save_json_file(cfg, fn, data)

        return self.redirect('/edit/{0}'.format(fn))
Ejemplo n.º 2
0
    def route_save(self, path):
        cfg = get_project_config()
        data_file = get_data(cfg, path[1])
        if not data_file:
            return self.render_error(404)

        fn, data = data_file
        form_data = self.parse_form()
        reqs = get_video_requirements()

        for req in reqs:
            key = req['name']
            if key in form_data:
                value = None
                if req['type'] == 'IntegerField':
                    value = int(form_data[key].value)
                elif req['type'] == 'BooleanField':
                    value = bool(int(form_data[key].value))
                elif req['type'] in ('DateField', 'DateTimeField'):
                    # TODO: Verify the data format
                    value = form_data[key].value
                elif req['type'] in ('CharField', 'TextField'):
                    value = form_data[key].value.replace('\r\n', '\n')
                elif req['type'] == 'SlugField':
                    # TODO: Verify the data format. Maybe if there is
                    # no slug field, we create it from the title?
                    value = form_data[key].value
                elif req['type'] == 'TextArrayField':
                    # Split the field on carriage returns and drop any
                    # empty strings.
                    value = form_data[key].value
                    value = [mem.strip() for mem in value.split('\n')
                             if mem.strip()]
                elif req['type'] in ('URLField'):
                    value = form_data[key].value
                else:
                    raise NotImplementedError

                data[key] = value
            else:
                if req['type'] in ('CharField', 'TextField'):
                    data[key] = ''
                elif req['type'] == 'TextArrayField':
                    data[key] = []

                # TODO: What to do about other fields? Set to default?

        # Category is a special case. If it's empty, we should remove
        # it so verify works well.
        if 'category' in data and not data['category'].strip():
            del data['category']

        save_json_file(cfg, fn, data)

        return self.redirect('/edit/{0}'.format(fn))
Ejemplo n.º 3
0
    def route_edit(self, path):
        cfg = get_project_config()
        data_file = get_data(cfg, path[1])
        if not data_file:
            return self.render_error(404)

        fn, data = data_file
        reqs = get_video_requirements()

        # TODO: verify the data and add the errors to the fields?

        all_files = [filename for filename, _ in load_json_files(cfg)]
        fn_index = all_files.index(fn)
        prev_fn = all_files[fn_index - 1] if fn_index > 0 else ''
        next_fn = (all_files[fn_index + 1] if fn_index < len(all_files) - 1
                   else '')

        fields = []

        category = cfg.get('project', 'category')

        for req in reqs:
            key = req['name']
            if key == 'category' and category:
                fields.append(
                    {
                        'name': req['name'],
                        'value': category
                    })
            else:
                fields.append(
                    {
                        'name': req['name'],
                        'type': req['type'],
                        'choices': req['choices'],
                        'md': req['md'],
                        'value': data.get(key, '')
                    })

        self.render_response(
            200, 'edit.html', {
                'title': u'edit {0}'.format(data['title']),
                'fn': fn,
                'fields': fields,
                'prev_fn': prev_fn,
                'next_fn': next_fn
            })
Ejemplo n.º 4
0
    def route_save(self, path):
        cfg = get_project_config()
        data_file = get_data(cfg, path[1])
        if not data_file:
            return self.render_error(404)

        fn, data = data_file
        form_data = self.parse_form()
        reqs = get_video_requirements()

        for req in reqs:
            key = req['name']
            if key in form_data:
                value = None
                if req['type'] == 'IntegerField':
                    value = int(form_data[key].value)
                elif req['type'] == 'BooleanField':
                    value = bool(int(form_data[key].value))
                elif req['type'] in ('DateField', 'DateTimeField'):
                    # TODO: Verify the data format
                    value = form_data[key].value
                elif req['type'] in ('CharField', 'TextField'):
                    value = form_data[key].value
                elif req['type'] == 'SlugField':
                    # TODO: Verify the data format. Maybe if there is
                    # no slug field, we create it from the title?
                    value = form_data[key].value
                elif req['type'] in ('TextArrayField'):
                    # Split the field on carriage returns and drop any
                    # empty strings.
                    value = [
                        mem.strip() for mem in form_data[key].value.split('\n')
                        if mem.strip()
                    ]

                data[key] = value
            else:
                if req['type'] in ('CharField', 'TextField'):
                    data[key] = ''

                # TODO: What to do about other fields? Set to default?

        save_json_file(cfg, fn, data)

        return self.redirect('/edit/{0}'.format(fn[5:]))
Ejemplo n.º 5
0
    def route_save(self, path):
        cfg = get_project_config()
        data_file = get_data(cfg, path[1])
        if not data_file:
            return self.render_error(404)

        fn, data = data_file
        form_data = self.parse_form()
        reqs = get_video_requirements()

        for req in reqs:
            key = req['name']
            if key in form_data:
                value = None
                if req['type'] == 'IntegerField':
                    value = int(form_data[key].value)
                elif req['type'] == 'BooleanField':
                    value = bool(int(form_data[key].value))
                elif req['type'] in ('DateField', 'DateTimeField'):
                    # TODO: Verify the data format
                    value = form_data[key].value
                elif req['type'] in ('CharField', 'TextField'):
                    value = form_data[key].value
                elif req['type'] == 'SlugField':
                    # TODO: Verify the data format. Maybe if there is
                    # no slug field, we create it from the title?
                    value = form_data[key].value
                elif req['type'] in ('TextArrayField'):
                    # Split the field on carriage returns and drop any
                    # empty strings.
                    value = [mem.strip()
                             for mem in form_data[key].value.split('\n')
                             if mem.strip()]

                data[key] = value
            else:
                if req['type'] in ('CharField', 'TextField'):
                    data[key] = ''

                # TODO: What to do about other fields? Set to default?

        save_json_file(cfg, fn, data)

        return self.redirect('/edit/{0}'.format(fn[5:]))
Ejemplo n.º 6
0
    def route_edit(self, path):
        cfg = get_project_config()
        data_file = get_data(cfg, path[1])
        if not data_file:
            return self.render_error(404)

        fn, data = data_file
        reqs = get_video_requirements()

        # TODO: verify the data and add the errors to the fields?

        all_files = [filename for filename, _ in load_json_files(cfg)]
        fn_index = all_files.index(fn)
        prev_fn = all_files[fn_index - 1] if fn_index > 0 else ''
        next_fn = (all_files[fn_index +
                             1] if fn_index < len(all_files) - 1 else '')

        fields = []

        category = cfg.get('project', 'category')

        for req in reqs:
            key = req['name']
            if key == 'category' and category:
                fields.append({'name': req['name'], 'value': category})
            else:
                fields.append({
                    'name': req['name'],
                    'type': req['type'],
                    'choices': req['choices'],
                    'md': req['md'],
                    'value': data.get(key, '')
                })

        self.render_response(
            200, 'edit.html', {
                'title': u'edit {0}'.format(data['title']),
                'fn': fn,
                'fields': fields,
                'prev_fn': prev_fn,
                'next_fn': next_fn
            })