Loading crossbow/crossbow.py +29 −18 Original line number Diff line number Diff line Loading @@ -50,8 +50,8 @@ class crossbowBase(object): return metadata def create_package(self,package,owner_org,title=None,description=None,author=None,author_email=None, maintainer=None,maintainer_email=None,version=None,tags=[]): def create_package(self,package,owner_org,title=None,description=None,author=None, author_email=None,maintainer=None,maintainer_email=None,version=None,tags=[]): ''' creates a new package (dataset) Loading Loading @@ -79,9 +79,9 @@ class crossbowBase(object): ''' if " " in package or any(x.isupper() for x in package): raise Exception('package must be lowercase and without spaces') self.ckan.action.package_create(name=package,owner_org=owner_org,title=title,author=author, author_email=author_email,maintainer=maintainer,maintainer_email=maintainer_email, notes=description,version=version,tags=tags) self.ckan.action.package_create(name=package,owner_org=owner_org,title=title, author=author,author_email=author_email,maintainer=maintainer, maintainer_email=maintainer_email,notes=description,version=version,tags=tags) def edit_package(self,package,*args,**kwargs): ''' Loading @@ -93,7 +93,8 @@ class crossbowBase(object): see create_package() function for additional parameters ''' #add args to kwargs dic keywords = ['owner_org','title','notes','author','author_email','maintainer','maintainer_email','version','tags'] keywords = ['owner_org','title','notes','author','author_email','maintainer',\ 'maintainer_email','version','tags'] for idx,arg in enumerate(args): kwargs[keywords[idx]] = arg Loading Loading @@ -138,7 +139,8 @@ class crossbowBase(object): names of available resources in package ''' metadata = self.ckan.action.package_show(id=package) resources = [resource['name'] for resource in metadata['resources'] if resource['url'][-4:]==".dcd"] resources = [resource['name'] for resource in metadata['resources'] \ if resource['url'][-4:]==".dcd"] return resources def list_non_dcd_resources(self,package): Loading @@ -153,7 +155,8 @@ class crossbowBase(object): names of available resources in package ''' metadata = self.ckan.action.package_show(id=package) resources = [resource['name'] for resource in metadata['resources'] if resource['url'][-4:]!=".dcd"] resources = [resource['name'] for resource in metadata['resources'] \ if resource['url'][-4:]!=".dcd"] return resources def get_resource_details(self,package,resource): Loading @@ -170,7 +173,8 @@ class crossbowBase(object): metadata for specific resource ''' pkg_metadata = self.ckan.action.package_show(id=package) rsc_metadata = [metadata for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] rsc_metadata = [metadata for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] print "package name: %s" % package print "resource name: %s" % resource print "resource description: %s" % rsc_metadata['description'] Loading Loading @@ -208,8 +212,8 @@ class crossbowMount(crossbowBase): - get_package_details(package) prints and returns details for a specific package - create_package(package,owner_org,title=None,description=None,author=None,author_email=None, maintainer=None,maintainer_email=None,version=None,tags=[]) - create_package(package,owner_org,title=None,description=None,author=None, author_email=None,maintainer=None,maintainer_email=None,version=None,tags=[]) creates a new package (dataset) - edit_package(package,*args,**kwargs) Loading Loading @@ -305,7 +309,8 @@ class crossbowMount(crossbowBase): #copy file to crossbow NFS prog = ProgressBar(widgets=[Percentage(), Bar()], maxval=100).start() self._copy_with_progress(resource_path, nfs_path, lambda pos, total: prog.update(100*pos/float(total))) self._copy_with_progress(resource_path, nfs_path, lambda pos, total: prog.update(100*pos/float(total))) print '' #add file to CKAN Loading @@ -328,7 +333,8 @@ class crossbowMount(crossbowBase): ''' #get current metadata pkg_metadata = self.ckan.action.package_show(id=package) rsc_metadata = [metadata for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] rsc_metadata = [metadata for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] #update metadata with new edits if new_name: Loading @@ -350,7 +356,8 @@ class crossbowMount(crossbowBase): NFS file URI path to resource (e.g. "/data/file.csv") ''' pkg_metadata = self.ckan.action.package_show(id=package) resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] resource_path = resource_path.replace("file://CROSSBOW_NFS/", self.NFS_path) return resource_path Loading @@ -367,13 +374,15 @@ class crossbowMount(crossbowBase): directory to copy resource into ''' pkg_metadata = self.ckan.action.package_show(id=package) resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] resource_path = resource_path.replace("file://CROSSBOW_NFS/", self.NFS_path) dest_path = destination + os.path.basename(resource_path) #copy file to local drive prog = ProgressBar(widgets=[Percentage(), Bar()], maxval=100).start() self._copy_with_progress(resource_path, dest_path, lambda pos, total: prog.update(100*pos/float(total))) self._copy_with_progress(resource_path, dest_path, lambda pos, total: prog.update(100*pos/float(total))) print '' def delete_resource(self,package,resource): Loading @@ -390,13 +399,15 @@ class crossbowMount(crossbowBase): if True, also delete the resource file from NFS ''' pkg_metadata = self.ckan.action.package_show(id=package) resource_id = [metadata['id'] for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] resource_id = [metadata['id'] for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] #delete from ckan self.ckan.action.resource_delete(id=resource_id) #delete from nfs resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] resource_path = resource_path.replace("file://CROSSBOW_NFS/", self.NFS_path) os.remove(resource_path) Loading Loading
crossbow/crossbow.py +29 −18 Original line number Diff line number Diff line Loading @@ -50,8 +50,8 @@ class crossbowBase(object): return metadata def create_package(self,package,owner_org,title=None,description=None,author=None,author_email=None, maintainer=None,maintainer_email=None,version=None,tags=[]): def create_package(self,package,owner_org,title=None,description=None,author=None, author_email=None,maintainer=None,maintainer_email=None,version=None,tags=[]): ''' creates a new package (dataset) Loading Loading @@ -79,9 +79,9 @@ class crossbowBase(object): ''' if " " in package or any(x.isupper() for x in package): raise Exception('package must be lowercase and without spaces') self.ckan.action.package_create(name=package,owner_org=owner_org,title=title,author=author, author_email=author_email,maintainer=maintainer,maintainer_email=maintainer_email, notes=description,version=version,tags=tags) self.ckan.action.package_create(name=package,owner_org=owner_org,title=title, author=author,author_email=author_email,maintainer=maintainer, maintainer_email=maintainer_email,notes=description,version=version,tags=tags) def edit_package(self,package,*args,**kwargs): ''' Loading @@ -93,7 +93,8 @@ class crossbowBase(object): see create_package() function for additional parameters ''' #add args to kwargs dic keywords = ['owner_org','title','notes','author','author_email','maintainer','maintainer_email','version','tags'] keywords = ['owner_org','title','notes','author','author_email','maintainer',\ 'maintainer_email','version','tags'] for idx,arg in enumerate(args): kwargs[keywords[idx]] = arg Loading Loading @@ -138,7 +139,8 @@ class crossbowBase(object): names of available resources in package ''' metadata = self.ckan.action.package_show(id=package) resources = [resource['name'] for resource in metadata['resources'] if resource['url'][-4:]==".dcd"] resources = [resource['name'] for resource in metadata['resources'] \ if resource['url'][-4:]==".dcd"] return resources def list_non_dcd_resources(self,package): Loading @@ -153,7 +155,8 @@ class crossbowBase(object): names of available resources in package ''' metadata = self.ckan.action.package_show(id=package) resources = [resource['name'] for resource in metadata['resources'] if resource['url'][-4:]!=".dcd"] resources = [resource['name'] for resource in metadata['resources'] \ if resource['url'][-4:]!=".dcd"] return resources def get_resource_details(self,package,resource): Loading @@ -170,7 +173,8 @@ class crossbowBase(object): metadata for specific resource ''' pkg_metadata = self.ckan.action.package_show(id=package) rsc_metadata = [metadata for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] rsc_metadata = [metadata for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] print "package name: %s" % package print "resource name: %s" % resource print "resource description: %s" % rsc_metadata['description'] Loading Loading @@ -208,8 +212,8 @@ class crossbowMount(crossbowBase): - get_package_details(package) prints and returns details for a specific package - create_package(package,owner_org,title=None,description=None,author=None,author_email=None, maintainer=None,maintainer_email=None,version=None,tags=[]) - create_package(package,owner_org,title=None,description=None,author=None, author_email=None,maintainer=None,maintainer_email=None,version=None,tags=[]) creates a new package (dataset) - edit_package(package,*args,**kwargs) Loading Loading @@ -305,7 +309,8 @@ class crossbowMount(crossbowBase): #copy file to crossbow NFS prog = ProgressBar(widgets=[Percentage(), Bar()], maxval=100).start() self._copy_with_progress(resource_path, nfs_path, lambda pos, total: prog.update(100*pos/float(total))) self._copy_with_progress(resource_path, nfs_path, lambda pos, total: prog.update(100*pos/float(total))) print '' #add file to CKAN Loading @@ -328,7 +333,8 @@ class crossbowMount(crossbowBase): ''' #get current metadata pkg_metadata = self.ckan.action.package_show(id=package) rsc_metadata = [metadata for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] rsc_metadata = [metadata for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] #update metadata with new edits if new_name: Loading @@ -350,7 +356,8 @@ class crossbowMount(crossbowBase): NFS file URI path to resource (e.g. "/data/file.csv") ''' pkg_metadata = self.ckan.action.package_show(id=package) resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] resource_path = resource_path.replace("file://CROSSBOW_NFS/", self.NFS_path) return resource_path Loading @@ -367,13 +374,15 @@ class crossbowMount(crossbowBase): directory to copy resource into ''' pkg_metadata = self.ckan.action.package_show(id=package) resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] resource_path = resource_path.replace("file://CROSSBOW_NFS/", self.NFS_path) dest_path = destination + os.path.basename(resource_path) #copy file to local drive prog = ProgressBar(widgets=[Percentage(), Bar()], maxval=100).start() self._copy_with_progress(resource_path, dest_path, lambda pos, total: prog.update(100*pos/float(total))) self._copy_with_progress(resource_path, dest_path, lambda pos, total: prog.update(100*pos/float(total))) print '' def delete_resource(self,package,resource): Loading @@ -390,13 +399,15 @@ class crossbowMount(crossbowBase): if True, also delete the resource file from NFS ''' pkg_metadata = self.ckan.action.package_show(id=package) resource_id = [metadata['id'] for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] resource_id = [metadata['id'] for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] #delete from ckan self.ckan.action.resource_delete(id=resource_id) #delete from nfs resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] if metadata['name']==resource][0] resource_path = [metadata['url'] for metadata in pkg_metadata['resources'] \ if metadata['name']==resource][0] resource_path = resource_path.replace("file://CROSSBOW_NFS/", self.NFS_path) os.remove(resource_path) Loading