Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,11 @@ jobs:

- name: Install R ${{ matrix.ver }} system dependencies
if: matrix.os == 'ubuntu-22.04'
run: sudo apt-get update; sudo apt-get install -y libcurl4-openssl-dev qpdf libgit2-dev libharfbuzz-dev libfribidi-dev
run: |
sudo apt-get update
sudo apt-get install -y \
libcurl4-openssl-dev qpdf libgit2-dev libharfbuzz-dev libfribidi-dev \
libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev libwebp-dev pkg-config
- name: Install R ${{ matrix.ver }} Rlang dependencies
run: |
Expand Down
8 changes: 4 additions & 4 deletions metaflow/_vendor/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
"""
metaflow._vendor is for vendoring dependencies of metaflow. Files
inside of metaflow._vendor should be considered immutable and
should only be updated to versions from upstream.
metaflow._vendor is for vendoring dependencies of metaflow. Files
inside of metaflow._vendor should be considered immutable and
should only be updated to versions from upstream.

This folder is generated by `python vendor.py`

If you would like to debundle the vendored dependencies, please
If you would like to debundle the vendored dependencies, please
reach out to the maintainers at chat.metaflow.org
"""
1 change: 1 addition & 0 deletions metaflow/_vendor/click/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
around a simple API that does not come with too much magic and is
composable.
"""

from .core import Argument
from .core import BaseCommand
from .core import Command
Expand Down
2 changes: 0 additions & 2 deletions metaflow/_vendor/click/_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,6 @@ def filename_to_ui(value):
value = value.decode(get_filesystem_encoding(), "replace")
return value


else:
import io

Expand Down Expand Up @@ -725,7 +724,6 @@ def get_winterm_size():
).srWindow
return win.Right - win.Left, win.Bottom - win.Top


else:

def _get_argv_encoding():
Expand Down
13 changes: 7 additions & 6 deletions metaflow/_vendor/click/_termui_impl.py
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,9 @@ def edit_file(self, filename):
environ = None
try:
c = subprocess.Popen(
'{} "{}"'.format(editor, filename), env=environ, shell=True,
'{} "{}"'.format(editor, filename),
env=environ,
shell=True,
)
exit_code = c.wait()
if exit_code != 0:
Expand Down Expand Up @@ -563,11 +565,11 @@ def _unquote_file(url):


def _translate_ch_to_exc(ch):
if ch == u"\x03":
if ch == "\x03":
raise KeyboardInterrupt()
if ch == u"\x04" and not WIN: # Unix-like, Ctrl+D
if ch == "\x04" and not WIN: # Unix-like, Ctrl+D
raise EOFError()
if ch == u"\x1a" and WIN: # Windows, Ctrl+Z
if ch == "\x1a" and WIN: # Windows, Ctrl+Z
raise EOFError()


Expand Down Expand Up @@ -614,14 +616,13 @@ def getchar(echo):
func = msvcrt.getwch

rv = func()
if rv in (u"\x00", u"\xe0"):
if rv in ("\x00", "\xe0"):
# \x00 and \xe0 are control characters that indicate special key,
# see above.
rv += func()
_translate_ch_to_exc(rv)
return rv


else:
import tty
import termios
Expand Down
1 change: 1 addition & 0 deletions metaflow/_vendor/click/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -1463,6 +1463,7 @@ class Parameter(object):
parameter. The old callback format will still work, but it will
raise a warning to give you a chance to migrate the code easier.
"""

param_type_name = "parameter"

def __init__(
Expand Down
2 changes: 1 addition & 1 deletion metaflow/_vendor/click/globals.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def pop_context():


def resolve_color_default(color=None):
""""Internal helper to get the default value of the color flag. If a
""" "Internal helper to get the default value of the color flag. If a
value is passed it's returned unchanged, otherwise it's looked up from
the current context.
"""
Expand Down
4 changes: 2 additions & 2 deletions metaflow/_vendor/click/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,9 +234,9 @@ def echo(message=None, file=None, nl=True, err=False, color=None):
message = text_type(message)

if nl:
message = message or u""
message = message or ""
if isinstance(message, text_type):
message += u"\n"
message += "\n"
else:
message += b"\n"

Expand Down
132 changes: 82 additions & 50 deletions metaflow/_vendor/imghdr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,23 @@
f"{__name__} was removed in Python 3.13. "
f"Please be aware that you are currently NOT using standard '{__name__}', "
f"but instead a separately installed 'standard-{__name__}'.",
DeprecationWarning, stacklevel=2
DeprecationWarning,
stacklevel=2,
)


#-------------------------#
# -------------------------#
# Recognize image headers #
#-------------------------#
# -------------------------#


def what(file, h=None):
"""Return the type of image contained in a file or byte stream."""
f = None
try:
if h is None:
if isinstance(file, (str, PathLike)):
f = open(file, 'rb')
f = open(file, "rb")
h = f.read(32)
else:
location = file.tell()
Expand All @@ -36,151 +38,181 @@ def what(file, h=None):
if res:
return res
finally:
if f: f.close()
if f:
f.close()
return None


#---------------------------------#
# ---------------------------------#
# Subroutines per image file type #
#---------------------------------#
# ---------------------------------#

tests = []


def test_jpeg(h, f):
"""Test for JPEG data with JFIF or Exif markers; and raw JPEG."""
if h[6:10] in (b'JFIF', b'Exif'):
return 'jpeg'
elif h[:4] == b'\xff\xd8\xff\xdb':
return 'jpeg'
if h[6:10] in (b"JFIF", b"Exif"):
return "jpeg"
elif h[:4] == b"\xff\xd8\xff\xdb":
return "jpeg"


tests.append(test_jpeg)


def test_png(h, f):
"""Verify if the image is a PNG."""
if h.startswith(b'\211PNG\r\n\032\n'):
return 'png'
if h.startswith(b"\211PNG\r\n\032\n"):
return "png"


tests.append(test_png)


def test_gif(h, f):
"""Verify if the image is a GIF ('87 or '89 variants)."""
if h[:6] in (b'GIF87a', b'GIF89a'):
return 'gif'
if h[:6] in (b"GIF87a", b"GIF89a"):
return "gif"


tests.append(test_gif)


def test_tiff(h, f):
"""Verify if the image is a TIFF (can be in Motorola or Intel byte order)."""
if h[:2] in (b'MM', b'II'):
return 'tiff'
if h[:2] in (b"MM", b"II"):
return "tiff"


tests.append(test_tiff)


def test_rgb(h, f):
"""test for the SGI image library."""
if h.startswith(b'\001\332'):
return 'rgb'
if h.startswith(b"\001\332"):
return "rgb"


tests.append(test_rgb)


def test_pbm(h, f):
"""Verify if the image is a PBM (portable bitmap)."""
if len(h) >= 3 and \
h[0] == ord(b'P') and h[1] in b'14' and h[2] in b' \t\n\r':
return 'pbm'
if len(h) >= 3 and h[0] == ord(b"P") and h[1] in b"14" and h[2] in b" \t\n\r":
return "pbm"


tests.append(test_pbm)


def test_pgm(h, f):
"""Verify if the image is a PGM (portable graymap)."""
if len(h) >= 3 and \
h[0] == ord(b'P') and h[1] in b'25' and h[2] in b' \t\n\r':
return 'pgm'
if len(h) >= 3 and h[0] == ord(b"P") and h[1] in b"25" and h[2] in b" \t\n\r":
return "pgm"


tests.append(test_pgm)


def test_ppm(h, f):
"""Verify if the image is a PPM (portable pixmap)."""
if len(h) >= 3 and \
h[0] == ord(b'P') and h[1] in b'36' and h[2] in b' \t\n\r':
return 'ppm'
if len(h) >= 3 and h[0] == ord(b"P") and h[1] in b"36" and h[2] in b" \t\n\r":
return "ppm"


tests.append(test_ppm)


def test_rast(h, f):
"""test for the Sun raster file."""
if h.startswith(b'\x59\xA6\x6A\x95'):
return 'rast'
if h.startswith(b"\x59\xa6\x6a\x95"):
return "rast"


tests.append(test_rast)


def test_xbm(h, f):
"""Verify if the image is a X bitmap (X10 or X11)."""
if h.startswith(b'#define '):
return 'xbm'
if h.startswith(b"#define "):
return "xbm"


tests.append(test_xbm)


def test_bmp(h, f):
"""Verify if the image is a BMP file."""
if h.startswith(b'BM'):
return 'bmp'
if h.startswith(b"BM"):
return "bmp"


tests.append(test_bmp)


def test_webp(h, f):
"""Verify if the image is a WebP."""
if h.startswith(b'RIFF') and h[8:12] == b'WEBP':
return 'webp'
if h.startswith(b"RIFF") and h[8:12] == b"WEBP":
return "webp"


tests.append(test_webp)


def test_exr(h, f):
"""verify is the image ia a OpenEXR fileOpenEXR."""
if h.startswith(b'\x76\x2f\x31\x01'):
return 'exr'
if h.startswith(b"\x76\x2f\x31\x01"):
return "exr"


tests.append(test_exr)

#--------------------#
# --------------------#
# Small test program #
#--------------------#
# --------------------#


def test():
import sys

recursive = 0
if sys.argv[1:] and sys.argv[1] == '-r':
if sys.argv[1:] and sys.argv[1] == "-r":
del sys.argv[1:2]
recursive = 1
try:
if sys.argv[1:]:
testall(sys.argv[1:], recursive, 1)
else:
testall(['.'], recursive, 1)
testall(["."], recursive, 1)
except KeyboardInterrupt:
sys.stderr.write('\n[Interrupted]\n')
sys.stderr.write("\n[Interrupted]\n")
sys.exit(1)


def testall(list, recursive, toplevel):
import sys
import os

for filename in list:
if os.path.isdir(filename):
print(filename + '/:', end=' ')
print(filename + "/:", end=" ")
if recursive or toplevel:
print('recursing down:')
print("recursing down:")
import glob
names = glob.glob(os.path.join(glob.escape(filename), '*'))

names = glob.glob(os.path.join(glob.escape(filename), "*"))
testall(names, recursive, 0)
else:
print('*** directory (use -r) ***')
print("*** directory (use -r) ***")
else:
print(filename + ':', end=' ')
print(filename + ":", end=" ")
sys.stdout.flush()
try:
print(what(filename))
except OSError:
print('*** not found ***')
print("*** not found ***")


if __name__ == '__main__':
if __name__ == "__main__":
test()
Loading
Loading