Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unify Layer listing #554

Merged
merged 25 commits into from
Jul 14, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
92147ba
add new trait for layer collection listing and return workflows inste…
michaelmattig Jun 15, 2022
06e5355
turning external dataset provider into external layer provider (wip)
michaelmattig Jun 20, 2022
1775fa6
turning external dataset provider into external layer provider (wip)
michaelmattig Jun 20, 2022
ada4d32
Merge branch 'layer_listing' of https://github.com/geo-engine/geoengi…
michaelmattig Jun 20, 2022
ab7f92f
make layer listing and mock provider work again
michaelmattig Jun 22, 2022
6a355ff
implement layer provider for dataset db
michaelmattig Jun 23, 2022
062a5d6
layer collections for the pro version
michaelmattig Jun 24, 2022
e605ecb
migrate gfbio to layer provider
michaelmattig Jun 27, 2022
435b153
migrate external providers
michaelmattig Jun 27, 2022
95a93f6
fix test
michaelmattig Jun 28, 2022
9d4fce3
Merge branch 'master' of https://github.com/geo-engine/geoengine into…
michaelmattig Jun 28, 2022
b857b38
layer listing for netcdfcf
michaelmattig Jun 29, 2022
99987d7
check root collection ids
michaelmattig Jun 29, 2022
c2d3b51
fix external dataset handling for dataset db
michaelmattig Jun 29, 2022
3a902a7
cleanup
michaelmattig Jun 29, 2022
7e0cad2
Merge branch 'master' of https://github.com/geo-engine/geoengine into…
michaelmattig Jul 6, 2022
158facb
add trait for OperatorNames and convenience method creating source op…
michaelmattig Jul 6, 2022
ddfafc8
add an "unsorted collection" for leftover items
michaelmattig Jul 6, 2022
c3a4f3f
rename ids and providers
michaelmattig Jul 12, 2022
9cbb82b
change dataset route
michaelmattig Jul 12, 2022
e7f6ffd
update changelog
michaelmattig Jul 13, 2022
63f2f31
Merge branch 'master' into layer_listing
michaelmattig Jul 14, 2022
38dc9a3
fix fmt
michaelmattig Jul 14, 2022
a3453ee
fix test
michaelmattig Jul 14, 2022
cd031d8
fix doctest
michaelmattig Jul 14, 2022
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
13 changes: 3 additions & 10 deletions services/src/contexts/in_memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,24 +60,17 @@ impl InMemoryContext {
exe_ctx_tiling_spec: TilingSpecification,
query_ctx_chunk_size: ChunkByteSize,
) -> Self {
let mut workflow_registry = HashMapRegistry::default();
let mut layer_db = HashMapLayerDb::default();
add_layers_from_directory(&mut layer_db, &mut workflow_registry, layer_defs_path).await;
add_layers_from_directory(&mut layer_db, layer_defs_path).await;
add_layer_collections_from_directory(&mut layer_db, layer_collection_defs_path).await;

let mut dataset_db = HashMapDatasetDb::default();
add_datasets_from_directory(
&mut dataset_db,
&mut layer_db,
&mut workflow_registry,
dataset_defs_path,
)
.await;
add_datasets_from_directory(&mut dataset_db, &mut layer_db, dataset_defs_path).await;
add_providers_from_directory(&mut dataset_db, provider_defs_path).await;

Self {
project_db: Default::default(),
workflow_registry: Arc::new(workflow_registry),
workflow_registry: Default::default(),
layer_db: Arc::new(layer_db),
session: Default::default(),
thread_pool: create_rayon_thread_pool(0),
Expand Down
21 changes: 4 additions & 17 deletions services/src/datasets/add_from_directory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ use crate::datasets::storage::MetaDataDefinition;
use crate::layers::layer::{AddLayer, AddLayerCollection, LayerCollectionId};
use crate::layers::storage::LayerDb;
use crate::util::user_input::UserInput;
use crate::workflows::registry::WorkflowRegistry;
use crate::workflows::workflow::Workflow;
use crate::{contexts::MockableSession, datasets::storage::DatasetDb};
use crate::{datasets::storage::ExternalDatasetProviderDefinition, error::Result};
Expand Down Expand Up @@ -41,11 +40,10 @@ pub async fn add_dataset_layer_collection<L: LayerDb>(layer_db: &mut L) -> Resul
Ok(())
}

pub async fn add_dataset_as_layer<L: LayerDb, W: WorkflowRegistry>(
pub async fn add_dataset_as_layer<L: LayerDb>(
def: DatasetDefinition,
dataset: DatasetId,
layer_db: &mut L,
workflow_db: &mut W,
) -> Result<()> {
let workflow = match def.meta_data {
MetaDataDefinition::MockMetaData(_) => Workflow {
Expand Down Expand Up @@ -81,8 +79,6 @@ pub async fn add_dataset_as_layer<L: LayerDb, W: WorkflowRegistry>(
},
};

let workflow = workflow_db.register(workflow).await?;

let layer = AddLayer {
name: def.properties.name,
description: def.properties.description,
Expand All @@ -99,26 +95,18 @@ pub async fn add_dataset_as_layer<L: LayerDb, W: WorkflowRegistry>(
Ok(())
}

pub async fn add_datasets_from_directory<
S: MockableSession,
D: DatasetDb<S>,
L: LayerDb,
W: WorkflowRegistry,
>(
pub async fn add_datasets_from_directory<S: MockableSession, D: DatasetDb<S>, L: LayerDb>(
dataset_db: &mut D,
layer_db: &mut L,
workflow_db: &mut W,
file_path: PathBuf,
) {
async fn add_dataset_definition_from_dir_entry<
S: MockableSession,
D: DatasetDb<S>,
L: LayerDb,
W: WorkflowRegistry,
>(
db: &mut D,
layer_db: &mut L,
workflow_db: &mut W,
entry: &DirEntry,
) -> Result<()> {
let def: DatasetDefinition =
Expand All @@ -132,7 +120,7 @@ pub async fn add_datasets_from_directory<
)
.await?; // TODO: add as system user

add_dataset_as_layer(def, id, layer_db, workflow_db).await?;
add_dataset_as_layer(def, id, layer_db).await?;

Ok(())
}
Expand All @@ -152,8 +140,7 @@ pub async fn add_datasets_from_directory<
match entry {
Ok(entry) if entry.path().extension() == Some(OsStr::new("json")) => {
if let Err(e) =
add_dataset_definition_from_dir_entry(dataset_db, layer_db, workflow_db, &entry)
.await
add_dataset_definition_from_dir_entry(dataset_db, layer_db, &entry).await
{
warn!(
"Skipped adding dataset from directory entry: {:?} error: {}",
Expand Down
5 changes: 3 additions & 2 deletions services/src/handlers/layers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use actix_web::{web, FromRequest, Responder};

use crate::error::Result;
use crate::layers::layer::{LayerCollectionId, LayerId};
use crate::layers::listing::LayerCollectionProvider;
use crate::layers::storage::LayerDb;
use crate::util::user_input::UserInput;
use crate::{contexts::Context, layers::layer::LayerCollectionListOptions};
Expand All @@ -22,7 +23,7 @@ async fn list_root_collections_handler<C: Context>(
) -> Result<impl Responder> {
let db = ctx.layer_db_ref();
let collection = db
.get_root_collection_items(options.into_inner().validated()?)
.root_collection_items(options.into_inner().validated()?)
.await?;

Ok(web::Json(collection))
Expand All @@ -35,7 +36,7 @@ async fn list_collection_handler<C: Context>(
) -> Result<impl Responder> {
let collection = ctx
.layer_db_ref()
.get_collection_items(id.into_inner(), options.into_inner().validated()?)
.collection_items(id.into_inner(), options.into_inner().validated()?)
.await?;

Ok(web::Json(collection))
Expand Down
22 changes: 6 additions & 16 deletions services/src/layers/add_from_directory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,38 +7,28 @@ use std::{
};

use crate::error::Result;
use crate::{
layers::layer::{
AddLayer, AddLayerCollection, LayerCollectionDefinition, LayerCollectionId, LayerDefinition,
},
workflows::registry::WorkflowRegistry,
use crate::layers::layer::{
AddLayer, AddLayerCollection, LayerCollectionDefinition, LayerCollectionId, LayerDefinition,
};
use crate::{layers::storage::LayerDb, util::user_input::UserInput};

use log::{info, warn};

pub async fn add_layers_from_directory<L: LayerDb, W: WorkflowRegistry>(
layer_db: &mut L,
workflow_db: &mut W,
file_path: PathBuf,
) {
async fn add_layer_from_dir_entry<L: LayerDb, W: WorkflowRegistry>(
pub async fn add_layers_from_directory<L: LayerDb>(layer_db: &mut L, file_path: PathBuf) {
async fn add_layer_from_dir_entry<L: LayerDb>(
layer_db: &mut L,
workflow_db: &mut W,
entry: &DirEntry,
) -> Result<()> {
let def: LayerDefinition =
serde_json::from_reader(BufReader::new(File::open(entry.path())?))?;

let workflow_id = workflow_db.register(def.workflow).await?;

layer_db
.add_layer_with_id(
def.id,
AddLayer {
name: def.name,
description: def.description,
workflow: workflow_id,
workflow: def.workflow,
symbology: def.symbology,
}
.validated()?,
Expand All @@ -58,7 +48,7 @@ pub async fn add_layers_from_directory<L: LayerDb, W: WorkflowRegistry>(
for entry in dir {
match entry {
Ok(entry) if entry.path().extension() == Some(OsStr::new("json")) => {
match add_layer_from_dir_entry(layer_db, workflow_db, &entry).await {
match add_layer_from_dir_entry(layer_db, &entry).await {
Ok(_) => info!("Added layer from directory entry: {:?}", entry),
Err(e) => warn!(
"Skipped adding layer from directory entry: {:?} error: {}",
Expand Down
10 changes: 3 additions & 7 deletions services/src/layers/layer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@ use serde::{Deserialize, Serialize};
use geoengine_datatypes::identifier;

use crate::{
error::Result,
projects::Symbology,
util::user_input::UserInput,
workflows::workflow::{Workflow, WorkflowId},
error::Result, projects::Symbology, util::user_input::UserInput, workflows::workflow::Workflow,
};

identifier!(LayerId);
Expand All @@ -17,7 +14,7 @@ pub struct Layer {
pub id: LayerId,
pub name: String,
pub description: String,
pub workflow: WorkflowId,
pub workflow: Workflow,
pub symbology: Option<Symbology>,
}

Expand All @@ -26,14 +23,13 @@ pub struct LayerListing {
pub id: LayerId,
pub name: String,
pub description: String,
pub workflow: WorkflowId,
}

#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct AddLayer {
pub name: String,
pub description: String,
pub workflow: WorkflowId,
pub workflow: Workflow,
pub symbology: Option<Symbology>,
}

Expand Down
22 changes: 22 additions & 0 deletions services/src/layers/listing.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
use async_trait::async_trait;

use crate::util::user_input::Validated;
use crate::{error::Result, workflows::workflow::Workflow};

use super::layer::{CollectionItem, LayerCollectionId, LayerCollectionListOptions, LayerId};

#[async_trait]
pub trait LayerCollectionProvider {
async fn collection_items(
&self,
collection: LayerCollectionId,
options: Validated<LayerCollectionListOptions>,
) -> Result<Vec<CollectionItem>>;

async fn root_collection_items(
&self,
options: Validated<LayerCollectionListOptions>,
) -> Result<Vec<CollectionItem>>;

async fn workflow(&self, layer: LayerId) -> Result<Workflow>;
}
1 change: 1 addition & 0 deletions services/src/layers/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pub mod add_from_directory;
pub mod layer;
pub mod listing;
pub mod storage;
Loading