コード例 #1
0
 def test_can_request_project_instructions_for_id(self):
     for (project_id, expected_project_instructions
          ) in TEST_PROJECT_ID_TO_INSTRUCTIONS_MAP.iteritems():
         extracted_project_instructions = scratchwebapi.request_project_instructions_for(
             project_id)
         assert extracted_project_instructions == expected_project_instructions, \
                "'{}' is not equal to '{}'".format(extracted_project_instructions, expected_project_instructions)
コード例 #2
0
    def __init__(self,
                 project_base_path,
                 name=None,
                 project_id=None,
                 progress_bar=None):
        def read_md5_to_resource_path_mapping():
            md5_to_resource_path_map = {}
            # TODO: clarify that only files with extension are covered
            for res_file_path in glob.glob(
                    os.path.join(project_base_path, "*.*")):
                resource_name = common.md5_hash(
                    res_file_path) + os.path.splitext(res_file_path)[1]
                md5_to_resource_path_map[resource_name] = res_file_path
            try:
                # penLayer is no regular resource file
                del md5_to_resource_path_map[self['penLayerMD5']]
            except KeyError:
                # TODO: include penLayer download in webapi
                pass
            assert self['penLayerMD5'] not in md5_to_resource_path_map
            return md5_to_resource_path_map

        super(Project, self).__init__(
            self.raw_project_code_from_project_folder_path(project_base_path))
        self.project_base_path = project_base_path
        self.project_id = self.get_info().get(
            "projectID") if project_id is None else project_id

        if not self.project_id:
            self.project_id = "0"
            self.name = name if name is not None else "Untitled"
            self.instructions = self.notes_and_credits = None
            self.automatic_screenshot_image_url = None
        else:
            self.name = name if name is not None else scratchwebapi.request_project_title_for(
                self.project_id)
            self.instructions = scratchwebapi.request_project_instructions_for(
                self.project_id)
            self.notes_and_credits = scratchwebapi.request_project_notes_and_credits_for(
                self.project_id)
            self.automatic_screenshot_image_url = "{}{}.png".format(
                scratchwebapi.SCRATCH_PROJECT_IMAGE_BASE_URL, self.project_id)

        if progress_bar != None:
            progress_bar.update(ProgressType.DETAILS)  # details step passed

        _log.info(
            "Scratch project: %s%s", self.name,
            "(ID: {})".format(self.project_id) if self.project_id > 0 else "")

        self.name = self.name.strip(
        ) if self.name != None else "Unknown Project"
        self.md5_to_resource_path_map = read_md5_to_resource_path_mapping()
        self.global_user_lists = self.objects[0].get_lists()

        for scratch_object in self.objects:
            verify_resources_of_scratch_object(scratch_object,
                                               self.md5_to_resource_path_map,
                                               self.project_base_path)

        listened_keys = []
        for scratch_obj in self.objects:
            for script in scratch_obj.scripts:
                if script.type == SCRIPT_KEY_PRESSED:
                    assert len(script.arguments) == 1
                    listened_keys += [(argument, "listenedKeys")
                                      for argument in script.arguments]

        try:
            self.listened_keys.union(listened_keys)
        except AttributeError:
            self.listened_keys = set(listened_keys)
        # TODO: rename
        self.background_md5_names = set(
            [costume[JsonKeys.COSTUME_MD5] for costume in self.get_costumes()])

        result = self.find_unused_resources_name_and_filepath()
        self.unused_resource_names = result[0] if len(result) > 0 else []
        self.unused_resource_paths = result[1] if len(result) > 0 else []

        for unused_path in self.unused_resource_paths:
            _log.warning("Project folder contains unused resource file: '%s'. These " \
                         "will be omitted for Catrobat project.",
                         os.path.basename(unused_path))
コード例 #3
0
 def test_can_request_project_instructions_for_id(self):
     for (project_id, expected_project_instructions) in TEST_PROJECT_ID_TO_INSTRUCTIONS_MAP.iteritems():
         extracted_project_instructions = scratchwebapi.request_project_instructions_for(project_id)
         assert extracted_project_instructions == expected_project_instructions, \
                "'{}' is not equal to '{}'".format(extracted_project_instructions, expected_project_instructions)
コード例 #4
0
ファイル: scratch.py プロジェクト: Catrobat/ScratchToCatrobat
    def __init__(self, project_base_path, name=None, id_=None, progress_bar=None):
        def read_md5_to_resource_path_mapping():
            md5_to_resource_path_map = {}
            # TODO: clarify that only files with extension are covered
            for res_file_path in glob.glob(os.path.join(project_base_path, "*.*")):
                resource_name = common.md5_hash(res_file_path) + os.path.splitext(res_file_path)[1]
                md5_to_resource_path_map[resource_name] = res_file_path
            try:
                # penLayer is no regular resource file
                del md5_to_resource_path_map[self["penLayerMD5"]]
            except KeyError:
                # TODO: include penLayer download in webapi
                pass
            assert self["penLayerMD5"] not in md5_to_resource_path_map
            return md5_to_resource_path_map

        super(Project, self).__init__(self.raw_project_code_from_project_folder_path(project_base_path))
        self.project_base_path = project_base_path

        if id_ != None:
            self.project_id = id_
        else:
            self.project_id = self.get_info().get("projectID")

        if not self.project_id:
            self.project_id = "0"
            self.name = name if name is not None else "Untitled"
            self.instructions = self.notes_and_credits = None
            self.automatic_screenshot_image_url = None
        else:
            self.name = name if name is not None else scratchwebapi.request_project_title_for(self.project_id)
            self.instructions = scratchwebapi.request_project_instructions_for(self.project_id)
            self.notes_and_credits = scratchwebapi.request_project_notes_and_credits_for(self.project_id)
            self.automatic_screenshot_image_url = scratchwebapi.request_project_image_url_for(self.project_id)

        if progress_bar != None:
            progress_bar.update(ProgressType.DETAILS)  # details step passed

        _log.info("Scratch project: %s%s", self.name, "(ID: {})".format(self.project_id) if self.project_id > 0 else "")

        self.name = self.name.strip() if self.name != None else "Unknown Project"
        self.md5_to_resource_path_map = read_md5_to_resource_path_mapping()
        self.global_user_lists = self.objects[0].get_lists()

        for scratch_object in self.objects:
            verify_resources_of_scratch_object(scratch_object, self.md5_to_resource_path_map, self.project_base_path)

        listened_keys = []
        for scratch_obj in self.objects:
            for script in scratch_obj.scripts:
                if script.type == SCRIPT_KEY_PRESSED:
                    assert len(script.arguments) == 1
                    listened_keys += script.arguments
        self.listened_keys = set(listened_keys)

        # TODO: rename
        self.background_md5_names = set([costume[JsonKeys.COSTUME_MD5] for costume in self.get_costumes()])

        result = self.find_unused_resources_name_and_filepath()
        self.unused_resource_names = result[0] if len(result) > 0 else []
        self.unused_resource_paths = result[1] if len(result) > 0 else []

        for unused_path in self.unused_resource_paths:
            _log.warning(
                "Project folder contains unused resource file: '%s'. These " "will be omitted for Catrobat project.",
                os.path.basename(unused_path),
            )