datapackage/package.py
def _extract_zip_if_possible(descriptor):
    """If descriptor is a path to zip file extract and return (tempdir, descriptor)
    """
    tempdir = None
    result = descriptor
    try:
        if isinstance(descriptor, six.string_types):
            res = requests.get(descriptor)
            res.raise_for_status()
            result = res.content
    except (IOError,
            ValueError,
            requests.exceptions.RequestException):
        pass
    try:
        the_zip = result
        if isinstance(the_zip, bytes):
            try:
                os.path.isfile(the_zip)
            except (TypeError, ValueError):
                # the_zip contains the zip file contents
                the_zip = io.BytesIO(the_zip)
        if zipfile.is_zipfile(the_zip):
            with zipfile.ZipFile(the_zip, 'r') as z:
                _validate_zip(z)
                descriptor_path = [
                    f for f in z.namelist() if f.endswith('datapackage.json')][0]
                tempdir = tempfile.mkdtemp('-datapackage')
                z.extractall(tempdir)
                result = os.path.join(tempdir, descriptor_path)
        else:
            result = descriptor
    except (TypeError,
            zipfile.BadZipfile):
        pass
    if hasattr(descriptor, 'seek'):
        # Rewind descriptor if it's a file, as we read it for testing if it's
        # a zip file
        descriptor.seek(0)
    return (tempdir, result)
def _extract_zip_if_possible(descriptor):
    """If descriptor is a path to zip file extract and return (tempdir, descriptor)
    """
    tempdir = None
    result = descriptor
    try:
        if isinstance(descriptor, six.string_types):
            res = requests.get(descriptor)
            res.raise_for_status()
            result = res.content
    except (IOError,
            ValueError,
            requests.exceptions.RequestException):
        pass
    try:
        the_zip = result
        if isinstance(the_zip, bytes):
            try:
                os.path.isfile(the_zip)
            except (TypeError, ValueError):
                # the_zip contains the zip file contents
                the_zip = io.BytesIO(the_zip)
        if zipfile.is_zipfile(the_zip):
            with zipfile.ZipFile(the_zip, 'r') as z:
                _validate_zip(z)
                descriptor_path = [
                    f for f in z.namelist() if f.endswith('datapackage.json')][0]
                tempdir = tempfile.mkdtemp('-datapackage')
                z.extractall(tempdir)
                result = os.path.join(tempdir, descriptor_path)
        else:
            result = descriptor
    except (TypeError,
            zipfile.BadZipfile):
        pass
    if hasattr(descriptor, 'seek'):
        # Rewind descriptor if it's a file, as we read it for testing if it's
        # a zip file
        descriptor.seek(0)
    return (tempdir, result)
def _extract_zip_if_possible ( descriptor ) : tempdir = None result = descriptor try : if isinstance ( descriptor , six . string_types ) : res = requests . get ( descriptor ) res . raise_for_status ( ) result = res . content except ( IOError , ValueError , requests . exceptions . RequestException ) : pass try : the_zip = result if isinstance ( the_zip , bytes ) : try : os . path . isfile ( the_zip ) except ( TypeError , ValueError ) : # the_zip contains the zip file contents the_zip = io . BytesIO ( the_zip ) if zipfile . is_zipfile ( the_zip ) : with zipfile . ZipFile ( the_zip , 'r' ) as z : _validate_zip ( z ) descriptor_path = [ f for f in z . namelist ( ) if f . endswith ( 'datapackage.json' ) ] [ 0 ] tempdir = tempfile . mkdtemp ( '-datapackage' ) z . extractall ( tempdir ) result = os . path . join ( tempdir , descriptor_path ) else : result = descriptor except ( TypeError , zipfile . BadZipfile ) : pass if hasattr ( descriptor , 'seek' ) : # Rewind descriptor if it's a file, as we read it for testing if it's # a zip file descriptor . seek ( 0 ) return ( tempdir , result )
If descriptor is a path to zip file extract and return (tempdir, descriptor)
If descriptor is a path to zip file extract and return ( tempdir descriptor )