core.common: move mime-related stuff to my.core.mime
no backward compat, unlikely it was used by anyone else
This commit is contained in:
parent
c45c51af22
commit
88f3c17c27
3 changed files with 36 additions and 23 deletions
|
@ -2,7 +2,6 @@ from glob import glob as do_glob
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from dataclasses import is_dataclass, asdict as dataclasses_asdict
|
from dataclasses import is_dataclass, asdict as dataclasses_asdict
|
||||||
import functools
|
|
||||||
import os
|
import os
|
||||||
from typing import (
|
from typing import (
|
||||||
Any,
|
Any,
|
||||||
|
@ -117,27 +116,6 @@ def get_files(
|
||||||
return tuple(paths)
|
return tuple(paths)
|
||||||
|
|
||||||
|
|
||||||
@functools.lru_cache(1)
|
|
||||||
def _magic():
|
|
||||||
import magic # type: ignore
|
|
||||||
return magic.Magic(mime=True)
|
|
||||||
|
|
||||||
|
|
||||||
# TODO could reuse in pdf module?
|
|
||||||
import mimetypes # todo do I need init()?
|
|
||||||
# todo wtf? fastermime thinks it's mime is application/json even if the extension is xz??
|
|
||||||
# whereas magic detects correctly: application/x-zstd and application/x-xz
|
|
||||||
def fastermime(path: PathIsh) -> str:
|
|
||||||
paths = str(path)
|
|
||||||
# mimetypes is faster
|
|
||||||
(mime, _) = mimetypes.guess_type(paths)
|
|
||||||
if mime is not None:
|
|
||||||
return mime
|
|
||||||
# magic is slower but returns more stuff
|
|
||||||
# TODO Result type?; it's kinda racey, but perhaps better to let the caller decide?
|
|
||||||
return _magic().from_file(paths)
|
|
||||||
|
|
||||||
|
|
||||||
Json = Dict[str, Any]
|
Json = Dict[str, Any]
|
||||||
|
|
||||||
|
|
||||||
|
|
34
my/core/mime.py
Normal file
34
my/core/mime.py
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
"""
|
||||||
|
Utils for mime/filetype handling
|
||||||
|
"""
|
||||||
|
|
||||||
|
from .common import assert_subpackage; assert_subpackage(__name__)
|
||||||
|
|
||||||
|
import functools
|
||||||
|
|
||||||
|
from .common import PathIsh
|
||||||
|
|
||||||
|
|
||||||
|
@functools.lru_cache(1)
|
||||||
|
def _magic():
|
||||||
|
import magic # type: ignore
|
||||||
|
|
||||||
|
# TODO also has uncompess=True? could be useful
|
||||||
|
return magic.Magic(mime=True)
|
||||||
|
|
||||||
|
|
||||||
|
# TODO could reuse in pdf module?
|
||||||
|
import mimetypes # todo do I need init()?
|
||||||
|
|
||||||
|
|
||||||
|
# todo wtf? fastermime thinks it's mime is application/json even if the extension is xz??
|
||||||
|
# whereas magic detects correctly: application/x-zstd and application/x-xz
|
||||||
|
def fastermime(path: PathIsh) -> str:
|
||||||
|
paths = str(path)
|
||||||
|
# mimetypes is faster, so try it first
|
||||||
|
(mime, _) = mimetypes.guess_type(paths)
|
||||||
|
if mime is not None:
|
||||||
|
return mime
|
||||||
|
# magic is slower but handles more types
|
||||||
|
# TODO Result type?; it's kinda racey, but perhaps better to let the caller decide?
|
||||||
|
return _magic().from_file(paths)
|
|
@ -15,9 +15,10 @@ from typing import Optional, NamedTuple, Iterator, Iterable, List
|
||||||
|
|
||||||
from geopy.geocoders import Nominatim # type: ignore
|
from geopy.geocoders import Nominatim # type: ignore
|
||||||
|
|
||||||
from my.core.common import LazyLogger, fastermime
|
from my.core import LazyLogger
|
||||||
from my.core.error import Res, sort_res_by
|
from my.core.error import Res, sort_res_by
|
||||||
from my.core.cachew import cache_dir, mcachew
|
from my.core.cachew import cache_dir, mcachew
|
||||||
|
from my.core.mime import fastermime
|
||||||
|
|
||||||
from my.config import photos as config # type: ignore[attr-defined]
|
from my.config import photos as config # type: ignore[attr-defined]
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue