Ejemplo n.º 1
0
    def download_missing(self, asset_id, progress_function=None):
        '''
        Downloads assets specified in 'asset_id' that are not already downloaded
        '''
        asset_info = FileTools.read_json(str(self.get_paths(asset_id)["index"]))
        asset_list = asset_info["objects"]

        if not (progress_function == None):
            progress_function("Finding missing assets", 0)
        asset_dict = dict()
        if (self._is_virtual(asset_info)):
            assets_base_path = self.BASE_PATH.joinpath("virtual/" + asset_id)
            if not assets_base_path.exists():
                for asset_name in asset_list.keys():
                    asset_url = URL([asset_list[asset_name]["hash"][:2], asset_list[asset_name]["hash"]], URL.RESOURCES)
                    asset_dict[asset_url] = str(assets_base_path.joinpath(asset_name))
        else:
            for asset in asset_list.values():
                asset_relative_path = [asset["hash"][:2], asset["hash"]]
                asset_url = URL(asset_relative_path, URL.RESOURCES)
                asset_path = self.BASE_PATH.joinpath(*(["objects"] + asset_relative_path))
                if not asset_path.exists():
                    asset_dict[asset_url] = str(asset_path)

        asset_count = 0
        asset_total_count = len(asset_dict)
        for asset_url in asset_dict.keys():
            asset_url_object = asset_url.url_object()
            FileTools.write_object(asset_dict[asset_url], asset_url_object)
            asset_count += 1
            if not (progress_function == None):
                progress_function("Downloading assets", asset_count/asset_total_count)
Ejemplo n.º 2
0
 def _communicate(self, endpoint, payload):
     '''
     Endpoint is a string path
     Payload is a JSON object
     '''
     headers = dict()
     headers["Content-Type"] = "application/json"
     headers["User-Agent"] = "YAMCL"
     url_obj = URL(endpoint, URL.AUTH)
     server_data = [None, None]
     try:
         url_request = url_obj.url_object(JSONTools.serialize_json(payload).encode(OnlineAccount.TEXT_ENCODING), headers)
         server_data[0] = True
         try:
             server_data[1] = JSONTools.read_json(url_request.read().decode(OnlineAccount.TEXT_ENCODING))
         except ValueError:
             server_data[1] = None
     except urllib.error.HTTPError as http_error:
         server_data[0] = False
         try:
             server_data[1] = JSONTools.read_json(http_error.read().decode(OnlineAccount.TEXT_ENCODING))
         except ValueError:
             server_data[1] = None
     return server_data
Ejemplo n.º 3
0
 def download_versions(self):
     '''
     Downloads the latest versions.json from the official servers
     '''
     tmp_file_object = URL("versions/versions.json", URL.DOWNLOAD).url_object()
     self.versions_json = JSONTools.read_json(tmp_file_object.read().decode("UTF-8"))