Skip to content

Commit 6445380

Browse files
committed
Fix collection extender not available in lib tests/benchmarks
1 parent 9272856 commit 6445380

File tree

7 files changed

+53
-47
lines changed

7 files changed

+53
-47
lines changed

lib/Cargo.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ url = "2"
3737
urlencoding = "2"
3838
ulid = "1.1.3"
3939
yrs = "0.24.0"
40-
tokio = { version = "1", features = ["rt", "macros"] }
40+
tokio = { version = "1", features = [
41+
"rt",
42+
"macros",
43+
"sync",
44+
"rt-multi-thread",
45+
] }
4146
async-trait = "0.1.89"
4247
futures = "0.3.31"
4348

lib/src/collections.rs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,33 @@
11
//! Collections are dynamic resources that refer to multiple resources.
22
//! They are constructed using a [Query]
3+
use crate::class_extender::{ClassExtender, GetExtenderContext};
34
use crate::{
45
agents::ForAgent,
56
errors::AtomicResult,
67
storelike::{Query, ResourceCollection, ResourceResponse},
78
urls, Resource, Storelike, Value,
89
};
910

11+
pub fn get_collection_class_extender() -> ClassExtender {
12+
ClassExtender {
13+
class: urls::COLLECTION.to_string(),
14+
on_resource_get: Some(ClassExtender::wrap_get_handler(|context| {
15+
Box::pin(async move {
16+
let GetExtenderContext {
17+
store,
18+
url,
19+
db_resource: resource,
20+
for_agent,
21+
} = context;
22+
construct_collection_from_params(store, url.query_pairs(), resource, for_agent)
23+
.await
24+
})
25+
})),
26+
before_commit: None,
27+
after_commit: None,
28+
}
29+
}
30+
1031
const DEFAULT_PAGE_SIZE: usize = 30;
1132

1233
/// Used to construct a Collection. Does not contain results / members.
@@ -575,11 +596,6 @@ mod test {
575596
.lock()
576597
.unwrap()
577598
.clone();
578-
let subjects: Vec<String> = store
579-
.all_resources(false)
580-
.map(|r| r.get_subject().into())
581-
.collect();
582-
println!("{:?}", subjects);
583599
let collections_collection = store
584600
.get_resource_extended(
585601
&format!("{}/collections", store.get_server_url().unwrap()),

lib/src/db.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ impl Db {
109109
let prop_val_sub_index = db.open_tree(Tree::PropValSub)?;
110110
let watched_queries = db.open_tree(Tree::WatchedQueries)?;
111111

112-
let store = Db {
112+
let mut store = Db {
113113
path: path.into(),
114114
db,
115115
default_agent: Arc::new(Mutex::new(None)),
@@ -124,6 +124,8 @@ impl Db {
124124
on_commit: None,
125125
};
126126

127+
store.add_class_extender(crate::collections::get_collection_class_extender())?;
128+
127129
migrate_maybe(&store).map(|e| format!("Error during migration of database: {:?}", e))?;
128130
crate::populate::populate_base_models(&store)
129131
.await
@@ -856,15 +858,15 @@ impl Storelike for Db {
856858
let url_span = tracing::span!(tracing::Level::TRACE, "URL parse").entered();
857859
// This might add a trailing slash
858860
let url = url::Url::parse(subject)?;
859-
let mut removed_query_params = {
861+
let mut subject_without_params = {
860862
let mut url_altered = url.clone();
861863
url_altered.set_query(None);
862864
url_altered.to_string()
863865
};
864866

865867
// Remove trailing slash
866-
if removed_query_params.ends_with('/') {
867-
removed_query_params.pop();
868+
if subject_without_params.ends_with('/') {
869+
subject_without_params.pop();
868870
}
869871

870872
url_span.exit();
@@ -880,7 +882,7 @@ impl Storelike for Db {
880882
}
881883

882884
async move {
883-
let mut resource = self.get_resource(&removed_query_params).await?;
885+
let mut resource = self.get_resource(&subject_without_params).await?;
884886

885887
let _explanation = crate::hierarchy::check_read(self, &resource, for_agent).await?;
886888

lib/src/populate.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -382,15 +382,25 @@ pub async fn populate_all(store: &crate::Db) -> AtomicResult<()> {
382382
.map_err(|e| format!("Failed to populate default store. {}", e))?;
383383

384384
// Use try_join! to run the rest concurrently
385-
tokio::try_join!(
386-
create_drive(store),
387-
create_default_ontology(store),
388-
set_drive_rights(store, true),
389-
populate_collections(store),
390-
populate_endpoints(store),
391-
populate_importer(store),
392-
populate_sidebar_items(store),
393-
)?;
385+
create_drive(store)
386+
.await
387+
.map_err(|e| format!("Failed to create drive. {}", e))?;
388+
create_default_ontology(store)
389+
.await
390+
.map_err(|e| format!("Failed to create default ontology. {}", e))?;
391+
set_drive_rights(store, true).await?;
392+
populate_collections(store)
393+
.await
394+
.map_err(|e| format!("Failed to populate collections. {}", e))?;
395+
populate_endpoints(store)
396+
.await
397+
.map_err(|e| format!("Failed to populate endpoints. {}", e))?;
398+
populate_importer(store)
399+
.await
400+
.map_err(|e| format!("Failed to populate importer. {}", e))?;
401+
populate_sidebar_items(store)
402+
.await
403+
.map_err(|e| format!("Failed to populate sidebar items. {}", e))?;
394404

395405
Ok(())
396406
}

server/src/appstate.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ impl AppState {
5151
let mut store = atomic_lib::Db::init(&config.store_path, config.server_url.clone()).await?;
5252

5353
// Register all built-in class extenders
54-
store.add_class_extender(plugins::collections::build_collection_extender())?;
5554
store.add_class_extender(plugins::chatroom::build_chatroom_extender())?;
5655
store.add_class_extender(plugins::chatroom::build_message_extender())?;
5756
store.add_class_extender(plugins::invite::build_invite_extender())?;

server/src/plugins/collections.rs

Lines changed: 0 additions & 25 deletions
This file was deleted.

server/src/plugins/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ They are used for performing custom queries, or calculating dynamic attributes.
3535

3636
pub mod bookmark;
3737
pub mod chatroom;
38-
pub mod collections;
3938
pub mod export;
4039
pub mod files;
4140
pub mod importer;

0 commit comments

Comments
 (0)