Ejemplo n.º 1
0
    def test_copies_file(self, tmpdir):
        source_dir = tmpdir.mkdir("source")
        source = source_dir.join("test.txt")
        source.write("test content")
        assert len(source_dir.listdir()) == 1

        target_dir = tmpdir.mkdir("target")
        target = target_dir.join("test.txt")
        assert len(target_dir.listdir()) == 0

        media_file = MediaFile(str(source))
        media_file.copy_self_to_target(str(target))

        assert len(target_dir.listdir()) == len(source_dir.listdir()) == 1
        assert target.read() == "test content"
Ejemplo n.º 2
0
    def test_copies_file(self, tmpdir):
        source_dir = tmpdir.mkdir("source")
        source = source_dir.join("test.txt")
        source.write("test content")
        assert len(source_dir.listdir()) == 1

        target_dir = tmpdir.mkdir("target")
        target = target_dir.join("test.txt")
        assert len(target_dir.listdir()) == 0

        media_file = MediaFile(target, "test.txt",
                               MediaFile.ManagementType.TO_BE_CLONED, source)
        media_file.copy_source_to_target()

        assert len(target_dir.listdir()) == len(source_dir.listdir()) == 1
        assert target.read() == "test content"
Ejemplo n.º 3
0
    def deck_parts_to_source(self):
        ca_json = {}

        # Headers
        ca_json.update(self.headers.get_data())

        # Media
        media_files = self.notes.referenced_media_files
        ca_json.setdefault(CAKeys.MEDIA_FILES.value, list(sorted([file.filename for file in media_files])))

        for file in media_files:
            filename = file.filename
            if filename in self.crowd_anki_export.known_media:
                self.crowd_anki_export.known_media[filename].set_override(file.source_loc)
            else:
                self.crowd_anki_export.known_media.setdefault(
                    filename, MediaFile(self.crowd_anki_export.media_loc + filename,
                                        filename, MediaFile.ManagementType.TO_BE_CLONED, file.source_loc)
                )

        # Note Models
        note_models = [DeckPartNoteModel.create(name) for name in self.notes.get_all_known_note_model_names()]

        ca_json.setdefault(CAKeys.NOTE_MODELS.value, [model.get_data() for model in note_models])

        note_models_dict_id_name = {model.name: model.id for model in note_models}

        # Notes
        ca_json.setdefault(CAKeys.NOTES.value, self.notes_to_source(note_models_dict_id_name))

        ordered_keys = OrderedDict(sorted(ca_json.items()))

        self.crowd_anki_export.set_data(ordered_keys)
Ejemplo n.º 4
0
    def test_without_override(self):
        loc = "place/loc/file.txt"

        media_file = MediaFile(loc)

        assert isinstance(media_file, MediaFile)
        assert media_file.file_path == loc
        assert media_file.filename == "file.txt"
Ejemplo n.º 5
0
    def find_all_deck_part_media_files(self):
        self.known_media_files_dict = {}

        for full_path in find_all_files_in_directory(
                self.global_config.deck_parts.media_files, recursive=True):
            filename = filename_from_full_path(full_path)
            self._register_media_file(MediaFile(full_path, filename))

        logging.debug(f"Media files found: {len(self.known_media_files_dict)}")
Ejemplo n.º 6
0
    def test_without_override(self):
        loc = "test loc"
        name = "name"

        media_file = MediaFile(loc, name)

        assert isinstance(media_file, MediaFile)
        assert media_file.source_loc == media_file.target_loc == loc
        assert media_file.filename == name
        assert media_file.man_type == MediaFile.ManagementType.EXISTS
Ejemplo n.º 7
0
    def from_full_path_list(known_files: list):
        files: Dict[str, MediaFile] = dict()

        for full_path in known_files:
            file = MediaFile.create_or_get(full_path)
            if file.filename not in files.keys():
                files[file.filename] = file
            else:
                raise NameError(f"Duplicate files with same filename '{file.filename}' in group")

        return files
Ejemplo n.º 8
0
    def test_with_override(self):
        source_loc = "test loc"
        target_loc = "other loc"
        name = "name"
        man_type = MediaFile.ManagementType.TO_BE_CLONED

        media_file = MediaFile(target_loc, name, man_type, source_loc)

        assert isinstance(media_file, MediaFile)
        assert media_file.target_loc == target_loc
        assert media_file.source_loc == source_loc
        assert media_file.filename == name
        assert media_file.man_type == man_type
Ejemplo n.º 9
0
    def find_all_media(self):
        self.known_media = {}
        self.media_loc = self.folder_location + "media/"  # TODO: Make media folder if not exists
        self.contains_media = Path(self.media_loc).is_dir()

        if not self.contains_media:
            return

        media_files = find_all_files_in_directory(self.media_loc)

        for full_path in media_files:
            filename = filename_from_full_path(full_path)
            self.known_media.setdefault(filename,
                                        MediaFile(full_path, filename))

        logging.info(
            f"CrowdAnkiExport found {len(self.known_media)} media files in folder"
        )
Ejemplo n.º 10
0
def media_file_test1() -> MediaFile:
    return MediaFile("loc", "name")
Ejemplo n.º 11
0
 def new_media_file(self, filename, source_loc):
     self._register_media_file(
         MediaFile(self.global_config.deck_parts.media_files + filename,
                   filename, MediaFile.ManagementType.TO_BE_CLONED,
                   source_loc))
Ejemplo n.º 12
0
def media_file_test1() -> MediaFile:
    return MediaFile("place/loc/file.txt")