Skip to content

Commit 81f20d9

Browse files
committed
refactor deployments
1 parent 867be69 commit 81f20d9

File tree

9 files changed

+432
-633
lines changed

9 files changed

+432
-633
lines changed

docs/user-guide/installation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Installation
22

33
In time, this project will be available in the python package index (AKA pypi) and be installable via pip, but for
4-
now you can install it by git cloning and then using uv to install
4+
now you can install it by git cloning and then using [uv](https://docs.astral.sh/uv/) to install
55

66
```shell
77
git clone https://github.com/geobeyond/pygeoapi-prefect.git
@@ -25,4 +25,4 @@ parameter needs to be set to `pygeopai_prefect.manager.PrefectManager`.
2525
server:
2626
manager:
2727
name: pygeoapi_prefect.manager.PrefectManager
28-
```
28+
```

example-config.yml

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -70,31 +70,22 @@ resources:
7070
processor:
7171
name: HelloWorld
7272

73-
# greeter:
74-
# type: process
75-
# processor:
76-
# name: pygeoapi.process.hello_world.GreeterProcessor
77-
7873
simple-flow:
7974
type: process
8075
processor:
8176
name: pygeoapi_prefect.examples.simple_prefect.SimpleFlowProcessor
8277
prefect:
83-
result_storage: remote-file-system/test-sb1-results
8478
deployment:
85-
name: minio
86-
queue: pygeoapi
87-
storage_block: remote-file-system/test-sb1
88-
storage_sub_path: simple-flow-flow
79+
name: simple-flow/deployed-simple-flow
80+
result_storage_block: remote-file-system/test-sb1
81+
result_storage_key_template: "{parameters[pygeoapi_job_id]}.pickle"
8982

9083
hi-prefect-world:
9184
type: process
9285
processor:
9386
name: pygeoapi_prefect.examples.hi_prefect_world.HiPrefectWorldProcessor
9487
prefect:
95-
result_storage: remote-file-system/test-sb1-results
9688
deployment:
97-
name: minio
98-
queue: pygeoapi
99-
storage_block: remote-file-system/test-sb1
100-
storage_sub_path: hi-prefect-world-flow
89+
name: hi-prefect-world/deployed-hi-prefect-world
90+
result_storage_block: remote-file-system/test-sb1
91+
result_storage_key_template: "{parameters[pygeoapi_job_id]}.pickle"

src/pygeoapi_prefect/cli.py

Lines changed: 7 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,16 @@
33

44
import click
55
from prefect import serve
6-
from prefect.filesystems import RemoteFileSystem
6+
from pygeoapi.process.base import BaseProcessor
77
from pygeoapi.process.manager.base import get_manager
88
from pygeoapi.util import yaml_load
99

1010
from . import (
1111
BasePrefectProcessor,
1212
PrefectManager,
13+
vanilla_flow,
1314
)
14-
from .manager import ProcessId
15-
from .vanilla_flow import (
16-
generate_flow_run_name,
17-
run_vanilla_processor,
18-
)
15+
from .schemas import ProcessId
1916

2017
logger = logging.getLogger(__name__)
2118

@@ -24,47 +21,6 @@
2421
def root(): ...
2522

2623

27-
@root.command()
28-
@click.argument("block_name")
29-
@click.argument("base_path")
30-
@click.argument("endpoint_url")
31-
@click.argument("key")
32-
@click.argument("secret")
33-
def create_storage_block(
34-
block_name: str, base_path: str, endpoint_url: str, key: str, secret: str
35-
):
36-
"""Create storage block of type 'remote-file-system' on the prefect server
37-
38-
PARAMETERS
39-
40-
block_name - A name for the storage block. Note that it will then be referenced
41-
by prefect as 'remote-file-system/<block_name>'
42-
43-
base_path - The base path for the storage block. This depends on the remote storage
44-
being used. As an example, with S3-compatible storage you can use
45-
's3://<bucket-name>'
46-
47-
endpoint_url - Base URL of the remote storage. For example, a local minIO instance
48-
could use 'http://localhost:9000'
49-
50-
key - User id of the remote storage
51-
52-
secret - User password of the remote storage
53-
54-
"""
55-
print(f"Creating block remote-file-system/{block_name}...")
56-
block = RemoteFileSystem(
57-
basepath=base_path,
58-
settings={
59-
"key": key,
60-
"secret": secret,
61-
"client_kwargs": {"endpoint_url": endpoint_url},
62-
},
63-
)
64-
block.save(block_name, overwrite=True)
65-
print("Done!")
66-
67-
6824
@root.command(name="deploy-static")
6925
@click.option("-c", "--pygeoapi-config", type=Path, envvar="PYGEOAPI_CONFIG")
7026
def deploy_processors_locally(
@@ -88,81 +44,19 @@ def deploy_processors_locally(
8844
f"deployment configuration"
8945
)
9046
continue
91-
case BasePrefectProcessor():
92-
configured_flow = run_vanilla_processor.with_options(
47+
case BaseProcessor():
48+
configured_flow = vanilla_flow.run_vanilla_processor.with_options(
9349
name=processor.metadata["id"],
9450
version=processor.metadata.get("version"),
95-
flow_run_name=generate_flow_run_name,
51+
flow_run_name=vanilla_flow.generate_flow_run_name,
9652
validate_parameters=True,
9753
)
9854
flow_deployment = configured_flow.to_deployment(
99-
name=f"pygeoapi-{processor_id}-local",
55+
name=vanilla_flow.get_deployment_name(processor_id),
10056
parameters={"processor_id": processor_id},
10157
)
10258
to_serve.append(flow_deployment)
10359
case _:
10460
logger.warning(f"Unknown processor type {processor_id}, ignoring...")
10561
continue
106-
# processor = manager.get_processor(ProcessId(processor_id))
107-
# if isinstance(processor, BasePrefectProcessor):
108-
# logger.debug(
109-
# f"Skipping process {processor_id!r} - it provides its own "
110-
# f"deployment configuration"
111-
# )
112-
# continue
113-
# else:
114-
# configured_flow = run_vanilla_processor.with_options(
115-
# name=processor.metadata["id"],
116-
# version=processor.metadata.get("version"),
117-
# flow_run_name=generate_flow_run_name,
118-
# validate_parameters=True,
119-
# )
120-
# flow_deployment = configured_flow.to_deployment(
121-
# name=f"pygeoapi-{processor_id}-local",
122-
# parameters={"processor_id": processor_id},
123-
# )
124-
# to_serve.append(flow_deployment)
12562
serve(*to_serve)
126-
127-
128-
# @root.command()
129-
# @click.argument("process_id")
130-
# @click.option("-c", "--pygeoapi-config", type=Path, envvar="PYGEOAPI_CONFIG")
131-
# def deploy_process(
132-
# process_id: str,
133-
# pygeoapi_config: Path,
134-
# ):
135-
# """Create and apply prefect deployment for PROCESS_ID.
136-
#
137-
# Configure deployment parameters for the process in pygeoapi's configuration
138-
# file.
139-
# """
140-
# with pygeoapi_config.open() as fh:
141-
# config = yaml_load(fh)
142-
# manager = get_manager(config)
143-
# try:
144-
# processor = manager.get_processor(process_id)
145-
# except UnknownProcessError as err:
146-
# raise click.BadParameter(f"Process {process_id!r} not found") from err
147-
# else:
148-
# if isinstance(processor, BasePrefectProcessor):
149-
# if processor.deployment_info is not None:
150-
# print(f"Deploying process {process_id!r} with prefect...")
151-
# if (sb := processor.deployment_info.storage_block) is not None:
152-
# storage = Block.load(sb)
153-
# else:
154-
# storage = None
155-
# deployment = Deployment.build_from_flow(
156-
# processor.process_flow,
157-
# name=processor.deployment_info.name,
158-
# work_queue_name=processor.deployment_info.queue,
159-
# storage=storage,
160-
# path=processor.deployment_info.storage_sub_path,
161-
# ignore_file=None,
162-
# )
163-
# deployment.apply()
164-
# print("Done!")
165-
# else:
166-
# raise click.Abort("Deployment not specified in pygeoapi config file")
167-
# else:
168-
# print(f"Process {process_id!r} is not deployable with prefect, skipping...")

0 commit comments

Comments
 (0)