class Members(MUGData): ''' classdocs ''' def __init__(self, mdb): ''' Constructor ''' super(Members, self).__init__(mdb, "members") self._membersAgg = Agg(self._collection) self._membersAgg.addMatch({"member.name": {"$exists": 1}}) self._membersAgg.addProject({"_id": 0, "name": "$member.name"}) self._membersAgg.addGroup({"_id": "$name", "occurences": {"$sum": 1}}) self._membersAgg.addSort( Sorter(occurences=pymongo.DESCENDING)) # largest first self._memberCount = 0 self._feedback = Feedback() self._audit = Audit(mdb) def get_group_members(self, url_name, q=None): ''' returns a MongoDB cursor. ''' query = {"member.chapters": {"$elemMatch": {"urlname": url_name}}} if q: query.update(q) return self.find(query) def get_many_group_members(self, groups, query=None): ''' returns a generator ''' return itertools.chain( *[self.get_group_members(i, query) for i in groups]) def count_members(self, groups): total = 0 for i in groups: count = self.get_group_members(i).count() total = total + count return count def get_all_members(self, query=None): ''' Query meetup API for multiple groups. ''' return self.find(query) def distinct_members(self): return self._collection.distinct("member.member_name") def get_by_name(self, name): member = self.find_one({"member.member_name": name}) if member is None: return None else: return member["member"] def get_by_ID(self, member_id): val = self.find_one({"member.member_id": member_id}) if val is None: return val else: return val["member"] def get_by_join_date(self, start, end): return self.find({"member.join_time": {"$gte": start, "$lte": end}}) def joined_by_year(self): agg_pipe = Agg(self._collection) agg_pipe.addMatch({"batchID": self._audit.getCurrentBatchID()}) agg_pipe.addProject({ "_id": 0, "member_id": "$member.member_id", "member_name": "$member.member_name", "year": { "$year": "$member.join_time" }, }) agg_pipe.addGroup({"_id": "$year", "total_registered": {"$sum": 1}}) return agg_pipe.aggregate() def get_members(self): return self._membersAgg.aggregate() def summary(self, doc): return "name: %s, id: %s, country: %s" % (doc["member"]["member_name"], doc["member"]["member_id"], doc["member"]["country"]) def one_line(self, doc): return "name : %s, id: %s" % (doc["member"]["member_name"], doc["member"]["member_id"])
class Test_audit(unittest.TestCase): def setUp(self): self._mdb = MUGAlyserMongoDB(uri="mongodb://localhost/TEST_AUDIT") self._audit = Audit(self._mdb) def tearDown(self): self._mdb.client().drop_database("TEST_AUDIT") pass #@unittest.skip def test_incrementID(self): batchID = self._audit.incrementBatchID() curID = self._audit.getCurrentBatchID() self.assertEqual(batchID, curID) newID = self._audit.incrementBatchID() self.assertEqual(batchID + 1, newID) def test_getCurrentValidBatchID(self): batchID1 = self._audit.startBatch(doc={"test": "doc"}, trial=True) self._audit.endBatch(batchID1) #self.assertRaises( ValueError, self._audit.getCurrentValidBatchID ) batchID2 = self._audit.startBatch( { "args": "arg list", "version": __programName__ + " " + __version__ }, trial=False, apikey=get_meetup_key()) self._audit.endBatch(batchID2) self.assertEqual(batchID2, self._audit.getCurrentValidBatchID()) batchID3 = self._audit.startBatch(doc={"test": "doc"}, trial=True) self._audit.endBatch(batchID3) self.assertEqual(batchID2, self._audit.getCurrentValidBatchID()) def test_batch(self): batchIDs = [x for x in self._audit.getBatchIDs()] thisBatchID = self._audit.startBatch(doc={"test": "doc"}, trial=True) newBatchIDs = [x for x in self._audit.getBatchIDs()] self.assertEqual(len(batchIDs) + 1, len(newBatchIDs)) self.assertTrue(thisBatchID in newBatchIDs) self._audit.endBatch(thisBatchID) #@unittest.skip def test_IDs(self): self.assertRaises(ValueError, self._audit.getCurrentBatchID) self.assertRaises(ValueError, self._audit.getLastBatchID) self.assertFalse(self._audit.inBatch()) batchID = self._audit.startBatch({}) self.assertTrue(self._audit.inBatch()) self.assertEquals(1, self._audit.getCurrentBatchID()) self._audit.endBatch(batchID) batch = self._audit.getBatch(batchID) self.assertTrue("start" in batch) self.assertTrue("end" in batch) self.assertTrue("info" in batch) self.assertTrue("batchID" in batch) self.assertFalse(self._audit.incomplete(batchID)) batchID = self._audit.startBatch({}) self.assertTrue(self._audit.inBatch()) self.assertEquals(2, self._audit.getCurrentBatchID()) self._audit.endBatch(batchID) self.assertFalse(self._audit.inBatch()) #@unittest.skip def test_start_end_batch(self): batchID = self._audit.startBatch({}) self.assertTrue(self._audit.incomplete(batchID)) self._audit.endBatch(batchID) self.assertFalse(self._audit.incomplete(batchID))