class Conn:
    def __init__(self, ak, sk, host, bucket):
        self.bucket = bucket
        self.ksyun = Connection(ak, sk, host=host)
        if not self._exist(bucket):
            self.ksyun.create_bucket(bucket)
        assert self._exist(bucket)

    def _exist(self, bucket):
        buckets = [b.name for b in self.ksyun.get_all_buckets()]
        return bucket in buckets

    def upload(self, keyname, filename):
        try:
            bucket = self.ksyun.get_bucket(self.bucket)
            key_object = bucket.new_key(keyname)
            key_object.set_contents_from_filename(filename)
            return {"result": 0, "msg": keyname}
        except:
            return {"result": -1, "msg": traceback.format_exc()}
            pass

    def download(self, filename, keyname):
        try:
            bucket = self.ksyun.get_bucket(self.bucket)
            key_object = bucket.get_key(keyname)
            key_object.get_contents_to_filename(filename)
            return {"result": 0, "msg": filename}
        except:
            return {"result": -1, "msg": traceback.format_exc()}
            pass

    def make_key(self, app_key, version, package_name):
        return ''.join([
            app_key,
            md5.new(version).hexdigest(),
            md5.new(package_name).hexdigest()
        ]).lower()