view PythonTrustStore-0.2.0/py_ts/parts.py @ 1:ff126718bdc5

Uploaded
author cathywise
date Wed, 11 Dec 2013 21:05:12 -0500
parents
children
line wrap: on
line source

import pprint
import json
import base64
import traceback


class Elem(object):
    expires = -1
    name = "Elem"
    remote_size = -1
    remote_last_modified = -1

    def __init__(self, eDict=None):
        if eDict:
            self.expires = eDict['expiryDateTime']
            self.name = eDict['name']
            self.remote_size = eDict['remoteSize']
            if 'remoteLastmodified' in eDict:
                self.remote_last_modified = eDict['remoteLastmodified']
            # if self.remote_last_modified >= 0:
                # self.remote_last_modified = datetime.utcfromtimestamp(self.remote_last_modified / 1000)  # JAVA RAGE

    def dict(self):
        return {'expiryDateTime': self.expires,
                'name': self.name,
                'remoteSize': self.remote_size}

    def __repr__(self):
        # return json.dumps(self.dict(), sort_keys=True, indent=4)
        return "Elem: " + pprint.pformat(self.dict())


class Directory(Elem):
    name = "Virtual Directory"
    children = []

    def __init__(self, eDict=None, jsonText=None):
        self.children = []
        if jsonText:
            eDict = json.loads(jsonText)
        if eDict:
            Elem.__init__(self, eDict=eDict)

            for child in eDict['children']:
                if child['isDir']:
                    self.children.append(Directory(child))
                else:
                    self.children.append(File(child))

    def dict(self):
        me = Elem.dict(self)
        me['isDir'] = True
        me['children'] = [kid.dict() for kid in self.children]
        return me

    def __repr__(self):
        this = self.dict()
        return "Directory: " + pprint.pformat(this)
        # return json.dumps(this, sort_keys=True, indent=4)


class File(Elem):
    name = "file"
    remote_size = 0
    local_path = ""
    fragments = []

    def __init__(self, extras=None):
        self.fragments = []
        if extras:
            Elem.__init__(self, eDict=extras)

            for fragment in extras['fragments']:
                self.fragments.append(Fragment(fragment))

    def dict(self):
        me = Elem.dict(self)
        me['isDir'] = False
        me['fragments'] = [fragment.dict() for fragment in self.fragments]
        return me

    def __repr__(self):
        # return json.dumps(self.dict(), sort_keys=True, indent=4)
        return "File: " + pprint.pformat(self.dict())


class Fragment(object):
    name = ""
    order = 0
    providers = []
    # Newer root files have these
    length = None
    iv = None
    offset = None

    def __init__(self, eDict=None):
        if eDict:
            self.name = eDict['codename']
            self.order = eDict['orderNo']
            self.providers = eDict['sasProviders']
            if "length" in eDict:
                self.length = eDict["length"]
            if "iv" in eDict:
                self.iv = base64.b64decode(eDict["iv"])
            if "offset" in eDict:
                self.offset = eDict["offset"]
        else:
            self.providers = []

    def dict(self):
        form = {'codename': self.name, 'orderNo': self.order, 'sasProviders': self.providers}
        if self.length:
            form["length"] = self.length
        if self.iv:
            form["iv"] = base64.b64encode(self.iv)
        if self.offset != None:
            form["offset"] = self.offset
        return form

    def __repr__(self):
        return json.dumps(self.dict())