Skip to content

Commit 9242e98

Browse files
committed
Integrating edge endpoint filtering mechanism into Python using the same wrapper types as node filtering.
1 parent a6ca33a commit 9242e98

File tree

8 files changed

+1091
-393
lines changed

8 files changed

+1091
-393
lines changed

raphtory/src/db/graph/views/filter/edge_node_filtered_graph.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ use crate::{
33
api::{
44
properties::internal::InheritPropertiesOps,
55
view::internal::{
6-
Immutable, InheritEdgeHistoryFilter, InheritEdgeLayerFilterOps,
6+
FilterOps, Immutable, InheritEdgeHistoryFilter, InheritEdgeLayerFilterOps,
77
InheritExplodedEdgeFilterOps, InheritLayerOps, InheritListOps, InheritMaterialize,
88
InheritNodeFilterOps, InheritNodeHistoryFilter, InheritStorageOps,
99
InheritTimeSemantics, InternalEdgeFilterOps, Static,
1010
},
1111
},
12-
graph::views::filter::model::{edge_filter::Endpoint, node_filter::CompositeNodeFilter},
12+
graph::views::filter::model::{
13+
edge_filter::Endpoint, node_filter::CompositeNodeFilter,
14+
property_filter::PropertyFilterOps,
15+
},
1316
},
1417
prelude::GraphViewOps,
1518
};
@@ -18,8 +21,6 @@ use raphtory_storage::{
1821
core_ops::InheritCoreGraphOps,
1922
graph::edges::{edge_ref::EdgeStorageRef, edge_storage_ops::EdgeStorageOps},
2023
};
21-
use crate::db::api::view::internal::FilterOps;
22-
use crate::db::graph::views::filter::model::property_filter::PropertyFilterOps;
2324

2425
#[derive(Debug, Clone)]
2526
pub struct EdgeNodeFilteredGraph<G, F> {

raphtory/src/db/graph/views/filter/model/edge_filter.rs

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ use crate::{
77
model::{
88
exploded_edge_filter::CompositeExplodedEdgeFilter,
99
node_filter::{
10-
CompositeNodeFilter, NodeFilter, NodeFilterBuilderOps, NodeIdFilter,
11-
NodeIdFilterBuilder, NodeNameFilter, NodeNameFilterBuilder, NodeTypeFilter,
12-
NodeTypeFilterBuilder,
10+
CompositeNodeFilter, InternalNodeFilterBuilderOps,
11+
InternalNodeIdFilterBuilderOps, NodeFilter, NodeFilterBuilderOps, NodeIdFilter,
12+
NodeIdFilterBuilder, NodeIdFilterBuilderOps, NodeNameFilter,
13+
NodeNameFilterBuilder, NodeTypeFilter, NodeTypeFilterBuilder,
1314
},
1415
property_filter::{
1516
ElemQualifierOps, InternalPropertyFilterOps, ListAggOps, MetadataFilterBuilder,
@@ -162,39 +163,39 @@ impl EdgeEndpoint {
162163

163164
impl EdgeEndpoint {
164165
#[inline]
165-
pub fn id(self) -> EndpointWrapper<NodeIdFilterBuilder> {
166+
pub fn id(&self) -> EndpointWrapper<NodeIdFilterBuilder> {
166167
EndpointWrapper::new(NodeFilter::id(), self.0)
167168
}
168169

169170
#[inline]
170-
pub fn name(self) -> EndpointWrapper<NodeNameFilterBuilder> {
171+
pub fn name(&self) -> EndpointWrapper<NodeNameFilterBuilder> {
171172
EndpointWrapper::new(NodeFilter::name(), self.0)
172173
}
173174

174175
#[inline]
175-
pub fn node_type(self) -> EndpointWrapper<NodeTypeFilterBuilder> {
176+
pub fn node_type(&self) -> EndpointWrapper<NodeTypeFilterBuilder> {
176177
EndpointWrapper::new(NodeFilter::node_type(), self.0)
177178
}
178179

179180
#[inline]
180181
pub fn property(
181-
self,
182+
&self,
182183
name: impl Into<String>,
183184
) -> EndpointWrapper<PropertyFilterBuilder<NodeFilter>> {
184185
EndpointWrapper::new(PropertyFilterBuilder::<NodeFilter>::new(name), self.0)
185186
}
186187

187188
#[inline]
188189
pub fn metadata(
189-
self,
190+
&self,
190191
name: impl Into<String>,
191192
) -> EndpointWrapper<MetadataFilterBuilder<NodeFilter>> {
192193
EndpointWrapper::new(MetadataFilterBuilder::<NodeFilter>::new(name), self.0)
193194
}
194195

195196
#[inline]
196197
pub fn window<S: IntoTime, E: IntoTime>(
197-
self,
198+
&self,
198199
start: S,
199200
end: E,
200201
) -> EndpointWrapper<Windowed<NodeFilter>> {
@@ -207,7 +208,7 @@ impl EdgeEndpoint {
207208
// and at the end convert into a composite node filter via TryAsCompositeFilter
208209
#[derive(Debug, Clone)]
209210
pub struct EndpointWrapper<T> {
210-
inner: T,
211+
pub(crate) inner: T,
211212
endpoint: Endpoint,
212213
}
213214

@@ -304,84 +305,84 @@ impl<T: InternalPropertyFilterOps> InternalPropertyFilterOps for EndpointWrapper
304305

305306
impl<T: InternalPropertyFilterOps> EndpointWrapper<T> {
306307
#[inline]
307-
pub fn eq(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
308+
pub fn eq(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
308309
self.with(self.inner.eq(v))
309310
}
310311

311312
#[inline]
312-
pub fn ne(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
313+
pub fn ne(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
313314
self.with(self.inner.ne(v))
314315
}
315316

316317
#[inline]
317-
pub fn le(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
318+
pub fn le(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
318319
self.with(self.inner.le(v))
319320
}
320321

321322
#[inline]
322-
pub fn ge(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
323+
pub fn ge(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
323324
self.with(self.inner.ge(v))
324325
}
325326

326327
#[inline]
327-
pub fn lt(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
328+
pub fn lt(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
328329
self.with(self.inner.lt(v))
329330
}
330331

331332
#[inline]
332-
pub fn gt(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
333+
pub fn gt(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
333334
self.with(self.inner.gt(v))
334335
}
335336

336337
#[inline]
337338
pub fn is_in(
338-
self,
339+
&self,
339340
vals: impl IntoIterator<Item = Prop>,
340341
) -> EndpointWrapper<PropertyFilter<T::Marker>> {
341342
self.with(self.inner.is_in(vals))
342343
}
343344

344345
#[inline]
345346
pub fn is_not_in(
346-
self,
347+
&self,
347348
vals: impl IntoIterator<Item = Prop>,
348349
) -> EndpointWrapper<PropertyFilter<T::Marker>> {
349350
self.with(self.inner.is_not_in(vals))
350351
}
351352

352353
#[inline]
353-
pub fn is_none(self) -> EndpointWrapper<PropertyFilter<T::Marker>> {
354+
pub fn is_none(&self) -> EndpointWrapper<PropertyFilter<T::Marker>> {
354355
self.with(self.inner.is_none())
355356
}
356357

357358
#[inline]
358-
pub fn is_some(self) -> EndpointWrapper<PropertyFilter<T::Marker>> {
359+
pub fn is_some(&self) -> EndpointWrapper<PropertyFilter<T::Marker>> {
359360
self.with(self.inner.is_some())
360361
}
361362

362363
#[inline]
363-
pub fn starts_with(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
364+
pub fn starts_with(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
364365
self.with(self.inner.starts_with(v))
365366
}
366367

367368
#[inline]
368-
pub fn ends_with(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
369+
pub fn ends_with(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
369370
self.with(self.inner.ends_with(v))
370371
}
371372

372373
#[inline]
373-
pub fn contains(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
374+
pub fn contains(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
374375
self.with(self.inner.contains(v))
375376
}
376377

377378
#[inline]
378-
pub fn not_contains(self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
379+
pub fn not_contains(&self, v: impl Into<Prop>) -> EndpointWrapper<PropertyFilter<T::Marker>> {
379380
self.with(self.inner.not_contains(v))
380381
}
381382

382383
#[inline]
383384
pub fn fuzzy_search(
384-
self,
385+
&self,
385386
s: impl Into<String>,
386387
d: usize,
387388
p: bool,
@@ -440,15 +441,15 @@ impl EndpointWrapper<OpChainBuilder<NodeFilter>> {
440441
impl EndpointWrapper<Windowed<NodeFilter>> {
441442
#[inline]
442443
pub fn property(
443-
self,
444+
&self,
444445
name: impl Into<String>,
445446
) -> EndpointWrapper<WindowedPropertyRef<NodeFilter>> {
446447
self.with(self.inner.property(name))
447448
}
448449

449450
#[inline]
450451
pub fn metadata(
451-
self,
452+
&self,
452453
name: impl Into<String>,
453454
) -> EndpointWrapper<WindowedPropertyRef<NodeFilter>> {
454455
self.with(self.inner.metadata(name))
@@ -616,28 +617,28 @@ impl EndpointWrapper<NodeNameFilterBuilder> {
616617
}
617618

618619
#[inline]
619-
pub fn starts_with<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeNameFilter> {
620+
pub fn starts_with<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeNameFilter> {
620621
self.with(self.inner.starts_with(s.into()))
621622
}
622623

623624
#[inline]
624-
pub fn ends_with<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeNameFilter> {
625+
pub fn ends_with<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeNameFilter> {
625626
self.with(self.inner.ends_with(s.into()))
626627
}
627628

628629
#[inline]
629-
pub fn contains<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeNameFilter> {
630+
pub fn contains<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeNameFilter> {
630631
self.with(self.inner.contains(s.into()))
631632
}
632633

633634
#[inline]
634-
pub fn not_contains<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeNameFilter> {
635+
pub fn not_contains<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeNameFilter> {
635636
self.with(self.inner.not_contains(s.into()))
636637
}
637638

638639
#[inline]
639640
pub fn fuzzy_search<S: Into<String>>(
640-
self,
641+
&self,
641642
s: S,
642643
d: usize,
643644
p: bool,
@@ -648,54 +649,54 @@ impl EndpointWrapper<NodeNameFilterBuilder> {
648649

649650
impl EndpointWrapper<NodeTypeFilterBuilder> {
650651
#[inline]
651-
pub fn eq<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeTypeFilter> {
652+
pub fn eq<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeTypeFilter> {
652653
self.with(self.inner.eq(s.into()))
653654
}
654655

655656
#[inline]
656-
pub fn ne<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeTypeFilter> {
657+
pub fn ne<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeTypeFilter> {
657658
self.with(self.inner.ne(s.into()))
658659
}
659660

660661
#[inline]
661-
pub fn is_in<I>(self, vals: I) -> EndpointWrapper<NodeTypeFilter>
662+
pub fn is_in<I>(&self, vals: I) -> EndpointWrapper<NodeTypeFilter>
662663
where
663664
I: IntoIterator<Item = String>,
664665
{
665666
self.with(self.inner.is_in(vals))
666667
}
667668

668669
#[inline]
669-
pub fn is_not_in<I>(self, vals: I) -> EndpointWrapper<NodeTypeFilter>
670+
pub fn is_not_in<I>(&self, vals: I) -> EndpointWrapper<NodeTypeFilter>
670671
where
671672
I: IntoIterator<Item = String>,
672673
{
673674
self.with(self.inner.is_not_in(vals))
674675
}
675676

676677
#[inline]
677-
pub fn starts_with<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeTypeFilter> {
678+
pub fn starts_with<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeTypeFilter> {
678679
self.with(self.inner.starts_with(s.into()))
679680
}
680681

681682
#[inline]
682-
pub fn ends_with<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeTypeFilter> {
683+
pub fn ends_with<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeTypeFilter> {
683684
self.with(self.inner.ends_with(s.into()))
684685
}
685686

686687
#[inline]
687-
pub fn contains<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeTypeFilter> {
688+
pub fn contains<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeTypeFilter> {
688689
self.with(self.inner.contains(s.into()))
689690
}
690691

691692
#[inline]
692-
pub fn not_contains<S: Into<String>>(self, s: S) -> EndpointWrapper<NodeTypeFilter> {
693+
pub fn not_contains<S: Into<String>>(&self, s: S) -> EndpointWrapper<NodeTypeFilter> {
693694
self.with(self.inner.not_contains(s.into()))
694695
}
695696

696697
#[inline]
697698
pub fn fuzzy_search<S: Into<String>>(
698-
self,
699+
&self,
699700
s: S,
700701
d: usize,
701702
p: bool,

raphtory/src/db/graph/views/filter/model/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ impl<M> Windowed<M>
6161
where
6262
M: Send + Sync + Clone + 'static,
6363
{
64-
pub fn property(self, name: impl Into<String>) -> WindowedPropertyRef<M> {
64+
pub fn property(&self, name: impl Into<String>) -> WindowedPropertyRef<M> {
6565
WindowedPropertyRef {
6666
prop_ref: PropertyRef::Property(name.into()),
6767
ops: vec![],
@@ -71,7 +71,7 @@ where
7171
}
7272
}
7373

74-
pub fn metadata(self, name: impl Into<String>) -> WindowedPropertyRef<M> {
74+
pub fn metadata(&self, name: impl Into<String>) -> WindowedPropertyRef<M> {
7575
WindowedPropertyRef {
7676
prop_ref: PropertyRef::Metadata(name.into()),
7777
ops: vec![],

0 commit comments

Comments
 (0)