def list_concepts(environ, start_response): concepts = STORE.retrieve('concepts') content_type = environ['wsgi.accepted_type'] response_headers = [('Content-Type', content_type)] start_response(HTTP['200'], response_headers) return _serializer(content_type).list_concepts(concepts)
def list_labels(environ, start_response): labels = [] # XXX: inefficient; laziness (i.e. a generator) would be preferable here for concept in STORE.retrieve('concepts', None, { 'labels': 1 }): labels.extend(concept.pref_labels + concept.alt_labels) # TODO: eliminate duplicates content_type = environ['wsgi.accepted_type'] response_headers = [('Content-Type', content_type)] start_response(HTTP['200'], response_headers) return _serializer(content_type).list_labels(labels)
def get_concept(environ, start_response): _id = environ['wsgiorg.routing_args'][1]['id'] concepts = STORE.retrieve('concepts', { '_id': ObjectId(_id) }) concept = list(concepts)[0] # XXX: not particularly elegant if not concept: raise HTTP404('no such concept') content_type = environ['wsgi.accepted_type'] response_headers = [('Content-Type', content_type)] start_response(HTTP['200'], response_headers) return _serializer(content_type).show_concept(concept)
def post_creator(environ, start_response): content_type = environ.get('CONTENT_TYPE', '') if not content_type == 'application/x-www-form-urlencoded': # XXX: TiddlyWeb uses startswith here!? raise HTTP415 # TODO: this might be encapsulated in middleware (cf. tiddlyweb.web.query) content_length = int(environ['CONTENT_LENGTH'] or 0) content = environ['wsgi.input'].read(content_length) data = parse_qs(content, keep_blank_values=True) concept = Concept() # TODO: label language (input/selection currently missing from HTML template) for label_type in ['pref', 'alt']: key = '%s_labels' % label_type for name in data[key]: if name: label = Label(name, lang=None) getattr(concept, key).append(label) _id = STORE.add(concept) response_headers = [('Location', '/concepts/%s' % concept._id)] start_response(HTTP['302'], response_headers) return ['']