def main(p): # The mongo bits try: c, dbh = mdb.getHandle(host=p.dbHost, port=p.dbPort, db=p.db, user=p.dbUser, password=p.dbPassword) evCollHandle = dbh[p.eventsCollection] except: logging.critical('Failed to connect and authenticate', exc_info=True) sys.exit() # Get the current tags tags = cf.getCurrentTags(evCollHandle) # Get the current bounding boxes queryBBoxes = cf.getQueryBBox(evCollHandle) x = 1 while x == 1: # Here's the redis queue for managing the tweets as they come in try: q = RedisQueue(p.redisName, host=p.redisHost, password=p.redisPassword, port=p.redisPort, db=0) except: logging.error('Failed to connect to REDIS db.', exc_info=True) sys.exit() # This call is blocking, so expect it to hang on this point tweetStr = q.get() tweet = json.loads(tweetStr) # Work out which object/event this tweet is associated with if tags: tweetTags = cf.whichTags(tags, tweet) for tweetTag in tweetTags: success = dispatchTweet(p, tweet, tweetTag) logging.debug("Tag-based message dispatched: %s" % (success)) if queryBBoxes: tweetGeos = cf.matchesCurrentGeos(queryBBoxes, tweet) for tweetGeo in tweetGeos: success = dispatchTweet(p, tweet, tweetGeo) logging.debug("Geo-based message dispatched: %s" % (success))
def testMatchesCurrentGeos(self): f = open(os.path.join(os.getcwd(), 'sampleTweet.json'), 'r') tweet = json.loads(f.read()) [-0.13546585999999999, 51.510528880000003] queryBBoxes = {'hits': {'s': 51.504755706271219, 'e': -0.10658170627121719, 'w': -0.15086429372878282, 'n': 51.549038293728778}, 'miss': {'s': 51.544755706271219, 'e': -0.14658170627121719, 'w': -0.17086429372878282, 'n': 51.589038293728778}} bboxIds = cf.matchesCurrentGeos(queryBBoxes, tweet) self.assertEquals(bboxIds, ['hits'])
def main(p): # The mongo bits try: c, dbh = mdb.getHandle(host=p.dbHost, port=p.dbPort, db=p.db, user=p.dbUser, password=p.dbPassword) evCollHandle = dbh[p.eventsCollection] except: logging.critical('Failed to connect and authenticate', exc_info=True) sys.exit() # Get the current tags tags = cf.getCurrentTags(evCollHandle) # Get the current bounding boxes queryBBoxes = cf.getQueryBBox(evCollHandle) x = 1 while x == 1: # Here's the redis queue for managing the tweets as they come in try: q = RedisQueue(p.redisName, host=p.redisHost, password=p.redisPassword, port=p.redisPort, db=0) except: logging.error('Failed to connect to REDIS db.', exc_info=True) sys.exit() # This call is blocking, so expect it to hang on this point tweetStr = q.get() tweet = json.loads(tweetStr) # Work out which object/event this tweet is associated with if tags: tweetTags = cf.whichTags(tags, tweet) for tweetTag in tweetTags: success = dispatchTweet(p, tweet, tweetTag) logging.debug("Tag-based message dispatched: %s" %(success)) if queryBBoxes: tweetGeos = cf.matchesCurrentGeos(queryBBoxes, tweet) for tweetGeo in tweetGeos: success = dispatchTweet(p, tweet, tweetGeo) logging.debug("Geo-based message dispatched: %s" %(success))
def testMatchesCurrentGeos(self): f = open(os.path.join(os.getcwd(), 'sampleTweet.json'), 'r') tweet = json.loads(f.read()) [-0.13546585999999999, 51.510528880000003] queryBBoxes = { 'hits': { 's': 51.504755706271219, 'e': -0.10658170627121719, 'w': -0.15086429372878282, 'n': 51.549038293728778 }, 'miss': { 's': 51.544755706271219, 'e': -0.14658170627121719, 'w': -0.17086429372878282, 'n': 51.589038293728778 } } bboxIds = cf.matchesCurrentGeos(queryBBoxes, tweet) self.assertEquals(bboxIds, ['hits'])