def download_zip(self, zip_id): if not zip_id: abort(404, toolkit._('Resource data not found')) file_name, package_name = zip_id.split('::') file_path = get_storage_path_for('temp-datagovmk/' + file_name) if not os.path.isfile(file_path): abort(404, toolkit._('Resource data not found')) if not package_name: package_name = 'resources' package_name += '.zip' with open(file_path, 'r') as f: response.write(f.read()) response.headers['Content-Type'] = 'application/octet-stream' response.content_disposition = 'attachment; filename=' + package_name os.remove(file_path)
def _export_package_to_csv(package_dict, request, response): result = {} for key, value in package_dict.iteritems(): if isinstance(value, list): if not value: value = "" elif len(value) == 1: value = value[0] result[key] = value if result.get('organization'): result['organization'] = result['organization'].get( 'name') or result['organization']['id'] if result.get('tags'): tags = [] for tag in result['tags']: tags.append(tag.get('name') or tag['id']) result['tags'] = ','.join(tags) response.write(export_dict_to_csv(result))
def download_resources_metadata(self, package_id): """Download resources metadata in different formats as ZIP file. :param str package_id: the id of the package containing the resources. """ context = { 'model': model, 'session': model.Session, 'user': c.user, 'auth_user_obj': c.userobj } pkg_dict = get_action('package_show')(context, {'id': package_id}) resources = request.params.get('resources') if resources and resources.lower() != 'all': resources = [r.strip() for r in resources.split(',')] else: resources = None tmp_file_path = None try: with _open_temp_zipfile() as zipf: tmp_file_path = zipf.filename self._export_resources(zipf, pkg_dict, resources) except Exception as exc: log.error('Error while preparing zip archive: %s', exc) log.exception(exc) raise exc try: response.headers['Content-Type'] = 'application/octet-stream' zip_file_name = '%s_resources.zip' % pkg_dict['name'] response.content_disposition = 'attachment; filename=' + zip_file_name with open(tmp_file_path, 'r') as zipf: response.write(zipf.read()) finally: os.remove(tmp_file_path)
def xml_writer(response, fields, name=None, bom=False): u'''Context manager for writing UTF-8 XML data to response :param response: file-like or response-like object for writing data and headers (response-like objects only) :param fields: list of datastore fields :param name: file name (for headers, response-like objects only) :param bom: True to include a UTF-8 BOM at the start of the file ''' if hasattr(response, u'headers'): response.headers['Content-Type'] = (b'text/xml; charset=utf-8') if name: response.headers['Content-disposition'] = ( b'attachment; filename="{name}.xml"'.format( name=encode_rfc2231(name))) if bom: response.write(BOM_UTF8) response.write(b'<data>\n') yield XMLWriter(response, [f['id'] for f in fields]) response.write(b'</data>\n')
def _export_package_to_rdf(package_dict, request, response): response.write(export_package_to_rdf(package_dict, _format='xml'))
def _export_package_xml(package_dict, request, response): response.write(export_package_to_xml(package_dict))