Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Howdy, Pending approval, I'm uploading a version of gcalcli which contains an upstream patch to fix the reliance on the Google shortening service. If a user invokes one of the subcommands with '--details url', the application hits traceback issues as the service has been shut down. See https://github.com/insanum/gcalcli/issues/440 for more details of the problem. The changelog reads: gcalcli (4.0.4-2) unstable; urgency=medium * d/p/remove_url_shortening.patch: Remove the deprecated goo.gl service. -- Unit 193 <unit...@ubuntu.com> Wed, 24 Apr 2019 19:46:16 -0400 And debdiff: diff --git a/debian/changelog b/debian/changelog index 868a5db..f6bd57b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +gcalcli (4.0.4-2) unstable; urgency=medium + + * d/p/remove_url_shortening.patch: Remove the deprecated goo.gl service. + + -- Unit 193 <unit...@ubuntu.com> Wed, 24 Apr 2019 19:46:16 -0400 + gcalcli (4.0.4-1) unstable; urgency=medium * New upstream version 4.0.4 diff --git a/debian/patches/remove_url_shortening.patch b/debian/patches/remove_url_shortening.patch new file mode 100644 index 0000000..74a3c44 --- /dev/null +++ b/debian/patches/remove_url_shortening.patch @@ -0,0 +1,225 @@ +From 428378a88f89d154c8d4046deb9bdb5eb4e81019 Mon Sep 17 00:00:00 2001 +From: Joshua Crowgey <jcrow...@u.washington.edu> +Date: Mon, 15 Apr 2019 21:07:49 -0700 +Subject: [PATCH] Remove URL Shortening [fixes #440] (#443) + +Google has removed the urlshortening service. After some discussion, +it was decided to remove the shortening facilities instead of trying to +integrate with a separate provider. This makes our code simpler and +folks who need url shortening can hopefully layer on what they need. +--- + ChangeLog | 3 +++ + gcalcli/argparsers.py | 16 +++++----------- + gcalcli/gcal.py | 39 +++++++++------------------------------ + setup.py | 2 +- + tests/test_argparsers.py | 9 ++------- + 5 files changed, 20 insertions(+), 49 deletions(-) + +Index: gcalcli/ChangeLog +=================================================================== +--- gcalcli.orig/ChangeLog ++++ gcalcli/ChangeLog +@@ -1,3 +1,6 @@ ++v4.1.0 ++ * Removed url shortening due to Google deprecation #440 ++ + v4.0.4 + * Minor bugfixes: conky colors, issues with setup.py + +Index: gcalcli/gcalcli/argparsers.py +=================================================================== +--- gcalcli.orig/gcalcli/argparsers.py ++++ gcalcli/gcalcli/argparsers.py +@@ -7,11 +7,9 @@ from gcalcli.printer import valid_color_ + from oauth2client import tools + import copy as _copy + +-DETAILS = ['all', 'calendar', 'location', 'length', 'reminders', 'description', +- 'longurl', 'shorturl', 'url', 'attendees', 'email', 'attachments'] ++DETAILS = ['calendar', 'location', 'length', 'reminders', 'description', ++ 'url', 'attendees', 'email', 'attachments'] + +-BOOL_DETAILS = ['calendar', 'location', 'length', 'reminders', 'description', +- 'attendees', 'email', 'attachments'] + + PROGRAM_OPTIONS = { + '--client-id': {'default': gcalcli.__API_CLIENT_ID__, +@@ -60,13 +58,9 @@ class DetailsAction(argparse._AppendActi + details = _copy.copy(getattr(namespace, self.dest, {})) + + if value == 'all': +- details = {d: True for d in BOOL_DETAILS} +- elif value in BOOL_DETAILS: ++ details = {d: True for d in DETAILS} ++ else: + details[value] = True +- elif value in ['shorturl', 'url']: +- details['url'] = 'short' +- elif value == 'longurl': +- details['url'] = 'long' + + setattr(namespace, self.dest, details) + +@@ -90,7 +84,7 @@ def get_details_parser(): + details_parser = argparse.ArgumentParser(add_help=False) + details_parser.add_argument( + '--details', default={}, action=DetailsAction, +- choices=DETAILS, ++ choices=DETAILS + ['all'], + help='Which parts to display, can be: ' + ', '.join(DETAILS)) + return details_parser + +Index: gcalcli/gcalcli/gcal.py +=================================================================== +--- gcalcli.orig/gcalcli/gcal.py ++++ gcalcli/gcalcli/gcal.py +@@ -47,7 +47,6 @@ class GoogleCalendarInterface: + max_retries = 5 + auth_http = None + cal_service = None +- url_service = None + + ACCESS_OWNER = 'owner' + ACCESS_WRITER = 'writer' +@@ -140,8 +139,7 @@ class GoogleCalendarInterface: + OAuth2WebServerFlow( + client_id=self.options['client_id'], + client_secret=self.options['client_secret'], +- scope=['https://www.googleapis.com/auth/calendar', +- 'https://www.googleapis.com/auth/urlshortener'], ++ scope=['https://www.googleapis.com/auth/calendar'], + user_agent=__program__ + '/' + __version__ + ), + storage, +@@ -160,15 +158,6 @@ class GoogleCalendarInterface: + + return self.cal_service + +- def get_url_service(self): +- if not self.url_service: +- self._google_auth() +- self.url_service = build(serviceName='urlshortener', +- version='v1', +- http=self._google_auth()) +- +- return self.url_service +- + def _get_cached(self): + if self.options['config_folder']: + cache_file = os.path.expanduser( +@@ -224,16 +213,6 @@ class GoogleCalendarInterface: + with open(cache_file, 'wb') as _cache_: + pickle.dump(self.cache, _cache_) + +- def _shorten_url(self, url): +- if self.details.get('url', False) != 'short': +- return url +- # Note that when authenticated to a google account different shortUrls +- # can be returned for the same longUrl. See: http://goo.gl/Ya0A9 +- shortUrl = self._retry_with_backoff( +- self.get_url_service().url().insert(body={'longUrl': url}) +- ) +- return shortUrl['id'] +- + def _calendar_color(self, event, override_color=False): + ansi_codes = { + '1': 'brightblue', +@@ -621,9 +600,9 @@ class GoogleCalendarInterface: + _u(event['e'].strftime('%H:%M'))) + + if self.details.get('url'): +- output += '\t%s' % (self._shorten_url(event['htmlLink']) ++ output += '\t%s' % (event['htmlLink'] + if 'htmlLink' in event else '') +- output += '\t%s' % (self._shorten_url(event['hangoutLink']) ++ output += '\t%s' % (event['hangoutLink'] + if 'hangoutLink' in event else '') + + output += '\t%s' % _u(self._valid_title(event).strip()) +@@ -724,12 +703,12 @@ class GoogleCalendarInterface: + self.printer.msg(xstr, 'default') + + if self.details.get('url') and 'htmlLink' in event: +- hlink = self._shorten_url(event['htmlLink']) ++ hlink = event['htmlLink'] + xstr = '%s Link: %s\n' % (details_indent, hlink) + self.printer.msg(xstr, 'default') + + if self.details.get('url') and 'hangoutLink' in event: +- hlink = self._shorten_url(event['hangoutLink']) ++ hlink = event['hangoutLink'] + xstr = '%s Hangout Link: %s\n' % (details_indent, hlink) + self.printer.msg(xstr, 'default') + +@@ -1282,7 +1261,7 @@ class GoogleCalendarInterface: + ) + + if self.details.get('url'): +- hlink = self._shorten_url(new_event['htmlLink']) ++ hlink = new_event['htmlLink'] + self.printer.msg('New event added: %s\n' % hlink, 'green') + + return new_event +@@ -1323,7 +1302,7 @@ class GoogleCalendarInterface: + new_event = self._retry_with_backoff(request) + + if self.details.get('url'): +- hlink = self._shorten_url(new_event['htmlLink']) ++ hlink = new_event['htmlLink'] + self.printer.msg('New event added: %s\n' % hlink, 'green') + + return new_event +@@ -1557,7 +1536,7 @@ class GoogleCalendarInterface: + body=event + ) + ) +- hlink = self._shorten_url(new_event.get('htmlLink')) ++ hlink = new_event.get('htmlLink') + self.printer.msg( + 'New event added: %s\n' % hlink, 'green' + ) +@@ -1576,7 +1555,7 @@ class GoogleCalendarInterface: + body=event + ) + ) +- hlink = self._shorten_url(new_event.get('htmlLink')) ++ hlink = new_event.get('htmlLink') + self.printer.msg('New event added: %s\n' % hlink, 'green') + elif val.lower() == 'q': + sys.exit(0) +Index: gcalcli/setup.py +=================================================================== +--- gcalcli.orig/setup.py ++++ gcalcli/setup.py +@@ -17,7 +17,7 @@ author_emails = ['eda...@insanum.com', + 'jcrow...@uw.edu'] + + setup(name='gcalcli', +- version='4.0.4', ++ version='4.1.0', + author='Eric Davis, Brian Hartvigsen, Joshua Crowgey', + author_email=', '.join(author_emails), + maintainer='Joshua Crowgey', +Index: gcalcli/tests/test_argparsers.py +=================================================================== +--- gcalcli.orig/tests/test_argparsers.py ++++ gcalcli/tests/test_argparsers.py +@@ -42,16 +42,11 @@ def test_details_parser(): + parsed_details = details_parser.parse_args(argv).details + assert parsed_details['attendees'] + assert parsed_details['location'] +- assert parsed_details['url'] == 'short' ++ assert parsed_details['url'] + + argv = shlex.split('--details all') + parsed_details = details_parser.parse_args(argv).details +- assert all(parsed_details[d] for d in argparsers.BOOL_DETAILS) +- +- # ensure we can specify url type even with details=all +- argv = shlex.split('--details all --details longurl') +- parsed_details = details_parser.parse_args(argv).details +- assert parsed_details['url'] == 'long' ++ assert all(parsed_details[d] for d in argparsers.DETAILS) + + + def test_handle_unparsed(): diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..f4dec53 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +remove_url_shortening.patch