Source code for sand.tinyfunc

from shapely.geometry import shape
from shapely.ops import transform
from datetime import timedelta
import re

[docs] def check_name_contains(name: str, elements: list[str]): return all(e in name for e in elements)
[docs] def check_name_startswith(name: str, prefix: str): return name.startswith(prefix)
[docs] def check_name_endswith(name: str, suffix: str): return name.endswith(suffix)
[docs] def check_name_glob(name: str, regexp: str): return bool(re.fullmatch(regexp, name))
[docs] def end_of_day(date): if date.hour == 0 and date.minute == 0 and date.second == 0: date = date + timedelta(hours=23, minutes=59, seconds=59) return date return date
[docs] def change_lon_convention(geo): """Change longitude convention to (-180,180), assuming geo has coords as (lon,lat)""" return transform(lambda x,y: ([(a+180)%360-180 for a in x],y), geo)
[docs] def flip_coords(geo): """Flips the x and y coordinate values""" return transform(lambda x,y: (y,x), geo)
def _parse_geometry(geom): try: # If geom has a __geo_interface__ return shape(geom).wkt except AttributeError: if _tastes_like_wkt_polygon(geom): return geom raise ValueError( "geometry must be a WKT polygon str or have a __geo_interface__" ) def _tastes_like_wkt_polygon(geometry): try: return geometry.replace(", ", ",").replace(" ", "", 1).replace(" ", "+") except Exception: raise ValueError("Geometry must be in well-known text format")