mirror of
https://github.com/protomaps/PMTiles.git
synced 2026-02-04 10:51:07 +00:00
improvements to CI test suite
This commit is contained in:
4
.github/workflows/actions.yml
vendored
4
.github/workflows/actions.yml
vendored
@@ -39,4 +39,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
node-version: 16.x
|
node-version: 16.x
|
||||||
- run: cd js && npm install && npm test
|
- run: cd js && npm install && npm test
|
||||||
- run : cd python && python -m unittest test/test_*
|
- run: cd python && python -m unittest test/test_*
|
||||||
|
- run: cd serverless/aws && python -m unittest test_*.py
|
||||||
|
- run: cd serverless/cloudflare && npm install && npm test
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ sha = subprocess.check_output(["git", "describe", "--always"]).strip()
|
|||||||
|
|
||||||
with zipfile.ZipFile("lambda_function.zip", "w", zipfile.ZIP_DEFLATED) as z:
|
with zipfile.ZipFile("lambda_function.zip", "w", zipfile.ZIP_DEFLATED) as z:
|
||||||
z.write("lambda_function.py")
|
z.write("lambda_function.py")
|
||||||
|
z.write("util.py")
|
||||||
z.write("../../python/pmtiles/reader.py", "pmtiles/reader.py")
|
z.write("../../python/pmtiles/reader.py", "pmtiles/reader.py")
|
||||||
z.writestr("version",sha)
|
z.writestr("version",sha)
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import base64
|
import base64
|
||||||
import collections
|
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
import gzip
|
import gzip
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
|
|
||||||
# Exists inside all lambda functions
|
# Exists inside all lambda functions
|
||||||
import boto3
|
import boto3
|
||||||
@@ -12,8 +10,7 @@ from botocore.exceptions import ClientError
|
|||||||
|
|
||||||
# create_lambda_function.py will vendor the relevant file
|
# create_lambda_function.py will vendor the relevant file
|
||||||
from pmtiles.reader import Reader
|
from pmtiles.reader import Reader
|
||||||
|
from util import pmtiles_path, parse_tile_path
|
||||||
Zxy = collections.namedtuple("Zxy", ["z", "x", "y"])
|
|
||||||
|
|
||||||
s3 = boto3.client("s3")
|
s3 = boto3.client("s3")
|
||||||
|
|
||||||
@@ -33,29 +30,6 @@ def get_object_bytes(key, offset, length):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def pmtiles_path(p, name):
|
|
||||||
if not p:
|
|
||||||
p = "{name}.pmtiles"
|
|
||||||
return p.replace("{name}", name)
|
|
||||||
|
|
||||||
|
|
||||||
def parse_tile_path(p, str):
|
|
||||||
if not p:
|
|
||||||
p = "/{name}/{z}/{x}/{y}.pbf"
|
|
||||||
p = re.escape(p)
|
|
||||||
p = p.replace(r"\{name\}", r"(?P<name>[0-9a-zA-Z/!\-_\.\*'\(\)]+)")
|
|
||||||
p = p.replace(r"\{z\}", r"(?P<z>\d+)")
|
|
||||||
p = p.replace(r"\{x\}", r"(?P<x>\d+)")
|
|
||||||
p = p.replace(r"\{y\}", r"(?P<y>\d+)")
|
|
||||||
m = re.match(f"^{p}$", str)
|
|
||||||
if not m:
|
|
||||||
return None, None
|
|
||||||
return (
|
|
||||||
m.group("name"),
|
|
||||||
Zxy(int(m.group("z")), int(m.group("x")), int(m.group("y"))),
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# Assumes event is a API Gateway V2 or Lambda Function URL formatted dict
|
# Assumes event is a API Gateway V2 or Lambda Function URL formatted dict
|
||||||
# and returns API Gateway V2 / Lambda Function dict responses
|
# and returns API Gateway V2 / Lambda Function dict responses
|
||||||
# Does not work with CloudFront events/Lambda@Edge; see README
|
# Does not work with CloudFront events/Lambda@Edge; see README
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import unittest
|
import unittest
|
||||||
from lambda_function import parse_tile_path, pmtiles_path
|
from util import parse_tile_path, pmtiles_path
|
||||||
|
|
||||||
|
|
||||||
class TestLambda(unittest.TestCase):
|
class TestLambda(unittest.TestCase):
|
||||||
@@ -48,7 +48,3 @@ class TestLambda(unittest.TestCase):
|
|||||||
pmtiles_path("folder/{name}.pmtiles", "foo/bar"),
|
pmtiles_path("folder/{name}.pmtiles", "foo/bar"),
|
||||||
"folder/foo/bar.pmtiles",
|
"folder/foo/bar.pmtiles",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
unittest.main()
|
|
||||||
27
serverless/aws/util.py
Normal file
27
serverless/aws/util.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import collections
|
||||||
|
import re
|
||||||
|
|
||||||
|
Zxy = collections.namedtuple("Zxy", ["z", "x", "y"])
|
||||||
|
|
||||||
|
|
||||||
|
def pmtiles_path(p, name):
|
||||||
|
if not p:
|
||||||
|
p = "{name}.pmtiles"
|
||||||
|
return p.replace("{name}", name)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_tile_path(p, str):
|
||||||
|
if not p:
|
||||||
|
p = "/{name}/{z}/{x}/{y}.pbf"
|
||||||
|
p = re.escape(p)
|
||||||
|
p = p.replace(r"\{name\}", r"(?P<name>[0-9a-zA-Z/!\-_\.\*'\(\)]+)")
|
||||||
|
p = p.replace(r"\{z\}", r"(?P<z>\d+)")
|
||||||
|
p = p.replace(r"\{x\}", r"(?P<x>\d+)")
|
||||||
|
p = p.replace(r"\{y\}", r"(?P<y>\d+)")
|
||||||
|
m = re.match(f"^{p}$", str)
|
||||||
|
if not m:
|
||||||
|
return None, None
|
||||||
|
return (
|
||||||
|
m.group("name"),
|
||||||
|
Zxy(int(m.group("z")), int(m.group("x")), int(m.group("y"))),
|
||||||
|
)
|
||||||
101
serverless/cloudflare/package-lock.json
generated
101
serverless/cloudflare/package-lock.json
generated
@@ -6,9 +6,17 @@
|
|||||||
"": {
|
"": {
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"esbuild": "^0.14.42",
|
"esbuild": "^0.14.42",
|
||||||
"typescript": "^4.7.2"
|
"esbuild-runner": "^2.2.1",
|
||||||
|
"typescript": "^4.7.2",
|
||||||
|
"zora": "^5.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/buffer-from": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/esbuild": {
|
"node_modules/esbuild": {
|
||||||
"version": "0.14.42",
|
"version": "0.14.42",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.42.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.42.tgz",
|
||||||
@@ -300,6 +308,22 @@
|
|||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/esbuild-runner": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-runner/-/esbuild-runner-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-VP0VfJJZiZ3cKzdOH59ZceDxx/GzBKra7tiGM8MfFMLv6CR1/cpsvtQ3IsJI3pz7HyeYxtbPyecj3fHwR+3XcQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"source-map-support": "0.5.19",
|
||||||
|
"tslib": "2.3.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"esr": "bin/esr.js"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"esbuild": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/esbuild-sunos-64": {
|
"node_modules/esbuild-sunos-64": {
|
||||||
"version": "0.14.42",
|
"version": "0.14.42",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.42.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.42.tgz",
|
||||||
@@ -364,6 +388,31 @@
|
|||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/source-map-support": {
|
||||||
|
"version": "0.5.19",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
|
||||||
|
"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"buffer-from": "^1.0.0",
|
||||||
|
"source-map": "^0.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tslib": {
|
||||||
|
"version": "2.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||||
|
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/typescript": {
|
"node_modules/typescript": {
|
||||||
"version": "4.7.2",
|
"version": "4.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz",
|
||||||
@@ -376,9 +425,21 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=4.2.0"
|
"node": ">=4.2.0"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"node_modules/zora": {
|
||||||
|
"version": "5.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/zora/-/zora-5.0.4.tgz",
|
||||||
|
"integrity": "sha512-yRd/0VNjEjBoV53zOnIYelo7iyywCbDfF6PqbvTanbQXTdm0XiBagR4H+eVQaoVwgmUa/0A1WRiphkAv2l96lg==",
|
||||||
|
"dev": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"buffer-from": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"esbuild": {
|
"esbuild": {
|
||||||
"version": "0.14.42",
|
"version": "0.14.42",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.42.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.42.tgz",
|
||||||
@@ -519,6 +580,16 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"esbuild-runner": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild-runner/-/esbuild-runner-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-VP0VfJJZiZ3cKzdOH59ZceDxx/GzBKra7tiGM8MfFMLv6CR1/cpsvtQ3IsJI3pz7HyeYxtbPyecj3fHwR+3XcQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"source-map-support": "0.5.19",
|
||||||
|
"tslib": "2.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"esbuild-sunos-64": {
|
"esbuild-sunos-64": {
|
||||||
"version": "0.14.42",
|
"version": "0.14.42",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.42.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.42.tgz",
|
||||||
@@ -547,11 +618,39 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"source-map-support": {
|
||||||
|
"version": "0.5.19",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
|
||||||
|
"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"buffer-from": "^1.0.0",
|
||||||
|
"source-map": "^0.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tslib": {
|
||||||
|
"version": "2.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||||
|
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"typescript": {
|
"typescript": {
|
||||||
"version": "4.7.2",
|
"version": "4.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz",
|
||||||
"integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==",
|
"integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
|
},
|
||||||
|
"zora": {
|
||||||
|
"version": "5.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/zora/-/zora-5.0.4.tgz",
|
||||||
|
"integrity": "sha512-yRd/0VNjEjBoV53zOnIYelo7iyywCbDfF6PqbvTanbQXTdm0XiBagR4H+eVQaoVwgmUa/0A1WRiphkAv2l96lg==",
|
||||||
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
{
|
{
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"esbuild": "^0.14.42",
|
"esbuild": "^0.14.42",
|
||||||
"typescript": "^4.7.2"
|
"esbuild-runner": "^2.2.1",
|
||||||
|
"typescript": "^4.7.2",
|
||||||
|
"zora": "^5.0.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "esbuild worker.ts --target=es2020 --outfile=dist/worker.js --format=esm --bundle --banner:js=//$(git describe --always)",
|
"build": "esbuild worker.ts --target=es2020 --outfile=dist/worker.js --format=esm --bundle --banner:js=//$(git describe --always)",
|
||||||
|
"test": "node -r esbuild-runner/register worker.test.ts",
|
||||||
"tsc": "tsc --noEmit --watch"
|
"tsc": "tsc --noEmit --watch"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
5
serverless/cloudflare/worker.test.ts
Normal file
5
serverless/cloudflare/worker.test.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { test } from "zora";
|
||||||
|
|
||||||
|
test("stub test", (assertion) => {
|
||||||
|
assertion.ok(true);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user