img_extensions.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from copy import deepcopy
  2. __all__ = ['get_img_extensions', 'is_img_extension', 'set_img_extensions', 'add_img_extensions', 'del_img_extensions']
  3. IMG_EXTENSIONS = ('.png', '.jpg', '.jpeg') # singleton, kept public for bwd compat use
  4. _IMG_EXTENSIONS_SET = set(IMG_EXTENSIONS) # set version, private, kept in sync
  5. def _set_extensions(extensions):
  6. global IMG_EXTENSIONS
  7. global _IMG_EXTENSIONS_SET
  8. dedupe = set() # NOTE de-duping tuple while keeping original order
  9. IMG_EXTENSIONS = tuple(x for x in extensions if x not in dedupe and not dedupe.add(x))
  10. _IMG_EXTENSIONS_SET = set(extensions)
  11. def _valid_extension(x: str):
  12. return x and isinstance(x, str) and len(x) >= 2 and x.startswith('.')
  13. def is_img_extension(ext):
  14. return ext in _IMG_EXTENSIONS_SET
  15. def get_img_extensions(as_set=False):
  16. return deepcopy(_IMG_EXTENSIONS_SET if as_set else IMG_EXTENSIONS)
  17. def set_img_extensions(extensions):
  18. assert len(extensions)
  19. for x in extensions:
  20. assert _valid_extension(x)
  21. _set_extensions(extensions)
  22. def add_img_extensions(ext):
  23. if not isinstance(ext, (list, tuple, set)):
  24. ext = (ext,)
  25. for x in ext:
  26. assert _valid_extension(x)
  27. extensions = IMG_EXTENSIONS + tuple(ext)
  28. _set_extensions(extensions)
  29. def del_img_extensions(ext):
  30. if not isinstance(ext, (list, tuple, set)):
  31. ext = (ext,)
  32. extensions = tuple(x for x in IMG_EXTENSIONS if x not in ext)
  33. _set_extensions(extensions)