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))
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))
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 })
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:]))
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:]))
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 })