示例#1
0
class Collection(object):

    def __init__(self, theme, dest_folder):
        self.dest_folder = dest_folder
        self.extensions_descs = {}
        self.theme = theme
        self.github = Github("emesene")
        self._stop = False
        self._tree = None
        self.progress = 0.0

    def save_files(self, type_, label):
        self._stop = False
        element = self.extensions_descs[type_].get(label)
        if element is None:
            return

        keys = element.files.keys()
        tmp_dir = tempfile.mkdtemp()
        for k, path in enumerate(keys):
            if self._stop:
                self.remove(tmp_dir)
                return

            self.progress = k / float(len(keys))

            split_path = path.split("/")
            path_to_create = tmp_dir
            for part in split_path[:-1]:
                path_to_create = os.path.join(path_to_create, part)
            try:
                os.makedirs(path_to_create)
            except OSError:
                pass

            try:
                rq = self.github.get_raw(self.theme, element.files[path])
            except Exception, ex:
                log.exception(str(ex))
                self.remove(tmp_dir)
                return

            f = open(os.path.join(path_to_create, split_path[-1]), "wb")
            f.write(rq)
            f.close()

        self.remove(self.get_abspath(type_, label))
        path = self.get_path(type_, label)
        split_path = os.path.split(path)
        first_path = split_path[0] if split_path[1] else ''
        self.move(os.path.join(tmp_dir, path), os.path.join(self.dest_folder, first_path))
        self.remove(tmp_dir)
        self.progress = 0.0
示例#2
0
class Collection(object):

    def __init__(self, theme, dest_folder):
        self.dest_folder = dest_folder
        self.extensions_descs = {}
        self.theme = theme
        self.github = Github("emesene")
        self._stop = False
        self._stopfetch = False
        self._blobs = None

    def save_files(self, element, label):
        self._stop = False
        for el, k in element[label].files.items():
            els = el.split("/")
            if self._stop:
                self.remove(os.path.join(self.dest_folder, els[0]))
                return
            path_to_create = ""
            for i in range(len(els) - 1):
                path_to_create = os.path.join(path_to_create, els[i])
            try:
                os.makedirs(os.path.join(self.dest_folder , path_to_create))
            except OSError:
                pass
            rq = self.github.get_raw(self.theme, k)
            f = open(os.path.join(self.dest_folder, el), "wb")
            f.write(rq)
    
    def download(self, download_item=None):
        for element in self.extensions_descs.itervalues():
            if download_item is not None:
                self.save_files(element, download_item)

    def remove(self, path):
        shutil.rmtree(path)

    def stop(self):
        self._stop = True

    def stop_fetch(self):
        self._stopfetch = True

    def set_blobs(self, result):
        self._blobs = result

    def plugin_name_from_file(self, file_name):
        pass

    def fetch(self):
        pass
示例#3
0
class Collection(object):
    def __init__(self, theme, dest_folder):
        self.dest_folder = dest_folder
        self.extensions_descs = {}
        self.theme = theme
        self.github = Github("emesene")
        self._stop = False
        self._blobs = None
        self.progress = 0.0

    def save_files(self, element, label):
        self._stop = False
        if not label in element:
            return
        keys = element[label].files.keys()
        for k, path in enumerate(keys):
            self.progress = k / float(len(keys))

            split_path = path.split("/")
            if self.theme.endswith("themes"):
                removal_path = os.path.join(self.dest_folder, split_path[0],
                                            split_path[1])
            else:
                removal_path = os.path.join(self.dest_folder, split_path[0])

            if self._stop:
                self.remove(removal_path)
                return

            path_to_create = self.dest_folder
            for part in split_path[:-1]:
                path_to_create = os.path.join(path_to_create, part)
            try:
                os.makedirs(path_to_create)
            except OSError:
                pass

            try:
                rq = self.github.get_raw(self.theme,
                                         element[label].files[path])
            except Exception, ex:
                log.error(str(ex))
                self.remove(removal_path)
                return

            f = open(os.path.join(path_to_create, split_path[-1]), "wb")
            f.write(rq)
            f.close()
        self.progress = 1.0
示例#4
0
class Collection(object):

    def __init__(self, theme, dest_folder):
        self.dest_folder = dest_folder
        self.extensions_descs = {}
        self.theme = theme
        self.github = Github("emesene")
        self._stop = False
        self._tree = None
        self.progress = 0.0

    def save_files(self, element, label):
        self._stop = False
        if not label in element:
            return
        keys = element[label].files.keys()
        for k, path in enumerate(keys):
            self.progress = k / float(len(keys))

            split_path = path.split("/")
            if self.theme.endswith("themes"):
                removal_path = os.path.join(self.dest_folder, split_path[0], split_path[1])
            else:
                removal_path = os.path.join(self.dest_folder, split_path[0])

            if self._stop:
                self.remove(removal_path)
                return

            path_to_create = self.dest_folder
            for part in split_path[:-1]:
                path_to_create = os.path.join(path_to_create, part)
            try:
                os.makedirs(path_to_create)
            except OSError:
                pass

            try:
                rq = self.github.get_raw(self.theme, element[label].files[path])
            except Exception, ex:
                log.exception(str(ex))
                self.remove(removal_path)
                return

            f = open(os.path.join(path_to_create, split_path[-1]), "wb")
            f.write(rq)
            f.close()
        self.progress = 0.0
示例#5
0
class Collection(object):

    def __init__(self, theme, dest_folder):
        self.dest_folder = dest_folder
        self.extensions_descs = {}
        self.theme = theme
        self.github = Github("emesene")

    def save_files(self, element, label):
        for el, k in element[label].files.items():
            els = el.split("/")
            path_to_create = ""
            for i in range(len(els) - 1):
                path_to_create = os.path.join(path_to_create, els[i])
            try:
                os.makedirs(os.path.join(self.dest_folder , path_to_create))
            except OSError:
                pass
            rq = self.github.get_raw(self.theme, k)
            f = open(os.path.join(self.dest_folder, el), "wb")
            f.write(rq)
    
    def download(self, download_item=None):
        for key in self.extensions_descs:
            element = self.extensions_descs[key]
            if download_item is not None:
                self.save_files(element, download_item)
            else:
                for label in element:
                    if element[label].todownload:
                        self.save_files(element, label)

    def plugin_name_from_file(self, file_name):
        pass


    def fetch(self):
        pass