Skip to content

Commit 90636e7

Browse files
authored
fix many deprecation warnings (#365)
mainly from marshmallow and cpython itself
1 parent 1ca54f1 commit 90636e7

File tree

10 files changed

+189
-135
lines changed

10 files changed

+189
-135
lines changed

terracotta/config.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,9 @@ class TerracottaSettings(NamedTuple):
116116
}
117117

118118

119-
def _is_writable(path: str) -> bool:
120-
return os.access(os.path.dirname(path) or os.getcwd(), os.W_OK)
119+
def _is_writable(path: str) -> None:
120+
if not os.access(os.path.dirname(path) or os.getcwd(), os.W_OK):
121+
raise ValidationError(f"Path {path} is not writable.")
121122

122123

123124
class SettingSchema(Schema):

terracotta/drivers/geotiff_raster_store.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def submit_to_executor(task: Callable[..., Any]) -> Future:
5858
future = _executor.submit(task)
5959
except BrokenProcessPool:
6060
# re-create executor and try again
61-
logger.warn("Re-creating broken process pool")
61+
logger.warning("Re-creating broken process pool")
6262
_executor = create_executor()
6363
future = _executor.submit(task)
6464

terracotta/expressions.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,11 @@ def visit_Call(self, node: ast.Call) -> Any:
125125
)
126126
return func(*map(self.visit, node.args))
127127

128-
def visit_Num(self, node: ast.Num) -> Any:
129-
return node.n
128+
def visit_Constant(self, node: ast.Constant) -> Any:
129+
if isinstance(node.value, (int, float)):
130+
return node.value
131+
else:
132+
self.generic_visit(node)
130133

131134
def visit_UnaryOp(self, node: ast.UnaryOp) -> Any:
132135
op_type = type(node.op)

terracotta/server/colormap.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@
1414

1515

1616
class ColormapEntrySchema(Schema):
17-
value = fields.Number(required=True)
18-
rgba = fields.List(
19-
fields.Number(), required=True, validate=validate.Length(equal=4)
20-
)
17+
value = fields.Float(required=True)
18+
rgba = fields.List(fields.Float(), required=True, validate=validate.Length(equal=4))
2119

2220

2321
class ColormapSchema(Schema):
@@ -29,19 +27,29 @@ class Meta:
2927
unknown = EXCLUDE
3028

3129
stretch_range = fields.List(
32-
fields.Number(),
30+
fields.Float(),
3331
validate=validate.Length(equal=2),
3432
required=True,
35-
description="Minimum and maximum value of colormap as JSON array "
36-
"(same as for /singleband and /rgb)",
33+
metadata={
34+
"description": (
35+
"Minimum and maximum value of colormap as JSON array "
36+
"(same as for /singleband and /rgb)",
37+
),
38+
},
3739
)
3840
colormap = fields.String(
39-
description="Name of color map to use (for a preview see "
40-
"https://terracotta-python.readthedocs.io/en/latest/reference/colormaps.html)",
41-
missing=None,
41+
metadata={
42+
"description": (
43+
"Name of color map to use (for a preview see "
44+
"https://terracotta-python.readthedocs.io/en/latest/reference/colormaps.html)",
45+
),
46+
},
47+
load_default=None,
4248
validate=validate.OneOf(AVAILABLE_CMAPS),
4349
)
44-
num_values = fields.Int(description="Number of values to return", missing=255)
50+
num_values = fields.Int(
51+
metadata={"description": "Number of values to return"}, load_default=255
52+
)
4553

4654
@pre_load
4755
def process_ranges(self, data: Mapping[str, Any], **kwargs: Any) -> Dict[str, Any]:

terracotta/server/compute.py

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,46 +15,54 @@
1515

1616
class ComputeQuerySchema(Schema):
1717
keys = fields.String(
18-
required=True, description="Keys identifying dataset, in order"
18+
required=True, metadata={"description": "Keys identifying dataset, in order"}
1919
)
20-
tile_z = fields.Int(required=True, description="Requested zoom level")
21-
tile_y = fields.Int(required=True, description="y coordinate")
22-
tile_x = fields.Int(required=True, description="x coordinate")
20+
tile_z = fields.Int(required=True, metadata={"description": "Requested zoom level"})
21+
tile_y = fields.Int(required=True, metadata={"description": "y coordinate"})
22+
tile_x = fields.Int(required=True, metadata={"description": "x coordinate"})
2323

2424

2525
def _operator_field(i: int) -> fields.String:
26-
return fields.String(description=f"Last key of variable v{i} in given expression.")
26+
return fields.String(
27+
metadata={"description": f"Last key of variable v{i} in given expression."}
28+
)
2729

2830

2931
class ComputeOptionSchema(Schema):
3032
class Meta:
3133
unknown = EXCLUDE
3234

3335
expression = fields.String(
34-
description="Mathematical expression to execute.",
35-
example="(v1 - v2) / (v1 + v2)",
36+
metadata={
37+
"description": "Mathematical expression to execute.",
38+
"example": "(v1 - v2) / (v1 + v2)",
39+
},
3640
required=True,
3741
)
3842

3943
stretch_range = fields.List(
40-
fields.Number(allow_none=True),
44+
fields.Float(allow_none=True),
4145
validate=validate.Length(equal=2),
42-
example="[0,1]",
43-
description="Stretch range to use as JSON array.",
46+
metadata={
47+
"description": "Stretch range to use as JSON array.",
48+
"example": "[0,1]",
49+
},
4450
required=True,
4551
)
4652

4753
colormap = fields.String(
48-
description="Colormap to apply to image (see /colormap).",
54+
metadata={"description": "Colormap to apply to image (see /colormap)."},
4955
validate=validate.OneOf(("explicit", *AVAILABLE_CMAPS)),
50-
missing=None,
56+
load_default=None,
5157
)
5258

5359
tile_size = fields.List(
5460
fields.Integer(),
5561
validate=validate.Length(equal=2),
56-
example="[256,256]",
57-
description="Pixel dimensions of the returned PNG image as JSON list.",
62+
metadata={
63+
"description": "Pixel dimensions of the returned PNG image as JSON list.",
64+
"example": "[256,256]",
65+
},
5866
)
5967

6068
v1 = _operator_field(1)
@@ -111,7 +119,7 @@ def get_compute(tile_z: int, tile_y: int, tile_x: int, keys: str = "") -> Respon
111119

112120
class ComputePreviewSchema(Schema):
113121
keys = fields.String(
114-
required=True, description="Keys identifying dataset, in order"
122+
required=True, metadata={"description": "Keys identifying dataset, in order"}
115123
)
116124

117125

terracotta/server/datasets.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,25 @@ class Meta:
1616
unknown = INCLUDE
1717

1818
# placeholder values to document keys
19-
key1 = fields.String(example="value1", description="Value of key1", dump_only=True)
20-
key2 = fields.String(example="value2", description="Value of key2", dump_only=True)
19+
key1 = fields.String(
20+
metadata={"description": "Value of key1", "example": "value1"},
21+
dump_only=True,
22+
)
23+
key2 = fields.String(
24+
metadata={"description": "Value of key2", "example": "value2"},
25+
dump_only=True,
26+
)
2127

2228
# real options
2329
limit = fields.Integer(
24-
description="Maximum number of returned datasets per page",
25-
missing=100,
30+
metadata={"description": "Maximum number of returned datasets per page"},
31+
load_default=100,
2632
validate=validate.Range(min=0),
2733
)
2834
page = fields.Integer(
29-
missing=0, description="Current dataset page", validate=validate.Range(min=0)
35+
metadata={"description": "Current dataset page"},
36+
load_default=0,
37+
validate=validate.Range(min=0),
3038
)
3139

3240
@post_load
@@ -41,19 +49,21 @@ def list_items(
4149

4250

4351
class DatasetSchema(Schema):
44-
class Meta:
45-
ordered = True
46-
47-
page = fields.Integer(description="Current page", required=True)
52+
page = fields.Integer(
53+
metadata={"description": "Current page"},
54+
required=True,
55+
)
4856
limit = fields.Integer(
49-
description="Maximum number of returned items", required=True
57+
metadata={"description": "Maximum number of returned items"},
58+
required=True,
5059
)
5160
datasets = fields.List(
5261
fields.Dict(
53-
values=fields.String(example="value1"), keys=fields.String(example="key1")
62+
values=fields.String(metadata={"example": "value1"}),
63+
keys=fields.String(metadata={"example": "key1"}),
5464
),
5565
required=True,
56-
description="Array containing all available key combinations",
66+
metadata={"description": "Array containing all available key combinations"},
5767
)
5868

5969

terracotta/server/keys.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,8 @@
1010

1111

1212
class KeyItemSchema(Schema):
13-
class Meta:
14-
ordered = True
15-
16-
key = fields.String(description="Key name", required=True)
17-
description = fields.String(description="Key description")
13+
key = fields.String(metadata={"description": "Key name"}, required=True)
14+
description = fields.String(metadata={"description": "Key description"})
1815

1916

2017
class KeySchema(Schema):

terracotta/server/metadata.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,50 +14,51 @@
1414

1515

1616
class MetadataSchema(Schema):
17-
class Meta:
18-
ordered = True
19-
2017
keys = fields.Dict(
2118
keys=fields.String(),
2219
values=fields.String(),
23-
description="Keys identifying dataset",
20+
metadata={"description": "Keys identifying dataset"},
2421
required=True,
2522
)
2623
bounds = fields.List(
27-
fields.Number(),
24+
fields.Float(),
2825
validate=validate.Length(equal=4),
2926
required=True,
30-
description="Physical bounds of dataset in WGS84 projection",
27+
metadata={"description": "Physical bounds of dataset in WGS84 projection"},
3128
)
3229
convex_hull = fields.Dict(
33-
required=True, description="GeoJSON representation of the dataset's convex hull"
30+
required=True,
31+
metadata={"description": "GeoJSON representation of the dataset's convex hull"},
3432
)
35-
valid_percentage = fields.Number(
36-
description="Percentage of valid data in the dataset"
33+
valid_percentage = fields.Float(
34+
metadata={"description": "Percentage of valid data in the dataset"}
3735
)
3836
range = fields.List(
39-
fields.Number(),
37+
fields.Float(),
4038
validate=validate.Length(equal=2),
4139
required=True,
42-
description="Minimum and maximum data value",
40+
metadata={"description": "Minimum and maximum data value"},
41+
)
42+
mean = fields.Float(metadata={"description": "Data mean"}, required=True)
43+
stdev = fields.Float(
44+
metadata={"description": "Data standard deviation"}, required=True
4345
)
44-
mean = fields.Number(description="Data mean", required=True)
45-
stdev = fields.Number(description="Data standard deviation", required=True)
4646
percentiles = fields.List(
47-
fields.Number(),
47+
fields.Float(),
4848
validate=validate.Length(equal=99),
4949
required=True,
50-
description="1st, 2nd, 3rd, ..., 99th data percentile",
50+
metadata={"description": "1st, 2nd, 3rd, ..., 99th data percentile"},
5151
)
5252
metadata = fields.Raw(
53-
description="Any additional (manually added) metadata", required=True
53+
metadata={"description": "Any additional (manually added) metadata"},
54+
required=True,
5455
)
5556

5657

5758
class MetadataColumnsSchema(Schema):
5859
columns = fields.List(
5960
fields.String(),
60-
description="List of columns to return",
61+
metadata={"description": "List of columns to return"},
6162
required=False,
6263
)
6364

@@ -82,11 +83,11 @@ class MultipleMetadataDatasetsSchema(Schema):
8283
keys = fields.List(
8384
fields.List(
8485
fields.String(),
85-
description="Keys identifying dataset",
86+
metadata={"description": "Keys identifying dataset"},
8687
required=True,
8788
),
8889
required=True,
89-
description="Array containing all available key combinations",
90+
metadata={"description": "Array containing all available key combinations"},
9091
)
9192

9293

0 commit comments

Comments
 (0)