Source code for panel.util.checks
from __future__ import annotations
import datetime as dt
import os
import sys
from typing import Any, Iterable
import numpy as np
import param
__all__ = (
"datetime_types",
"is_dataframe",
"is_holoviews",
"is_number",
"is_parameterized",
"is_series",
"isdatetime",
"isfile",
"isIn",
"isurl",
)
datetime_types = (np.datetime64, dt.datetime, dt.date)
[docs]def isfile(path: str) -> bool:
"""Safe version of os.path.isfile robust to path length issues on Windows"""
try:
return os.path.isfile(path)
except (TypeError, ValueError): # path too long for Windows
return False
def isurl(obj: Any, formats: Iterable[str] | None = None) -> bool:
if not isinstance(obj, str):
return False
lower_string = obj.lower().split('?')[0].split('#')[0]
return (
lower_string.startswith('http://')
or lower_string.startswith('https://')
) and (formats is None or any(lower_string.endswith('.'+fmt) for fmt in formats))
def is_dataframe(obj) -> bool:
if 'pandas' not in sys.modules:
return False
import pandas as pd
return isinstance(obj, pd.DataFrame)
def is_series(obj) -> bool:
if 'pandas' not in sys.modules:
return False
import pandas as pd
return isinstance(obj, pd.Series)
[docs]def isIn(obj, objs):
"""
Checks if the object is in the list of objects safely.
"""
for o in objs:
if o is obj:
return True
try:
if o == obj:
return True
except Exception:
pass
return False
[docs]def is_parameterized(obj) -> bool:
"""
Whether an object is a Parameterized class or instance.
"""
return (isinstance(obj, param.Parameterized) or
(isinstance(obj, type) and issubclass(obj, param.Parameterized)))
[docs]def is_holoviews(obj: Any) -> bool:
"""
Whether the object is a HoloViews type that can be rendered.
"""
if 'holoviews' not in sys.modules:
return False
from holoviews.core.dimension import Dimensioned
from holoviews.plotting import Plot
return isinstance(obj, (Dimensioned, Plot))
[docs]def isdatetime(value) -> bool:
"""
Whether the array or scalar is recognized datetime type.
"""
if is_series(value) and len(value):
return isinstance(value.iloc[0], datetime_types)
elif isinstance(value, np.ndarray):
return (
value.dtype.kind == "M" or
(value.dtype.kind == "O" and len(value) != 0 and
isinstance(value[0], datetime_types))
)
elif isinstance(value, list):
return all(isinstance(d, datetime_types) for d in value)
else:
return isinstance(value, datetime_types)
def is_number(s: Any) -> bool:
try:
float(s)
return True
except ValueError:
return False