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
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ requires = [
]

[tool.setuptools_scm]
fallback_version = "0.3.8"
fallback_version = "0.3.8"
89 changes: 56 additions & 33 deletions salem/__init__.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
"""
Salem package
"""
from __future__ import division
"""Salem package."""

from os import path
from os import makedirs
import sys
from collections.abc import Callable
from functools import wraps
from pathlib import Path

import pyproj

from .version import __version__


def lazy_property(fn):
"""Decorator that makes a property lazy-evaluated."""

def lazy_property(fn: Callable) -> Callable:
"""Lazy-evaluate a property (Decorator)."""
attr_name = '_lazy_' + fn.__name__

@property
@wraps(fn)
def _lazy_property(self):
def _lazy_property(self: object) -> object:
if not hasattr(self, attr_name):
setattr(self, attr_name, fn(self))
return getattr(self, attr_name)
Expand All @@ -32,44 +28,71 @@ def _lazy_property(self):
wgs84 = pyproj.Proj(proj='latlong', datum='WGS84')

# Path to the cache directory
cache_dir = path.join(path.expanduser('~'), '.salem_cache')
if not path.exists(cache_dir):
makedirs(cache_dir)
download_dir = path.join(cache_dir, 'downloads')
if not path.exists(download_dir):
makedirs(download_dir)
cache_dir = Path.home() / '.salem_cache'
cache_dir.mkdir(exist_ok=True)
download_dir = cache_dir / 'downloads'
download_dir.mkdir(exist_ok=True)

sample_data_gh_commit = '454bf696324000d198f574a1bf5bc56e3e489051'
sample_data_dir = path.join(cache_dir, 'salem-sample-data-' +
sample_data_gh_commit)
sample_data_dir = cache_dir / f'salem-sample-data-{sample_data_gh_commit}'

# python version
python_version = 'py3'
if sys.version_info.major == 2:
python_version = 'py2'

# API
from salem.gis import *
from salem.datasets import *
from salem.sio import read_shapefile, read_shapefile_to_grid, grid_from_dataset
from salem.sio import (open_xr_dataset, open_metum_dataset,
open_wrf_dataset, open_mf_wrf_dataset)
from salem.sio import DataArrayAccessor, DatasetAccessor
from salem.datasets import (
WRF,
EsriITMIX,
GeoDataset,
GeoNetcdf,
GeoTiff,
GoogleCenterMap,
GoogleVisibleMap,
)
from salem.gis import (
Grid,
check_crs,
googlestatic_mercator_grid,
mercator_grid,
proj_is_latlong,
proj_is_same,
proj_to_cartopy,
transform_geometry,
transform_geopandas,
transform_proj,
)
from salem.sio import (
DataArrayAccessor,
DatasetAccessor,
grid_from_dataset,
open_metum_dataset,
open_mf_wrf_dataset,
open_wrf_dataset,
open_xr_dataset,
read_shapefile,
read_shapefile_to_grid,
)
from salem.utils import get_demo_file, reduce

try:
from salem.graphics import get_cmap, DataLevels, Map
from salem.graphics import DataLevels, Map, get_cmap
except ImportError as err:
if 'matplotlib' not in str(err):
raise
if 'matplotlib' not in str(err):
raise

def get_cmap() -> None:
msg = 'requires matplotlib'
raise ImportError(msg)

def get_cmap():
raise ImportError('requires matplotlib')
def DataLevels() -> None:
msg = 'requires matplotlib'
raise ImportError(msg)

def DataLevels():
raise ImportError('requires matplotlib')
def Map() -> None:
msg = 'requires matplotlib'
raise ImportError(msg)

def Map():
raise ImportError('requires matplotlib')

from salem.wrftools import geogrid_simulator
Loading