diff --git a/debian/control b/debian/control index 04b099f..8bff874 100644 --- a/debian/control +++ b/debian/control @@ -1,5 +1,5 @@ Architecture: all -Depends: python-pip +Depends: python3-pip Description: The fast and simple S3 transport for apt Maintainer: Lucid Software Package: apt-boto-s3 diff --git a/debian/postinst b/debian/postinst index 21146cc..754aba1 100755 --- a/debian/postinst +++ b/debian/postinst @@ -1,2 +1,2 @@ #!/bin/sh -pip install boto3 +pip3 install boto3 diff --git a/s3.py b/s3.py index 5f557a1..e0804d1 100755 --- a/s3.py +++ b/s3.py @@ -1,23 +1,26 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 import boto3 import botocore import collections import hashlib import os -import Queue +from queue import Queue import re import signal import socket import sys import threading -import urllib -import urlparse +import urllib.request +import urllib.error +import urllib.parse + class Settings(object): def __init__(self): self.metadata_service_num_attempts = 5 self.metadata_service_timeout = 1 self.signature_version = None + def botocore_session(self): session = botocore.session.get_session() if self.metadata_service_num_attempts is not None: @@ -38,7 +41,7 @@ def __init__(self): self.lock = threading.Lock() self.interrupted = False - def __nonzero__(self): + def __bool__(self): return self.interrupted def interupt(self): @@ -114,7 +117,10 @@ def __init__(self, pipes): self.input = AptIO.input(pipes.input) self.output = AptIO.output(pipes.output) -class AptRequest(collections.namedtuple('AptRequest_', ['output'])): +class AptRequest(object): + def __init__(self, output): + self.output = output + def handle_message(self, message): try: self._handle_message(message) @@ -128,7 +134,7 @@ class PipelinedAptMethod(AptMethod): class Output(object): def __init__(self, method): self.method = method - self.queue = Queue.Queue() + self.queue = Queue() self.method.queues.put(self.queue) def __enter__(self): @@ -147,7 +153,7 @@ def __init__(self, method_type, pipes): super(PipelinedAptMethod, self).__init__(pipes) self.interrupt = Interrupt() self.method_type = method_type - self.queues = Queue.Queue() + self.queues = Queue() def _send_queue_thread(self): def f(): @@ -200,7 +206,7 @@ def __init__(self, output): class S3Uri: def __init__(self, request, raw_uri): self.request = request - self.uri = urlparse.urlparse(raw_uri) + self.uri = urllib.parse.urlparse(raw_uri) # parse host as if it were an AWS host match = re.match('(.+\.|)?s3(?:[-.]([^.]*))?.amazonaws.com', self.uri.hostname) self.virtual_host_bucket, self.region = (match.groups() if match else (None, None)) @@ -217,7 +223,7 @@ def credentials(self): if user: user_parts = user.split(':', 1) if len(user_parts) == 2: - return map(urllib.unquote, user_parts) + return list(map(urllib.parse.unquote, user_parts)) else: raise Exception('Access key and secret are specified improperly in the URL') @@ -238,7 +244,7 @@ def bucket_key(self): if self.virtual_host_bucket: key = self.uri.path[1:] else: - _, bucket, key = map(urllib.unquote, self.uri.path.split('/', 2)) + _, bucket, key = list(map(urllib.parse.unquote, self.uri.path.split('/', 2))) return bucket, key def signature_version(self):