Skip to content

Instantly share code, notes, and snippets.

@moea
Created April 29, 2014 20:13
Show Gist options
  • Save moea/6b2fb84a40457ea3bc51 to your computer and use it in GitHub Desktop.
Save moea/6b2fb84a40457ea3bc51 to your computer and use it in GitHub Desktop.
Parallel encounter validation
@requiresMongo
@defer.inlineCallbacks
def getEncountersForUser(self, userID, startTime, endTime, areEncountering=lambda a, b: defer.succeed(True)):
user = yield findOne(self.users, col.userID == userID).execute()
user = ref.user(user)
def maybeInclude(encountering, u, row):
if encountering:
return (u, row)
return ()
deferreds = []
for row in (yield self._encountersForUserQuery(user, startTime, endTime).execute()):
otherUser = row['b'] if row['a'] == user else row['a']
deferreds.append(areEncountering(user, otherUser).addCallback(maybeInclude, otherUser, row))
byUser = {}
for (k, v) in filter(None, (yield defer.gatherResults(deferreds))):
byUser.setdefault(k, []).append(v)
defer.returnValue(byUser)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment