def main(argv=None): if argv: sys.argv.extend(argv) try: parser = ArgumentParser() parser.add_argument( "--host", default="mongodb://localhost:27017/MUGS", help="URI for connecting to MongoDB [default: %(default)s]") parser.add_argument("--hasgroup", nargs="+", default=[], help="Is this a MongoDB Group") parser.add_argument("-l", "--listgroups", action="store_true", default=False, help="print out all the groups") parser.add_argument("-v", "--version", action="store_true", default=False, help="print version") parser.add_argument("--members", nargs="+", default=[], help="list all members of a list of groups") parser.add_argument("--distinct", action="store_true", default=False, help="List all distinct members") parser.add_argument("-i", "--memberid", type=int, help="get info for member id") parser.add_argument("--membername", help="get info for member id") parser.add_argument("--upcomingevents", nargs="+", default=[], help="List upcoming events") parser.add_argument("--pastevents", nargs="+", default=[], help="List past events") parser.add_argument("--country", nargs="+", default=[], help="print groups by country") parser.add_argument( "--batches", action="store_true", default=False, help= "List all the batches in the audit database [default: %(default)s]" ) parser.add_argument("--curbatch", action="store_true", default=False, help="Report current batch ID") parser.add_argument("--joined", action="store_true", default=False, help="Report people who joined by year") parser.add_argument("--organizer", nargs="+", default=[], help="List organizers for a specific set of MUGS") parser.add_argument( "--start", help="Range used for fields in which ranges relevant") parser.add_argument( "--finish", help="Range used for fields in which ranges relevant") parser.add_argument("-f", "--format_type", choices=["oneline", "summary", "full"], default="oneline", help="type of output") # Process arguments args = parser.parse_args() mdb = MUGAlyserMongoDB(uri=args.host) members = Members(mdb) if args.version: print("%s muginfo %s" % (__programName__, __version__)) sys.exit(2) if args.curbatch: audit = Audit(mdb) curbatch = audit.getCurrentValidBatchID() print("current batch ID = {'batchID': %i}" % curbatch) if args.memberid: member = members.get_by_ID(args.memberid) if member: pprint(member) print(member["member_name"]) else: print("No such member: %s" % args.memberid) if args.membername: member = members.find_one({"member.member_name": args.membername}) if member: pprint(member) else: print("No such member: %s" % args.membername) for i in args.hasgroup: groups = Groups(mdb) if groups.get_group(i): print("{:40} :is a MongoDB MUG".format(i)) else: print("{:40} :is not a MongoDB MUG".format(i)) if args.listgroups: groups = Groups(mdb) count = 0 for g in groups.get_all_groups(): count = count + 1 print("{:40} (location: {})".format(g["group"]["urlname"], g["group"]["country"])) print("total: %i" % count) if args.country: count = 0 groups = Groups(mdb) country_groups = groups.find({"group.country": args.country}) for g in country_groups: count = count + 1 print("{:20} has MUG: {}".format(g["group"]["urlname"], args.country)) print("total : %i " % count) if args.batches: if not args.host: print("Need to specify --host for batchIDs") sys.exit(2) audit = Audit(mdb) batchIDs = audit.getBatchIDs() for b in batchIDs: print(b) count = 0 if args.members: print("args.members : %s" % args.members) q = Query() if args.start and not args.finish: q.add_range("member.join_time", parse(args.start), datetime.now()) elif not args.start and args.finish: q.add_range("member.join_time", datetime.now(), parse(args.finish)) elif args.start and args.finish: q.add_range("member.join_time", parse(args.start), parse(args.finish)) if "all" in args.members: it = members.get_all_members(q) else: it = members.get_many_group_members(args.members) for i in it: count = count + 1 # # sometimes country is not defined. # country = i["member"].pop("country", "Undefined") if "member_id" in i["member"]: # PRO API member format print(u"{:30}, {:20}, {:20}".format( i["member"]["member_name"], country, i["member"]["member_id"])) else: print(u"{:30}, {:20}, {:20}".format( i["member"]["name"], country, i["member"]["id"])) print("%i total" % count) if args.joined: members = Members(mdb) joined = members.joined_by_year() for i in joined: print(i) if args.distinct: members = Members(mdb) distinct = members.distinct_members() printCount(distinct) if args.upcomingevents: events = UpcomingEvents(mdb) events.count_print( events.get_all_group_events(args.upcomingevents), args.format_type) if args.pastevents: events = PastEvents(mdb) events.count_print(events.get_all_group_events(args.pastevents), args.format_type) if "all" in args.organizer: organizers = Organizers(mdb) members = organizers.get_organizers() organizers.count_print(members, args.format_type) else: organizers = Organizers(mdb) for i in args.organizer: print("Organizer: '%s'" % i) mugs = organizers.get_mugs(i) for m in mugs: print("\t%s" % m["urlname"]) except KeyboardInterrupt: print("Keyboard interrupt : Exiting...") sys.exit(2) except pymongo.errors.ServerSelectionTimeoutError, e: print("Failed to connect to MongoDB Server (server timeout): %s" % e) sys.exit(2)
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))