예제 #1
0
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"])
예제 #2
0
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))