Skip to content

Commit 0fb326d

Browse files
committed
select with duplicates from different sources
1 parent b392203 commit 0fb326d

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/pyff/builtins.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,10 @@ def select(req: Plumbing.Request, *opts):
832832
if opts[0] == 'as' and len(opts) == 2:
833833
name = opts[1]
834834

835-
entities = resolve_entities(args, lookup_fn=req.md.store.select, dedup=dedup)
835+
if dedup:
836+
entities = resolve_entities(args, lookup_fn=req.md.store.select, dedup=dedup)
837+
else:
838+
entities = resolve_entities(args, lookup_fn=req.md.store.select_with_dups, dedup=dedup)
836839

837840
if req.state.get('match', None): # TODO - allow this to be passed in via normal arguments
838841

src/pyff/store.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import re
55
import shutil
66
import time
7+
from collections import defaultdict
78
from datetime import datetime, timedelta
89
from io import BytesIO
910
from threading import ThreadError
@@ -807,6 +808,7 @@ def __init__(self, *args, **kwargs):
807808
self.md = dict()
808809
self.index = dict()
809810
self.entities = dict()
811+
self.md_entities = defaultdict(dict)
810812

811813
for hn in DINDEX:
812814
self.index.setdefault(hn, {})
@@ -885,13 +887,15 @@ def update(self, t, tid=None, etag=None, lazy=True):
885887
self.entities[relt.get('entityID')] = relt # TODO: merge?
886888
if tid is not None:
887889
self.md[tid] = [relt.get('entityID')]
890+
self.md_entities[tid][relt.get('entityID')] = relt
888891
elif relt.tag == "{%s}EntitiesDescriptor" % NS['md']:
889892
if tid is None:
890893
tid = relt.get('Name')
891894
lst = []
892895
for e in iter_entities(t):
893-
self.update(e)
896+
self.update(e, tid)
894897
lst.append(e.get('entityID'))
898+
self.md_entities[tid][e.get('entityID')] = e
895899
self.md[tid] = lst
896900

897901
def lookup(self, key):
@@ -946,3 +950,9 @@ def _lookup(self, key):
946950
return lst
947951

948952
return []
953+
954+
def select_with_dups(self, member):
955+
if member in self.md_entities:
956+
return self.md_entities[member].values()
957+
958+
return []

0 commit comments

Comments
 (0)