예제 #1
0
 def get(self, **kwargs) -> str:
     api_request = build_request(request, **kwargs)
     audio_file_name = api_request.query_params.get("file_name")
     if audio_file_name is not None:
         audio_file_absolute_path = concatenate_paths(
             AUDIO_FILES_DIR, audio_file_name)
         if file_exists(audio_file_absolute_path):
             id3_tag = read_audio_tag(audio_file_absolute_path)
             if id3_tag:
                 api_response = ApiResponse(HttpStatusCode.ok,
                                            id3_tag.to_serializable())
             else:
                 api_response = ApiResponse(HttpStatusCode.no_content,
                                            payload=None)
         else:
             api_response = ApiResponse(HttpStatusCode.not_found, {
                 "message":
                 "File does not exist: {}".format(audio_file_name)
             })
     else:
         api_response = ApiResponse(
             HttpStatusCode.bad_request,
             {"message": "Parameter file_name was not provided"})
     log_api_call(api_request, api_response)
     return build_response(api_response)
예제 #2
0
def read_audio_tag(input_audio_file_absolute_path: str) -> Optional[Id3Tag]:
    if file_exists(input_audio_file_absolute_path):
        file_ext = extract_extension(input_audio_file_absolute_path)
        if file_ext == Extension.MP3.value:
            return read_audio_tag_using(input_audio_file_absolute_path, EasyID3)
        elif file_ext == Extension.FLAC.value:
            return read_audio_tag_using(input_audio_file_absolute_path, FLAC)
        else:
            raise ValueError("Unsupported file for reading tags: {}".format(input_audio_file_absolute_path))
    else:
        logger.error("File {} does not exists, could not read tags".format(input_audio_file_absolute_path))
        return None
예제 #3
0
def read_file_meta(file_name: str) -> Optional[FileMeta]:
    if file_exists(file_name):
        file_stats = os.stat(file_name)
        last_access_utc = utc_timestamp_to_datetime(file_stats.st_atime)
        last_modification_utc = utc_timestamp_to_datetime(file_stats.st_mtime)
        created_on_utc = utc_timestamp_to_datetime(file_stats.st_ctime)
        return FileMeta(file_name=get_file_name(file_name),
                        size=file_stats.st_size,
                        last_access=last_access_utc,
                        last_modification=last_modification_utc,
                        created_on=created_on_utc)
    else:
        logger.warning("Requested file {} does not exist".format(file_name))
        return None
예제 #4
0
def read_audio_file_meta(
        absolute_path: str) -> Optional[CompressedAudioFileMeta]:
    if file_exists(absolute_path):
        audio_file = None
        audio_file_size = file_size_bytes(absolute_path)
        try:
            if extract_extension(absolute_path) == Extension.MP3.value:
                return _read_mp3_file_meta(absolute_path, audio_file_size)
            elif extract_extension(absolute_path) == Extension.FLAC.value:
                return _read_flac_file_meta(absolute_path, audio_file_size)
        except Exception as e:
            logger.exception(
                "Could not read audio file meta from {}. Details: {}".format(
                    absolute_path, e))
            if audio_file:
                audio_file.close()
    return None
예제 #5
0
 def test_checking_if_file_exists(self):
     assert_that(file_exists("/dev/null")).is_true()
     assert_that(file_exists("/dev/24e3re34d17")).is_false()
예제 #6
0
 def exists(self, file_name: str) -> bool:
     return file_exists(self._build_full_path(file_name))