File custom.patch of Package python-py2pack

diff --git a/py2pack/__init__.py b/py2pack/__init__.py
index 24079f9..bac8792 100644
--- a/py2pack/__init__.py
+++ b/py2pack/__init__.py
@@ -88,9 +88,17 @@ def fetch(args):
     if not url:
         print("unable to find a source release for {0}!".format(args.name))
         sys.exit(1)
+    if '.' not in url['filename']:
+        print('file {0} looks strange!  From {1}'.format(url['filename'], url['url']))
+        sys.exit(1)
+    file_exists = os.path.exists(url['filename'])
+    if file_exists:
+        print('{0} already exists'.format(url['filename']))
+        sys.exit(1)
     print('downloading package {0}-{1}...'.format(args.name, args.version))
     print('from {0}'.format(url['url']))
     urlretrieve(url['url'], url['filename'])
+    print('Created {0}'.format(url['filename']))
 
 
 def _canonicalize_setup_data(data):
@@ -152,7 +160,12 @@ def _augment_data_from_tarball(args, filename, data):
     docs_re = re.compile(r"{0}-{1}\/((?:AUTHOR|ChangeLog|CHANGES|NEWS|README).*)".format(args.name, args.version), re.IGNORECASE)
     license_re = re.compile(r"{0}-{1}\/((?:COPYING|LICENSE).*)".format(args.name, args.version), re.IGNORECASE)
 
-    data_archive = meta_utils.from_archive(filename)
+    try:
+        data_archive = meta_utils.from_archive(filename)
+    except Exception as e:
+        print('error {0}'.format(e))
+        return
+
     data.update(data_archive['data'])
 
     names = py2pack.utils._get_archive_filelist(filename)
@@ -216,6 +229,16 @@ def _get_source_url(pypi_name, filename):
         pypi_name[0], pypi_name, filename)
 
 
+def _find_local_archive(args):
+    tarball_file = glob.glob("{0}-{1}.*".format(args.name, args.version))
+    # also check tarball files with underscore. Some packages have a name with
+    # a - but the tarball name has a _ . Eg the package os-faults
+    tarball_file += glob.glob("{0}-{1}.*".format(args.name.replace('-', '_'),
+                                                 args.version))
+    if tarball_file:
+        return tarball_file[0]
+
+
 def generate(args):
     # TODO (toabctl): remove this is a later release
     if args.run:
@@ -227,6 +250,8 @@ def generate(args):
         args.template = file_template_list()[0]
     if not args.filename:
         args.filename = args.name + '.' + args.template.rsplit('.', 1)[1]   # take template file ending
+        if os.path.exists('.osc'):
+            args.filename = 'python-' + args.filename
     print('generating spec file for {0}...'.format(args.name))
     data = pypi.release_data(args.name, args.version)                       # fetch all meta data
     url = newest_download_url(args)
@@ -243,13 +268,15 @@ def generate(args):
     data['user_name'] = pwd.getpwuid(os.getuid())[4]                        # set system user (packager)
     data['summary_no_ending_dot'] = re.sub(r'(.*)\.', r'\g<1>', data.get('summary', ""))
 
-    tarball_file = glob.glob("{0}-{1}.*".format(args.name, args.version))
-    # also check tarball files with underscore. Some packages have a name with
-    # a - but the tarball name has a _ . Eg the package os-faults
-    tarball_file += glob.glob("{0}-{1}.*".format(args.name.replace('-', '_'),
-                                                 args.version))
-    if tarball_file:                                                        # get some more info from that
-        _augment_data_from_tarball(args, tarball_file[0], data)
+    tarball_file = _find_local_archive(args)
+    if not tarball_file:
+        fetch(args)
+        tarball_file = _find_local_archive(args)
+        if not tarball_file:
+            print('Cant find fetched file')
+            sys.exit(1)
+
+    _augment_data_from_tarball(args, tarball_file, data)
 
     _normalize_license(data)
 
@@ -279,10 +306,14 @@ def newest_download_url(args):
                 'filename': args.source_url[args.source_url.rfind("/") + 1:]}
     for url in pypi.release_urls(args.name, args.version):                  # Fetch all download URLs
         if url['packagetype'] == 'sdist':                                   # Found the source URL we care for
+            if url['url'] == 'UNKNOWN':
+                print('skipping UNKNOWN url from release urls of {0}'.format(args.name))
             return url
     # No PyPI tarball release, let's see if an upstream download URL is provided:
     data = pypi.release_data(args.name, args.version)                       # Fetch all meta data
     if 'download_url' in data and data['download_url']:
+        if data['download_url'] == 'UNKNOWN':
+            print('skipping UNKNOWN url from download urls of {0}'.format(args.name))
         filename = os.path.basename(data['download_url'])
         return {'url': data['download_url'], 'filename': filename}
     return {}                                                               # We're all out of bubblegum
@@ -295,12 +326,39 @@ def file_template_list():
     return template_files
 
 
+def update(args):
+    if not os.path.exists('.osc'):
+        sys.exit(1)
+    rpm_package = open('.osc/_package').read().strip()
+    if rpm_package.startswith('python-'):
+        pypi_package = rpm_package[len('python-'):]
+        args.name = pypi_package
+    elif rpm_package.startswith('python2-'):
+        print('Warning: stripping python2- prefix from {0}!'.format(rpm_package))
+        pypi_package = rpm_package[len('python2-'):]
+        args.name = pypi_package
+    elif rpm_package.startswith('python3-'):
+        print('Warning: stripping python3- prefix from {0}!'.format(rpm_package))
+        pypi_package = rpm_package[len('python3-'):]
+        args.name = pypi_package
+    else:
+        print('Warning: Unknown package {0} without python* prefix!'.format(rpm_package))
+        args.name = rpm_package
+    fetch(args)
+
+
 def main():
     parser = argparse.ArgumentParser(description=__doc__)
     parser.add_argument('--version', action='version', version='%(prog)s {0}'.format(py2pack_version.version))
     parser.add_argument('--proxy', help='HTTP proxy to use')
     subparsers = parser.add_subparsers(title='commands')
 
+    parser_update = subparsers.add_parser('update', help='update package')
+    parser_update.set_defaults(func=update)
+    parser_update.add_argument('name', nargs='?', help='package name')
+    parser_update.add_argument('version', nargs='?', help='package version (optional)')
+    parser_update.add_argument('--source-url', default=None, help='source url')
+
     parser_list = subparsers.add_parser('list', help='list all packages on PyPI')
     parser_list.set_defaults(func=list)
 
openSUSE Build Service is sponsored by