Skip to content

Commit 779b2d4

Browse files
committed
2 parents d339030 + 32c881d commit 779b2d4

11 files changed

Lines changed: 425 additions & 288 deletions

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.1.29"
2+
".": "0.1.30"
33
}

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
## [0.1.30](https://github.com/zalf-rpm/mas_python_common/compare/v0.1.29...v0.1.30) (2025-09-11)
4+
5+
6+
### Features
7+
8+
* new import logic ([#10](https://github.com/zalf-rpm/mas_python_common/issues/10)) ([ac97e69](https://github.com/zalf-rpm/mas_python_common/commit/ac97e69a512e143ffd0f3be0ec66383dc8ad97a7))
9+
310
## [0.1.29](https://github.com/zalf-rpm/mas_python_common/compare/v0.1.28...v0.1.29) (2025-08-29)
411

512

poetry.lock

Lines changed: 345 additions & 232 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "zalfmas-common"
3-
version = "0.1.29"
3+
version = "0.1.30"
44
description = "Common code for ZALF MAS projects"
55
readme = { file = "README.md", content-type = "text/markdown" }
66
authors = [{ name = "Michael Berg-Mohnicke", email = "michael.berg@zalf.de" }]
@@ -13,14 +13,15 @@ dependencies = [
1313
"pandas>=2.2.2,<3.0.0",
1414
"psutil>=6.1.0,<7.0.0",
1515
"tomlkit>=0.13.2,<0.14.0",
16-
"zalfmas-capnp-schemas (>=0.1.29,<0.2.0)",
16+
"zalfmas-capnp-schemas (>=0.1.36,<0.2.0)",
1717
]
1818

1919
[build-system]
2020
requires = ["poetry-core>=2.0.0,<3.0.0"]
2121
build-backend = "poetry.core.masonry.api"
2222

23-
# Example for referencing local packages in editable mode
23+
# Example for referencing local packages in editable mode just uncomment these lines while keeping the above it will overwrite
24+
# If the line for the package in the dependencies section is commented out it will have no effect
2425
# [tool.poetry.dependencies]
2526
# zalfmas-capnp-schemas = { path = "../mas_capnproto_schemas", develop = true }
2627

zalfmas_common/climate/common_climate_data_capnp_impl.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,17 @@
1414
# Copyright (C: Leibniz Centre for Agricultural Landscape Research (ZALF)
1515

1616
import json
17-
import os
18-
import sys
1917
from datetime import date
2018

2119
import numpy as np
22-
import zalfmas_capnp_schemas
2320
from pyproj import CRS
2421
from scipy.interpolate import NearestNDInterpolator
22+
from zalfmas_capnp_schemas import climate_capnp
2523

2624
from zalfmas_common import common
2725
from zalfmas_common import rect_ascii_grid_management as ragm
2826
from zalfmas_common import service as serv
2927

30-
sys.path.append(os.path.dirname(zalfmas_capnp_schemas.__file__))
31-
import climate_capnp
32-
3328

3429
def read_header(path_to_ascii_grid_file):
3530
"read metadata from esri ascii grid file"

zalfmas_common/climate/csv_file_based.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,16 @@
1616
import gzip
1717
import io
1818
import itertools
19-
import os
20-
import sys
2119
from collections import OrderedDict, deque
2220
from datetime import date
2321

2422
import pandas as pd
2523
import psutil
26-
import zalfmas_capnp_schemas
24+
from zalfmas_capnp_schemas import climate_capnp, geo_capnp
2725

2826
from zalfmas_common import common
2927
from zalfmas_common.climate import common_climate_data_capnp_impl as ccdi
3028

31-
sys.path.append(os.path.dirname(zalfmas_capnp_schemas.__file__))
32-
import climate_capnp
33-
import geo_capnp
34-
3529

3630
class TimeSeries(
3731
climate_capnp.TimeSeries.Server, common.Identifiable, common.Persistable

zalfmas_common/common.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -596,11 +596,15 @@ async def restore_context(
596596

597597

598598
class Identifiable(common_capnp.Identifiable.Server):
599-
600-
def __init__(self, id=None, name=None, description=None):
601-
self._id = id if id else str(uuid.uuid4())
602-
self._name = name if name else f"Unnamed_{self._id}"
603-
self._description = description if description else ""
599+
def __init__(
600+
self,
601+
id: str | None = None,
602+
name: str | None = None,
603+
description: str | None = None,
604+
):
605+
self._id: str = id if id else str(uuid.uuid4())
606+
self._name: str = name if name else f"Unnamed_{self._id}"
607+
self._description: str = description if description else ""
604608
self._init_info_func = None
605609

606610
@property
@@ -780,9 +784,11 @@ async def connect(self, sturdy_ref, cast_as=None):
780784
dyn_obj_reader = (
781785
await restorer.restore(localRef={"text": sr_token})
782786
).cap
783-
#node = restorer.schema.node
784-
#if node.displayName == f"{persistence_capnp.__name__}:Restorer": # and node.id == 11508422749279825468
785-
dyn_obj_reader = (await restorer.restore(localRef={"text": sr_token})).cap
787+
# node = restorer.schema.node
788+
# if node.displayName == f"{persistence_capnp.__name__}:Restorer": # and node.id == 11508422749279825468
789+
dyn_obj_reader = (
790+
await restorer.restore(localRef={"text": sr_token})
791+
).cap
786792
if dyn_obj_reader is not None:
787793
return (
788794
dyn_obj_reader.as_interface(cast_as)

zalfmas_common/csv.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,40 @@
77

88
# Authors:
99
# Susanne Schulz <susanne.schulz@zalf.de>
10-
# Michael Berg-Mohnicke <michael.berg@zalf.de>
10+
# Michael Berg-Mohnicke <michael.berg-mohnicke@zalf.de>
1111
#
1212
# Maintainers:
1313
# Currently maintained by the authors.
1414
#
15-
# Copyright (C: Leibniz Centre for Agricultural Landscape Research (ZALF)
15+
# Copyright (C: Leibniz Centre for Agricultural Landscape Research (ZALF))
1616

1717
import csv
1818

19-
def read_csv(path_to_setups_csv, key="id", key_type=(int,)):
19+
20+
def read_csv(
21+
path_to_csv, key="id", key_type=(int,), header_row_line=1, data_row_start=2
22+
):
2023
"""read sim setup from csv file"""
2124
composite_key = type(key) is tuple
2225
keys = {i: v for i, v in enumerate(key)} if composite_key else {0: key}
2326
key_types = {i: v for i, v in enumerate(key_type)}
2427

25-
with open(path_to_setups_csv) as _:
28+
with open(path_to_csv) as _:
2629
key_to_data = {}
2730
# determine seperator char
28-
dialect = csv.Sniffer().sniff(_.read(), delimiters=';,\t')
31+
dialect = csv.Sniffer().sniff(_.read(), delimiters=";,\t")
2932
_.seek(0)
3033
# read csv with seperator char
3134
reader = csv.reader(_, dialect)
35+
line = 1
36+
while line < header_row_line:
37+
next(reader)
38+
line += 1
3239
header_cols = next(reader)
40+
line += 1
41+
while line < data_row_start:
42+
next(reader)
43+
line += 1
3344

3445
for row in reader:
3546
data = {}
@@ -46,7 +57,9 @@ def read_csv(path_to_setups_csv, key="id", key_type=(int,)):
4657
value = key_types[0](value)
4758
data[header_col] = value
4859
if composite_key:
49-
key_vals = tuple([key_types.get(i, key_types[0])(data[k]) for i, k in keys.items()])
60+
key_vals = tuple(
61+
[key_types.get(i, key_types[0])(data[k]) for i, k in keys.items()]
62+
)
5063
else:
5164
key_vals = key_types[0](data[key])
5265
key_to_data[key_vals] = data

zalfmas_common/geo.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,10 @@
1010
#
1111
# Copyright (C: Leibniz Centre for Agricultural Landscape Research (ZALF)
1212

13-
import os
14-
import sys
1513
from collections import defaultdict
1614

17-
import zalfmas_capnp_schemas
1815
from pyproj import CRS, Transformer
19-
20-
sys.path.append(os.path.dirname(zalfmas_capnp_schemas.__file__))
21-
import geo_capnp
16+
from zalfmas_capnp_schemas import geo_capnp
2217

2318

2419
def name_to_struct_instance(name, x=None, y=None, default=None):

zalfmas_common/rect_ascii_grid_management.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,14 @@ def read_header(path_to_ascii_grid_file, no_of_header_lines=6):
2323
"""read metadata from esri ascii grid file"""
2424

2525
def read_header_from(f):
26-
possible_headers = ["ncols", "nrows", "xllcorner", "yllcorner", "cellsize", "nodata_value"]
26+
possible_headers = [
27+
"ncols",
28+
"nrows",
29+
"xllcorner",
30+
"yllcorner",
31+
"cellsize",
32+
"nodata_value",
33+
]
2734
metadata = {}
2835
header_str = ""
2936
for i in range(0, no_of_header_lines):
@@ -133,6 +140,7 @@ def load_grid_and_metadata_from_ascii_grid(
133140
grid = np.loadtxt(path_to_ascii_grid, dtype=datatype, skiprows=no_of_header_rows)
134141
return (grid, metadata)
135142

143+
136144
def load_grid_cached(path_to_grid, val_type, print_path=False):
137145
if not hasattr(load_grid_cached, "cache"):
138146
load_grid_cached.cache = {}
@@ -161,10 +169,12 @@ def value(lat, lon, return_no_data=False):
161169
return None
162170

163171
cache_entry = {
164-
"metadata": md, "grid": grid, "ll0r": ll0r,
172+
"metadata": md,
173+
"grid": grid,
174+
"ll0r": ll0r,
165175
"col": lambda lon: col(lon),
166176
"row": lambda lat: row(lat),
167-
"value": lambda lat, lon, ret_no_data: value(lat, lon, ret_no_data)
177+
"value": lambda lat, lon, ret_no_data: value(lat, lon, ret_no_data),
168178
}
169179
load_grid_cached.cache[path_to_grid] = cache_entry
170180
return cache_entry
@@ -196,10 +206,13 @@ def create_climate_geoGrid_interpolator_from_json_file(
196206

197207
return NearestNDInterpolator(np.array(points), np.array(values))
198208

209+
199210
def get_lat_0_lon_0_resolution_from_grid_metadata(metadata):
200-
lat_0 = float(metadata["yllcorner"]) \
201-
+ (float(metadata["cellsize"]) * float(metadata["nrows"])) \
202-
- (float(metadata["cellsize"]) / 2.0)
211+
lat_0 = (
212+
float(metadata["yllcorner"])
213+
+ (float(metadata["cellsize"]) * float(metadata["nrows"]))
214+
- (float(metadata["cellsize"]) / 2.0)
215+
)
203216
lon_0 = float(metadata["xllcorner"]) + (float(metadata["cellsize"]) / 2.0)
204217
resolution = float(metadata["cellsize"])
205-
return {"lat_0": lat_0, "lon_0": lon_0, "res": resolution}
218+
return {"lat_0": lat_0, "lon_0": lon_0, "res": resolution}

0 commit comments

Comments
 (0)