def resource_format_autocomplete(self): '''Return list of resource formats whose names contain a string Note: Maybe, should be changed to match only at the beginning? ''' q = request.params.get('incomplete', '') q = str(q).lower() limit = request.params.get('limit', 12) context = {'model': model, 'session': model.Session} data_dict = {'q': q, 'limit': limit} toolkit.check_access('site_read', context, data_dict) # The result will be calculated as the merge of matches from 2 sources: # * a static list of application-domain formats supplied at configuration time # * a dynamic list of formats supplied for other resources: that's what CKAN's # action `format_autocomplete` already does. results = [] r1 = logic.get_action('format_autocomplete')(context, data_dict) results.extend(({'name': t, 'text': t.upper()} for t in r1)) limit -= len(results) r2 = ifilter(lambda t: (not t in r1) and (t.find(q) >= 0), resource_formats) r2 = islice(r2, 0, limit) results.extend(({'name': t, 'text': t.upper()} for t in r2)) result_set = {'ResultSet': {'Result': results}} response.headers['Content-Type'] = content_types['json'] return [to_json(result_set)]
def upload_file(self, object_type): name = request.params.get('name', '') # prefix upload_name = name + '-upload' if name else 'upload' upload = request.params.get(upload_name) if not isinstance(upload, cgi.FieldStorage): abort(400, 'Expected a file upload') result = None if object_type == 'resources': abort(400, 'Cannot handle uploading of resources here') elif object_type == 'source-metadata': up = uploader.MetadataUpload(upload.filename) up.update_data_dict(dict(request.params), upload_name) up.upload(max_size=1) link = toolkit.url_for( controller='ckanext.publicamundi.controllers.files:Controller', action='download_file', object_type=up.object_type, name_or_id=up.filename, filename=upload.filename) size = os.stat(u.filepath).st_size result = dict(name=u.filename, url=link, size=size) else: abort(404, 'Unknown object-type') response.headers['Content-Type'] = 'application/json' return [to_json(result)]
def get_field_markup_with_helper(self, id): x = getattr(fixtures, id) if request.method == 'POST': response.headers['Content-Type'] = 'application/json' out = {tuple(k.split('.')): v for k, v in request.params.items()} out = unflatten(out) return to_json(out) else: params = dict(request.params) k = params.pop('field', 'title') field = x.get_field(k) action = params.pop('action', 'edit') prefix = params.pop('prefix', id) extra_vars = copy.deepcopy(params) extra_vars.update({ 'helper': True, 'field': field, 'action': str(action), 'name_prefix': str(prefix), }) return render('tests/field.html', extra_vars=extra_vars)
def get_field_markup_with_helper(self, id): x = getattr(fixtures, id) if request.method == 'POST': response.headers['Content-Type'] = 'application/json' out = { tuple(k.split('.')): v for k, v in request.params.items() } out = unflatten(out) return to_json(out) else: params = dict(request.params) k = params.pop('field', 'title') field = x.get_field(k) action = params.pop('action', 'edit') prefix = params.pop('prefix', id) extra_vars = copy.deepcopy(params) extra_vars.update({ 'helper': True, 'field': field, 'action': str(action), 'name_prefix': str(prefix), }) return render('tests/field.html', extra_vars=extra_vars)
def mock_handle_upload(self): '''Mocks a upload handler. Returns a JSON dict that describes a successfully uploaded file. ''' field_name = request.params.get('name') upload = request.params.get(field_name + '-upload') if field_name else 'upload' if not isinstance(upload, FieldStorage): abort(400, 'Expected a file upload') name = datetime.datetime.now().strftime('%s') + '-' + upload.filename l = toolkit.url_for( controller='ckanext.publicamundi.controllers.files:Controller', action='download_file', object_type='baz', name_or_id=name, filename=upload.filename) n = random.randint(1000, 9999) result = dict(name=name, url=l, size=n) response.headers['Content-Type'] = content_types['json'] return [to_json(result)]
def resource_format_autocomplete(self): '''Return list of resource formats whose names contain a string Note: Maybe, should be changed to match only at the beginning? ''' q = request.params.get('incomplete', '') q = str(q).lower() limit = request.params.get('limit', 12) context = { 'model': model, 'session': model.Session } data_dict = { 'q': q, 'limit': limit } toolkit.check_access('site_read', context, data_dict) # The result will be calculated as the merge of matches from 2 sources: # * a static list of application-domain formats supplied at configuration time # * a dynamic list of formats supplied for other resources: that's what CKAN's # action `format_autocomplete` already does. results = [] r1 = logic.get_action('format_autocomplete')(context, data_dict) results.extend(({ 'name': t, 'text': t.upper() } for t in r1)) limit -= len(results) r2 = ifilter(lambda t: (not t in r1) and (t.find(q) >= 0), resource_formats) r2 = islice(r2, 0, limit) results.extend(({ 'name': t, 'text': t.upper() } for t in r2)) result_set = { 'ResultSet': { 'Result': results } } response.headers['Content-Type'] = content_types['json'] return [to_json(result_set)]
def vocabulary_get(self, name): name = str(name) r = None vocab = vocabularies.by_name(name) if vocab: r = { 'date_type': vocab.get('date_type'), 'reference_date': vocab.get('reference_date'), 'title': vocab.get('title'), 'name': vocab.get('name'), 'terms': [{'token': t.token, 'value': t.value, 'title': t.title} for t in vocab['vocabulary']], } response.headers['Content-Type'] = content_types['json'] return [to_json(r)]
def vocabulary_get(self, name): name = str(name) r = None vocab = vocabularies.get_by_name(name) if vocab: terms = vocab['vocabulary'].by_value r = { 'date_type': vocab.get('date_type'), 'reference_date': vocab.get('reference_date'), 'title': vocab.get('title'), 'name': vocab.get('name'), 'terms': [{ 'value': k, 'title': terms[k].title } for k in terms], } response.headers['Content-Type'] = content_types['json'] return [to_json(r)]
def resource_mimetype_autocomplete(self): '''Return list of mime types whose names contain a string ''' q = request.params.get('incomplete', '') q = str(q).lower() limit = request.params.get('limit', 12) context = self._make_context() data_dict = {'q': q, 'limit': limit} # Invoke the action we have registered via IActions r = logic.get_action('mimetype_autocomplete')(context, data_dict) result_set = {'ResultSet': {'Result': [{'name': t} for t in r]}} response.headers['Content-Type'] = content_types['json'] return [to_json(result_set)]
def edit_foo(self, id='foo1'): '''Grab a Foo fixture and present an edit form ''' obj = getattr(fixtures, id) assert isinstance(obj, types.FooMetadata) errors = obj.validate(dictize_errors=True) # Examine POSTed data if request.method == 'POST': # Parse request, filter-out empty values d = dict(filter(lambda t: t[1], request.params.items())) # Create a factory for this factory = Object.Factory(schemata.IFooMetadata, opts={ 'unserialize-keys': True, 'unserialize-values': True, }) obj = factory(d, is_flat=True) errors = obj.validate() if not errors: # Output a JSON dump of a valid object response.headers['Content-Type'] = 'application/json' out = {'status': 'success', 'obj': obj.to_dict()} return to_json(out) else: # Prepare error dict for display errors = obj.dictize_errors(errors) #response.headers['Content-Type'] = 'application/json' #out = { 'status': 'failure', 'errors': errors, 'obj': obj.to_dict() } #return to_json(out) # Display form c.form_class = 'form-horizontal' c.form_errors = errors c.form_markup = markup_for_object('edit:datasetform', obj, errors=errors, name_prefix='', data={'title': u'Foo %s' % (id)}) return render('tests/form.html')
def get_field_markup(self, id): x = getattr(fixtures, id) if request.method == 'POST': response.headers['Content-Type'] = 'application/json' out = { tuple(k.split('.')): v for k, v in request.params.items() } out = unflatten(out) return to_json(out) else: params = dict(request.params) k = params.pop('field', 'title') action = params.pop('action', 'edit') prefix = params.pop('prefix', id) field = x.get_field(k) field_markup = markup_for_field(str(action), field, name_prefix=str(prefix), errors=None, data=params) return render('tests/field.html', extra_vars={ 'field_markup': field_markup })
def edit_foo(self, id='foo1'): '''Grab a Foo fixture and present an edit form ''' obj = getattr(fixtures, id) assert isinstance(obj, types.FooMetadata) errors = obj.validate(dictize_errors=True) # Examine POSTed data if request.method == 'POST': # Parse request, filter-out empty values d = dict(filter(lambda t: t[1], request.params.items())) # Create a factory for this factory = Object.Factory(schemata.IFooMetadata, opts={ 'unserialize-keys': True, 'unserialize-values': True, }) obj = factory(d, is_flat=True) errors = obj.validate() if not errors: # Output a JSON dump of a valid object response.headers['Content-Type'] = 'application/json' out = { 'status': 'success', 'obj': obj.to_dict() } return to_json(out) else: # Prepare error dict for display errors = obj.dictize_errors(errors) #response.headers['Content-Type'] = 'application/json' #out = { 'status': 'failure', 'errors': errors, 'obj': obj.to_dict() } #return to_json(out) # Display form c.form_class = 'form-horizontal' c.form_errors = errors c.form_markup = markup_for_object('edit:datasetform', obj, errors = errors, name_prefix = '', data = { 'title': u'Foo %s' % (id) } ) return render('tests/form.html')
def resource_mimetype_autocomplete(self): '''Return list of mime types whose names contain a string ''' q = request.params.get('incomplete', '') q = str(q).lower() limit = request.params.get('limit', 12) context = self._make_context() data_dict = { 'q': q, 'limit': limit } # Invoke the action we have registered via IActions r = logic.get_action('mimetype_autocomplete')(context, data_dict) result_set = { 'ResultSet': { 'Result': [{'name': t } for t in r] } } response.headers['Content-Type'] = content_types['json'] return [to_json(result_set)]
def report_params(self): result = {} for k, f in request.params.items(): if isinstance(f, FieldStorage) and hasattr(f, 'file'): fp, mimetype, filename, name = f.file, f.type, f.filename, f.name # Compute size fp.seek(0, 2) # move fp to the end size = fp.tell() fp.seek(0, 0) # reset fp # Report result[k] = { 'name': name, 'filename': filename, 'mimetype': mimetype, 'size': size, 'sample': fp.read(128).decode('utf-8') \ if mimetype.startswith('text/') else '<binary-data>' } else: result[k] = f response.headers['Content-Type'] = content_types['json'] return [to_json(result)]
def get_field_markup(self, id): x = getattr(fixtures, id) if request.method == 'POST': response.headers['Content-Type'] = 'application/json' out = {tuple(k.split('.')): v for k, v in request.params.items()} out = unflatten(out) return to_json(out) else: params = dict(request.params) k = params.pop('field', 'title') action = params.pop('action', 'edit') prefix = params.pop('prefix', id) field = x.get_field(k) field_markup = markup_for_field(str(action), field, name_prefix=str(prefix), errors=None, data=params) return render('tests/field.html', extra_vars={'field_markup': field_markup})
def mock_handle_upload(self): '''Mocks a upload handler. Returns a JSON dict that describes a successfully uploaded file. ''' field_name = request.params.get('name') upload = request.params.get(field_name + '-upload') if field_name else 'upload' if not isinstance(upload, FieldStorage): abort(400, 'Expected a file upload') name = datetime.datetime.now().strftime('%s') + '-' + upload.filename l = toolkit.url_for( controller = 'ckanext.publicamundi.controllers.files:Controller', action = 'download_file', object_type = 'baz', name_or_id = name, filename = upload.filename) n = random.randint(1000, 9999) result = dict(name=name, url=l, size=n) response.headers['Content-Type'] = content_types['json'] return [to_json(result)]