예제 #1
0
def info(package_spec_or_obj):
    """Retrieve information about a :py:class:`Package <dpm.index.package.Package>`

    :param package_spec_or_obj:
        - a string in the form of **<scheme>://<package name>**, where
            - **<scheme>** identifies the type of index to be used
            - **<package name>** identifies the name of the package.
            - Example: *ckan://iso-codes*
        - the :py:class:`Package <dpm.index.package.Package>` object
    :type package_spec: str or :py:class:`dpm.index.package.Package`

    :return:
        - (:py:class:`Metadata <dpm.metadata.Metadata>`, :py:class:`Manifest <dpm.package.Manifest>`) -- on success
        - None -- on un-success
    """
    if type(package_spec_or_obj) == str:
        index, path = index_from_spec(package_spec_or_obj)
        package = index.get(path)
    else: # assume package_spec_or_obj is of type Package, will check for it next
        package = package_spec_or_obj

    if not type(package) == dpm.package.Package:
        return None #TODO: raise an exception here?

    return (package.manifest, package.metadata)
예제 #2
0
def download(package_spec, destination_path):
    """Download a `Package <dpm.index.package.Package>` and the connected Resources

    :param package_spec:
        a string in the form of **<scheme>://<package name>**, where
            - **<scheme>** identifies the type of index to be used
            - **<package name>** identifies the name of the package.
            - Example: *ckan://iso-codes*
    :type spec_str: str

    :param destination_path:
        the directory in which to save the package
    :type destination_path: str

    :see:
        - :py:class:`dpm.download.PackageDownloader`
    """
    pkg_downloader = dpm.download.PackageDownloader(verbose=True)

    filterfunc = None

    index, path = index_from_spec(package_spec)
    package = index.get(path)

    os_destination_path = os.path.join(destination_path, package.name)
    pkg_downloader.download(package, os_destination_path, filterfunc)
예제 #3
0
 def run(self, options, args):
     spec_from = args[0]
     index, path = self.index_from_spec(spec_from)
     if len(args) > 1:
         spec_to = args[1]
         index_to, path_to = self.index_from_spec(spec_to)
     else:
         index_to = dpm.index.get_default_index()
     pkg = index.get(path)
     index_to.update(pkg)
예제 #4
0
 def run(self, options, args):
     logger.debug('RegisterCommand: %s (options: %s)' % (args, options))
     spec_from = args[0]
     index, path = self.index_from_spec(spec_from)
     if len(args) == 2:
         spec_to = args[1]
         index_to, path_to = self.index_from_spec(spec_to, all_index=True)
     else:
         logger.debug('RegisterCommand: Loading default index')
         index_to = dpm.index.get_default_index()
     pkg = index.get(path)
     index_to.register(pkg)
예제 #5
0
def load(package_path):
    '''Load a :py:class:`Package <dpm.package.Package>` stored at path

    :param package_path: The local Package path, e.g. /home/user/packages/iso-codes
    :type package_path: str

    :return: :py:class:`Package <dpm.package.Package>` -- The corresponding Package object
    '''
    #TODO: when this issue (https://github.com/okfn/dpm/issues/28) closes, update this function
    spec_str = "file://" + package_path
    spec = dpm.spec.Spec.parse_spec(spec_str)
    index, path = spec.index_from_spec()
    package = index.get(path)
    return package