Bug#916372: pastebinit: multiple deprecation warnings under Python 3.7

2019-04-12 Thread Simon Quigley
Dear Maintainer,

I have uploaded an NMU for this using Antonio's patches to DELAYED/5.
Let me know if you would like me to delay it further.

Thanks.

-- 
Simon Quigley
tsimo...@debian.org
tsimonq2 on freenode and OFTC
5C7A BEA2 0F86 3045 9CC8
C8B5 E27F 2CF8 458C 2FA4



signature.asc
Description: OpenPGP digital signature


Bug#916372: pastebinit: multiple deprecation warnings under Python 3.7

2018-12-13 Thread Antonio Terceiro
Package: pastebinit
Version: 1.5-2
Severity: normal
Tags: patch

Hi,

After the upgrade to Pyton 3.7, pastebinit starts to emit 2 warnings.

$ python3.6 /usr/bin/pastebinit /tmp/test.txt
http://paste.debian.net/1055727/
$ python3.7 /usr/bin/pastebinit /tmp/test.txt
/usr/bin/pastebinit:42: DeprecationWarning: dist() and linux_distribution() 
functions are deprecated in Python 3.5
  release = platform.linux_distribution()[0].lower()
/usr/bin/pastebinit:413: DeprecationWarning: pasteURLopener style of invoking 
requests is deprecated. Use newer urlopen functions/methods
  url_opener = pasteURLopener()
http://paste.debian.net/1055728/

The attached patches silence the warnings for me. I only tested it
against paste.debian.net, but I see no reason why any of the changes I
did would be a problem for other sites.

Note that the first patch adds a new dependency, so you also want
something like this:

diff -Nru pastebinit-1.5/debian/control pastebinit-1.5/debian/control
--- pastebinit-1.5/debian/control   2018-04-15 12:04:53.0 -0300
+++ pastebinit-1.5/debian/control   2018-12-13 15:01:31.0 -0200
@@ -11,7 +11,7 @@

 Package: pastebinit
 Architecture: all
-Depends: python3, ${misc:Depends}
+Depends: python3, python3-distro, ${misc:Depends} Breaks: bikeshed (<< 1.21)
 Replaces: bikeshed (<< 1.21)
 Description: command-line pastebin client

-- System Information:
Debian Release: buster/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'testing-debug'), (500, 
'unstable'), (500, 'testing'), (1, 'experimental-debug'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.18.0-3-amd64 (SMP w/4 CPU cores)
Locale: LANG=pt_BR.UTF-8, LC_CTYPE=pt_BR.UTF-8 (charmap=UTF-8), 
LANGUAGE=pt_BR:pt:en (charmap=UTF-8)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages pastebinit depends on:
ii  python3 3.7.1-2
ii  python3-distro  1.3.0-1

pastebinit recommends no packages.

pastebinit suggests no packages.

-- no debconf information
Description: move away from deprecated platform functions
 The linux_distribution function from the platform has been deprecated in
 Python 3.5. `distro` is the natural sucessor, however it is a new dependency.
Author: Antonio Terceiro 

--- a/pastebinit
+++ b/pastebinit
@@ -38,8 +38,8 @@ defaultPB = "pastebin.com"
 
 # Now try to override it with a distributor pastebin
 try:
-import platform
-release = platform.linux_distribution()[0].lower()
+import distro
+release = distro.linux_distribution(full_distribution_name=False)[0].lower()
 if release == 'debian':
 defaultPB = "paste.debian.net"
 elif release == 'fedora':
Description: update urlopen usage
 The URLOpener classes from the urllib.request are deprecated in Python 3.5.
 Replace them with a more modern usage of urlopen().
 .
 Note that this patch removes the special handling of HTTP 401
 ("Unauthorized").

Author: Antonio Terceiro 

--- a/pastebinit
+++ b/pastebinit
@@ -27,11 +27,11 @@ if sys.version[0] == "2":
 from ConfigParser import NoOptionError
 from ConfigParser import SafeConfigParser as ConfigParser
 from urllib import urlencode
-from urllib import FancyURLopener
+from urllib import request
 else:
 from configparser import ConfigParser, NoOptionError
 from urllib.parse import urlencode
-from urllib.request import FancyURLopener
+from urllib import request
 
 # Set the default pastebin
 defaultPB = "pastebin.com"
@@ -72,12 +72,13 @@ try:
 version = "1.5"
 configfile = os.path.expanduser("~/.pastebinit.xml")
 
-# Custom urlopener to handle 401's
-class pasteURLopener(FancyURLopener):
+class PasteRequest(request.Request):
 version = "Pastebinit v%s" % version
 
-def http_error_401(self, url, fp, errcode, errmsg, headers, data=None):
-return None
+def __init__(self, *args, **opts):
+super(PasteRequest, self).__init__(*args, **opts)
+if 'User-agent' not in self.headers:
+self.add_header('User-agent', self.version)
 
 def preloadPastebins():
 # Check several places for config files:
@@ -410,25 +411,25 @@ try:
 else:
 post_format = 'standard'
 
-url_opener = pasteURLopener()
+req = PasteRequest(fetch_url)
 
 if post_format == 'json':
 if json:
 params = json.dumps(params)
-url_opener.addheader('Content-type', 'text/json')
+req.add_header('Content-type', 'text/json')
 else:
 print(_("Could not find any json library."), file=sys.stderr)
 sys.exit(1)
 else:
 # Convert to a format usable with the HTML POST
-params = urlencode(params)
+params = bytes(urlencode(params), encoding='US-ASCII')
 
 # Send the informations and be redirected to the