Your message dated Wed, 17 Apr 2019 04:49:00 +0000
with message-id <[email protected]>
and subject line Re: Bug#927183: [pre-approval] unblock: 
debiancontributors/0.7.8-1
has caused the Debian Bug report #927183,
regarding [pre-approval] unblock: debiancontributors/0.7.8-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
927183: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=927183
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: [email protected]
Usertags: unblock

Hello!

This is a pre-approval to unblock package debiancontributors 0.7.8-1

debiancontributors is a package used internally by our infra team and this
upload would fix some simple but important bugs, in particular:

https://salsa.debian.org/python-team/modules/python-debiancontributors/commit/51adfafa4ee8cb58fc4d651ec99b6f46a83f02d5

https://salsa.debian.org/python-team/modules/python-debiancontributors/commit/b41908ea65e6a550438f90339c29ea2a3feda718

The first one (workaround for #801506) is the most important one:
python-requests can't support (for now) 100-Continue response.

The debdiff against the package in testing is attached. Thanks for considering
this pre-approval.

unblock debiancontributors/0.7.8-1

-- System Information:
Debian Release: buster/sid
  APT prefers testing
  APT policy: (900, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 4.19.0-4-amd64 (SMP w/4 CPU cores)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL
set to en_US.UTF-8), LANGUAGE=en_US:en (charmap=UTF-8) (ignored: LC_ALL set to
en_US.UTF-8)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
diff -Nru debiancontributors-0.7.7/dc-tool debiancontributors-0.7.8/dc-tool
--- debiancontributors-0.7.7/dc-tool    2018-02-14 15:33:56.000000000 +0100
+++ debiancontributors-0.7.8/dc-tool    2019-04-16 01:24:06.000000000 +0200
@@ -26,6 +26,7 @@
 import argparse
 import logging
 
+
 def read_json_sources(source_name, pathnames):
     import debiancontributors as dc
     # Read JSON data, parsing it to validate it
@@ -50,6 +51,7 @@
         submission = dc.Submission.from_json(source_name, sys.stdin)
     return submission
 
+
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
     parser.add_argument("--debug", help="enable debugging output", 
action="store_true")
@@ -95,8 +97,10 @@
             sys.exit(1)
 
     # Override auth_token and baseurl from commandline if requested
-    if args.auth_token: submission.set_auth_token(args.auth_token)
-    if args.baseurl: submission.baseurl = args.baseurl
+    if args.auth_token:
+        submission.set_auth_token(args.auth_token)
+    if args.baseurl:
+        submission.baseurl = args.baseurl
 
     if args.post:
         success, details = submission.post()
diff -Nru debiancontributors-0.7.7/debian/changelog 
debiancontributors-0.7.8/debian/changelog
--- debiancontributors-0.7.7/debian/changelog   2018-02-14 14:27:21.000000000 
+0100
+++ debiancontributors-0.7.8/debian/changelog   2019-04-16 02:27:01.000000000 
+0200
@@ -1,3 +1,12 @@
+debiancontributors (0.7.8-1) unstable; urgency=medium
+
+  * New upstream release.
+  * Update to use my debian.org mail address.
+  * debian/control
+    - Bump Standards-Version to 4.3.0 (no changes needed).
+
+ -- Daniele Tricoli <[email protected]>  Tue, 16 Apr 2019 02:27:01 +0200
+
 debiancontributors (0.7.7-1) unstable; urgency=medium
 
   * Team upload.
diff -Nru debiancontributors-0.7.7/debian/control 
debiancontributors-0.7.8/debian/control
--- debiancontributors-0.7.7/debian/control     2018-02-14 14:27:21.000000000 
+0100
+++ debiancontributors-0.7.8/debian/control     2019-04-16 02:27:01.000000000 
+0200
@@ -1,6 +1,6 @@
 Source: debiancontributors
 Maintainer: Debian Python Modules Team 
<[email protected]>
-Uploaders: Enrico Zini <[email protected]>, Daniele Tricoli <[email protected]>
+Uploaders: Enrico Zini <[email protected]>, Daniele Tricoli <[email protected]>
 Section: python
 Priority: optional
 Build-Depends: debhelper (>= 11),
@@ -14,7 +14,7 @@
                python3-six,
                python3-debian
 Build-Depends-Indep: help2man
-Standards-Version: 4.1.3
+Standards-Version: 4.3.0
 Homepage: 
https://salsa.debian.org/python-team/modules/python-debiancontributors
 Vcs-Git: 
https://salsa.debian.org/python-team/modules/python-debiancontributors.git
 Vcs-Browser: 
https://salsa.debian.org/python-team/modules/python-debiancontributors
diff -Nru debiancontributors-0.7.7/debian/copyright 
debiancontributors-0.7.8/debian/copyright
--- debiancontributors-0.7.7/debian/copyright   2018-02-14 14:27:21.000000000 
+0100
+++ debiancontributors-0.7.8/debian/copyright   2019-04-16 02:27:01.000000000 
+0200
@@ -9,7 +9,7 @@
 
 Files: debian/*
 Copyright: 2013, Enrico Zini <[email protected]>
-           2016, Daniele Tricoli <[email protected]>
+           2016, Daniele Tricoli <[email protected]>
 License: LGPL-3+
 
 License: LGPL-3+
diff -Nru debiancontributors-0.7.7/debian/rules 
debiancontributors-0.7.8/debian/rules
--- debiancontributors-0.7.7/debian/rules       2018-02-14 14:27:21.000000000 
+0100
+++ debiancontributors-0.7.8/debian/rules       2019-04-16 02:27:01.000000000 
+0200
@@ -24,4 +24,3 @@
              exit 1 ; \
        fi
        gbp buildpackage --git-debian-branch=backport -S -us -uc
-
diff -Nru debiancontributors-0.7.7/debiancontributors/parser.py 
debiancontributors-0.7.8/debiancontributors/parser.py
--- debiancontributors-0.7.7/debiancontributors/parser.py       2018-02-14 
15:33:56.000000000 +0100
+++ debiancontributors-0.7.8/debiancontributors/parser.py       2019-04-16 
01:24:06.000000000 +0200
@@ -25,6 +25,7 @@
 import io
 import six
 
+
 class Fail(BaseException):
     """
     Exception raised when a validation or lookup fails
@@ -33,6 +34,7 @@
         self.code = code
         self.msg = msg
 
+
 class ClusterFail(Fail):
     """
     Exception raised to report a number of errors of the same kind
@@ -41,6 +43,7 @@
         super(ClusterFail, self).__init__(code, msg)
         self.errors = errors
 
+
 def get_key(d, key):
     "Get a key from a dict"
     try:
@@ -48,6 +51,7 @@
     except KeyError:
         raise Fail(400, "Key '{}' not found".format(key))
 
+
 def get_key_int(d, key):
     "Get a key from a dict, as an int"
     try:
@@ -55,11 +59,13 @@
     except ValueError:
         raise Fail(400, "Key '{}' does not contain an integer 
value".format(key))
 
+
 def get_key_string(d, key, empty=False):
     "Get a key from a dict, as a string"
     if empty:
         res = d.get(key, "")
-        if not res: return ""
+        if not res:
+            return ""
     else:
         res = get_key(d, key)
 
@@ -73,11 +79,13 @@
 
     return res
 
+
 def get_key_unicode(d, key, empty=False):
     "Get a key from a dict, as a unicode, decoded from utf8 if necessary"
     if empty:
         res = d.get(key, "")
-        if not res: return ""
+        if not res:
+            return ""
     else:
         res = get_key(d, key)
         if not res:
@@ -94,6 +102,7 @@
         escaped = res.decode(encoding="utf8", errors="replace")
         raise Fail(400, "Key '{}' contain {} which is not a valid UTF8 
string".format(key, escaped))
 
+
 def get_key_sequence(d, key):
     "Get a key from a dict, ensuring it is a list or tuple"
     res = get_key(d, key)
@@ -101,6 +110,7 @@
         raise Fail(400, "Key '{}' does not contain an array".format(key))
     return res
 
+
 def get_key_sequence_or_object(d, key):
     """
     Get a key from a dict, ensuring it is a list or tuple, allowing singleton
@@ -114,16 +124,19 @@
     else:
         raise Fail(400, "Key '{}' does not contain an array or 
object".format(key))
 
+
 def get_key_date_or_none(d, key):
     "Get a key from a dict, as a date, allowing None"
     res = get_key_string(d, key, empty=True)
-    if not res: return None
+    if not res:
+        return None
 
     try:
         return datetime.datetime.strptime(res, "%Y-%m-%d").date()
     except ValueError:
         raise Fail(400, "Key '{}' does not contain a YYYY-MM-DD 
date".format(key))
 
+
 def get_json(f, compression=None):
     """
     Parse JSON from data from a file-like object, with optional decompression
@@ -222,11 +235,11 @@
                 s_contribs = [self.parse_contribution(d)
                               for d in get_key_sequence_or_object(rec, 
"contributions")]
             except Fail as f:
-                errors.append("#{} for {}: cannot parse contribution(s): 
{}".format(idx, s_id[0].id, f.msg))
+                errors.append("#{} for {}: cannot parse contribution(s): 
{}".format(idx, s_ids[0].id, f.msg))
                 continue
 
             if not s_contribs:
-                errors.append("#{} for {}: contribution list is 
empty".format(idx, s_id[0].id))
+                errors.append("#{} for {}: contribution list is 
empty".format(idx, s_ids[0].id))
                 continue
 
             yield s_ids, s_contribs
diff -Nru debiancontributors-0.7.7/debiancontributors/scanners/utils/bts.py 
debiancontributors-0.7.8/debiancontributors/scanners/utils/bts.py
--- debiancontributors-0.7.7/debiancontributors/scanners/utils/bts.py   
2018-02-14 15:33:56.000000000 +0100
+++ debiancontributors-0.7.8/debiancontributors/scanners/utils/bts.py   
2019-04-16 01:24:06.000000000 +0200
@@ -19,7 +19,7 @@
 from __future__ import absolute_import
 from __future__ import division
 from __future__ import unicode_literals
-from ...submission import Identifier, Contribution
+from ...types import Identifier, Contribution
 import os
 import os.path
 import datetime
diff -Nru 
debiancontributors-0.7.7/debiancontributors/scanners/utils/filesystem.py 
debiancontributors-0.7.8/debiancontributors/scanners/utils/filesystem.py
--- debiancontributors-0.7.7/debiancontributors/scanners/utils/filesystem.py    
2018-02-14 15:33:56.000000000 +0100
+++ debiancontributors-0.7.8/debiancontributors/scanners/utils/filesystem.py    
2019-04-16 01:24:06.000000000 +0200
@@ -19,7 +19,7 @@
 from __future__ import absolute_import
 from __future__ import division
 from __future__ import unicode_literals
-from ...submission import Identifier
+from ...types import Identifier
 from .mine import Aggregate
 import os
 import os.path
diff -Nru debiancontributors-0.7.7/debiancontributors/submission.py 
debiancontributors-0.7.8/debiancontributors/submission.py
--- debiancontributors-0.7.7/debiancontributors/submission.py   2018-02-14 
15:33:56.000000000 +0100
+++ debiancontributors-0.7.8/debiancontributors/submission.py   2019-04-16 
01:24:06.000000000 +0200
@@ -20,7 +20,7 @@
 from __future__ import division
 from __future__ import unicode_literals
 from collections import defaultdict
-from .types import *
+from .types import Contribution
 import sys
 import os
 import io
@@ -31,6 +31,7 @@
 
 DEFAULT_BASE_URL = "https://contributors.debian.org/";
 
+
 class Submission(object):
     """
     A submission to contributors.debian.org
@@ -109,7 +110,7 @@
         for ident, contributions in self.entries.items():
             yield {
                 "id": (ident.to_json(),),
-                "contributions": [ c.to_json() for c in contributions.values() 
],
+                "contributions": [c.to_json() for c in contributions.values()],
             }
 
     def to_json(self, file=None, indent=None):
@@ -158,7 +159,6 @@
 
         # Build the POST request to contributors.debian.org
         url = urljoin(self.baseurl, '/contributors/post')
-        #print("Posting to '{}'...".format(url))
 
         # Prepare the file to post
         try:
@@ -168,6 +168,7 @@
         except ImportError:
             import gzip
             compress_type = "gzip"
+
             def compress(data):
                 out = io.BytesIO()
                 with gzip.GzipFile(mode="wb", fileobj=out) as fd:
@@ -197,8 +198,14 @@
             args["verify"] = "/etc/ssl/ca-debian/ca-certificates.crt"
         else:
             args["verify"] = True
+
+        session = requests.Session()
         try:
-            res = requests.post(url, **args)
+            # Do a GET before the POST, to do HTTPS negotiation without a huge
+            # payload. See #801506
+            res = session.get(url)
+            res.raise_for_status()
+            res = session.post(url, **args)
             res.raise_for_status()
         except requests.ConnectionError as e:
             return False, {
@@ -211,7 +218,7 @@
             try:
                 parsed = json.loads(res.text)
                 errors = parsed["errors"]
-            except:
+            except Exception:
                 errors = []
             return False, {
                 "code": None,
@@ -248,10 +255,11 @@
         parser = Parser()
         for ids, contribs in parser.parse_submission(data):
             for i in ids:
-                res.entries[i] = { c.type: c for c in contribs }
+                res.entries[i] = {c.type: c for c in contribs}
 
         return res
 
+
 def merge_contrib_dicts(d1, d2):
     """
     Merge two dicts of contributions from the same identifier.
diff -Nru debiancontributors-0.7.7/debiancontributors/types.py 
debiancontributors-0.7.8/debiancontributors/types.py
--- debiancontributors-0.7.7/debiancontributors/types.py        2018-02-14 
15:33:56.000000000 +0100
+++ debiancontributors-0.7.8/debiancontributors/types.py        2019-04-16 
01:24:06.000000000 +0200
@@ -25,18 +25,21 @@
 
 __all__ = ["Identifier", "Contribution"]
 
+
 class Identifier(object):
     """
     Information about a user identifier
     """
+    __slots__ = ("type", "id", "desc")
+
     # Validator regexps
     TYPE_VALIDATORS = {
         "login": re.compile(r"^[a-z0-9._-]+$"),
         # From http://www.regular-expressions.info/email.html
-        "email": re.compile(r"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", re.I),
+        "email": re.compile(r"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}", re.I),
         "fpr": re.compile(r"^[A-F0-9]{32,40}$"),
         "url": re.compile(r"^https?://"),
-        #"wiki": re.compile("^[A-Za-z]+$"),
+        # "wiki": re.compile("^[A-Za-z]+$"),
     }
 
     def __init__(self, type, id, desc=None):
@@ -49,7 +52,7 @@
 
     def __eq__(self, other):
         return (self.type == other.type
-            and self.id == other.id)
+                and self.id == other.id)
 
     def to_json(self):
         """
@@ -123,11 +126,12 @@
         raise ValueError("cannot infer a valid Identifier from '{}'".format(s))
 
 
-
 class Contribution(object):
     """
     Information about a contribution.
     """
+    __slots__ = ("type", "begin", "end", "url")
+
     def __init__(self, type, begin=None, end=None, url=None):
         """
         type: contribution type (as configured in contrbutors.debian.org for a
@@ -147,8 +151,8 @@
 
     def __eq__(self, other):
         return (self.type == other.type
-            and self.begin == other.begin
-            and self.end == other.end)
+                and self.begin == other.begin
+                and self.end == other.end)
 
     def extend_by_date(self, date):
         """
@@ -171,10 +175,13 @@
         """
         Return a JSON-serializable structure for this contribution
         """
-        res = { "type": self.type }
-        if self.begin: res["begin"] = self.begin.strftime("%Y-%m-%d")
-        if self.end: res["end"] = self.end.strftime("%Y-%m-%d")
-        if self.url: res["url"] = self.url
+        res = {"type": self.type}
+        if self.begin:
+            res["begin"] = self.begin.strftime("%Y-%m-%d")
+        if self.end:
+            res["end"] = self.end.strftime("%Y-%m-%d")
+        if self.url:
+            res["url"] = self.url
         return res
 
     @classmethod
@@ -212,7 +219,8 @@
         if not isinstance(self.type, six.string_types):
             raise Fail(400, "Contribution type is '{}' instead of a 
string".format(type(self.type)))
         if self.begin is not None and not hasattr(self.begin, "strftime"):
-            raise Fail(400, "Contribution begin is '{}' and does not look like 
a date or datetime".format(type(self.begin)))
+            raise Fail(400, "Contribution begin is '{}' and does not look like 
a date or datetime".format(
+                type(self.begin)))
         if self.end is not None and not hasattr(self.end, "strftime"):
             raise Fail(400, "Contribution end is '{}' and does not look like a 
date or datetime".format(type(self.end)))
         if self.url is not None and not isinstance(self.url, six.string_types):
diff -Nru debiancontributors-0.7.7/.gitignore 
debiancontributors-0.7.8/.gitignore
--- debiancontributors-0.7.7/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ debiancontributors-0.7.8/.gitignore 2019-04-16 01:24:06.000000000 +0200
@@ -0,0 +1,3 @@
+*.swp
+*.pyc
+MANIFEST
diff -Nru debiancontributors-0.7.7/PKG-INFO debiancontributors-0.7.8/PKG-INFO
--- debiancontributors-0.7.7/PKG-INFO   2018-02-14 15:54:45.000000000 +0100
+++ debiancontributors-0.7.8/PKG-INFO   1970-01-01 01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-Metadata-Version: 1.1
-Name: debiancontributors
-Version: 0.7.7
-Summary: Manage submissions to contributors.debian.org
-Home-page: 
https://salsa.debian.org/python-team/modules/python-debiancontributors
-Author: ['Enrico Zini']
-Author-email: ['[email protected]']
-License: http://www.gnu.org/licenses/lgpl-3.0.html
-Description: UNKNOWN
-Platform: UNKNOWN
-Requires: requests (>=2.0.0)
diff -Nru debiancontributors-0.7.7/setup.py debiancontributors-0.7.8/setup.py
--- debiancontributors-0.7.7/setup.py   2018-02-14 15:33:56.000000000 +0100
+++ debiancontributors-0.7.8/setup.py   2019-04-16 01:24:06.000000000 +0200
@@ -25,14 +25,14 @@
     scripts = ['dc-tool']
 
 setup(
-    name = "debiancontributors",
+    name="debiancontributors",
     requires=['requests (>=2.0.0)'],
-    version = "0.7.7",
-    description = "Manage submissions to contributors.debian.org",
-    author = ["Enrico Zini"],
-    author_email = ["[email protected]"],
-    url = 
"https://salsa.debian.org/python-team/modules/python-debiancontributors";,
-    license = "http://www.gnu.org/licenses/lgpl-3.0.html";,
-    packages = ["debiancontributors", "debiancontributors.scanners", 
"debiancontributors.scanners.utils"],
+    version="0.7.8",
+    description="Manage submissions to contributors.debian.org",
+    author=["Enrico Zini"],
+    author_email=["[email protected]"],
+    
url="https://salsa.debian.org/python-team/modules/python-debiancontributors";,
+    license="http://www.gnu.org/licenses/lgpl-3.0.html";,
+    packages=["debiancontributors", "debiancontributors.scanners", 
"debiancontributors.scanners.utils"],
     scripts=scripts,
 )

Attachment: signature.asc
Description: OpenPGP digital signature


--- End Message ---
--- Begin Message ---
Daniele Tricoli:
> tag 927183 - moreinfo
> thanks
> 
> Hello Niels,
> 
> On 16/04/2019 07:40, Niels Thykier wrote:
>> Please go ahead with the upload and remove the moreinfo tag when the
>> upload is ready to be unblocked.
> 
> Many thanks for your quick review!
> 
>> For future reference: Please avoid generic code-style
>> rewrite/refactoring during freezes (and instead deploy it after the
>> freeze).  In the particular instance, it was manageable to review but
>> most of the was "noise" due to that refactoring - this in turn increases
>> the risk that the proposal is rejected.
> 
> Thanks for the suggestion, and sorry for the added "noise". I will
> 
> coordinate better next time: the code-style/refactoring was done several 
> months
> 
> ago, but we (me and Enrico) did not make a release of debiancontributors 
> before
> 
> the freeze.
> 
> Next time I will remember that it's better to release before the freeze 
> because
> 
> it can happen to need to push a new release during the freeze for some 
> important
> 
> fixes.
> 
> Thanks again and kind regards,
> 

Unblocked, thanks.
~Niels

--- End Message ---

Reply via email to