Skip to content
This repository was archived by the owner on Jun 7, 2022. It is now read-only.

Python3 conversion #28

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion debian/control
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Architecture: all
Depends: python-pip
Depends: python3-pip
Description: The fast and simple S3 transport for apt
Maintainer: Lucid Software <[email protected]>
Package: apt-boto-s3
Expand Down
2 changes: 1 addition & 1 deletion debian/postinst
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
#!/bin/sh
pip install boto3
pip3 install boto3
28 changes: 17 additions & 11 deletions s3.py
Original file line number Diff line number Diff line change
@@ -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:
Expand All @@ -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):
Expand Down Expand Up @@ -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)
Expand All @@ -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):
Expand All @@ -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():
Expand Down Expand Up @@ -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))
Expand All @@ -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')

Expand All @@ -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):
Expand Down