def testAliceAndBadUsername(self): bad_username = "******" users = phlcon_user.query_users_from_usernames( self.conduit, [self.test_user, bad_username]) self.assertIsNone(users) userDict = phlcon_user.make_username_phid_dict( self.conduit, [self.test_user, bad_username]) self.assertIsNone(userDict)
def testAliceUsername(self): users = phlcon_user.query_users_from_usernames( self.conduit, [self.test_user]) self.assertEqual(len(users), 1) self.assertEqual(users[0].userName, self.test_user) userDict = phlcon_user.make_username_phid_dict( self.conduit, [self.test_user]) self.assertEqual(len(userDict), 1) self.assertEqual(userDict[self.test_user], users[0].phid) username = users[0].userName phid = users[0].phid phidDict = phlcon_user.make_phid_username_dict(self.conduit, [phid]) self.assertEqual(len(phidDict), 1) self.assertEqual(phidDict[phid], username)
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) # create a new diff if we need to if args.diff_id: diff_id = args.diff_id else: d = {'diff': args.raw_diff_file.read()} diff_id = conduit.call("differential.createrawdiff", d)["id"] fields = {} MessageFields = phlcon_differential.MessageFields if args.reviewers: fields[MessageFields.reviewer_phids] = args.reviewers if args.ccs: fields[MessageFields.cc_phids] = args.ccs # convert all the usernames to userPHIDs # TODO: extract function and share with 'query' users = [u for users in fields.itervalues() for u in users] users = list(set(users)) userToPhid = {} if users: userToPhid = phlcon_user.make_username_phid_dict(conduit, users) for key in fields.iterkeys(): fields[key] = [userToPhid[u] for u in fields[key]] fields[MessageFields.title] = args.title fields[MessageFields.test_plan] = args.test_plan if args.summary: d[MessageFields.summary] = args.summary d = {'diffid': diff_id, 'fields': fields} result = conduit.call("differential.createrevision", d) print result["revisionid"]
def process(args): conduit = phlsys_makeconduit.make_conduit(args.uri, args.user, args.cert) me = conduit.get_user() d = {} def processUserField(name, param, add_me): d[name] = param if add_me: d[name].append(me) processUserField("authors", args.authors, args.author_me) processUserField("reviewers", args.reviewers, args.reviewer_me) processUserField("ccs", args.ccs, args.cc_me) processUserField("subscribers", args.subscribers, args.subscriber_me) processUserField( "responsibleUsers", args.responsible_users, args.responsible_me) users = [u for users in d.itervalues() for u in users] users = list(set(users)) userToPhid = {} if users: userToPhid = phlcon_user.make_username_phid_dict(conduit, users) # XXX: check for duplicates in author and reviewer # XXX: check for bad userToPhid for key in d.iterkeys(): d[key] = [userToPhid[u] for u in d[key]] if args.ids: d["ids"] = args.ids if args.ids_stdin: ids = [int(i) for i in " ".join(sys.stdin.readlines()).split()] d["ids"] = args.ids + ids if args.status_type: d["status"] = "status-" + args.status_type if args.arcanist_projects: d["arcanistProjects"] = args.arcanist_projects if args.max_results: d["limit"] = args.max_results if args.offset_results: d["offset"] = args.offset_results # perform the query results = conduit.call("differential.query", d) # apply filters if args.statuses: new_results = [] for r in results: if r["statusName"] in args.statuses: new_results.append(r) results = new_results if args.update_min_age: now = datetime.datetime.now() new_results = [] for r in results: modified = datetime.datetime.fromtimestamp( float(r["dateModified"])) age = now - modified if age >= args.update_min_age: new_results.append(r) results = new_results if args.update_max_age: now = datetime.datetime.now() new_results = [] for r in results: modified = datetime.datetime.fromtimestamp( float(r["dateModified"])) age = now - modified if age <= args.update_max_age: new_results.append(r) results = new_results # apply transformations if args.translate: # gather user PHIDs user_phids = set() for r in results: user_phids.add(r["authorPHID"]) for u in r["ccs"]: user_phids.add(u) for u in r["reviewers"]: user_phids.add(u) # get the names back phidToUser = {} user_phids = list(user_phids) if user_phids: phidToUser = phlcon_user.make_phid_username_dict( conduit, user_phids) # do the translation for r in results: r[u"authorUsername"] = phidToUser[r["authorPHID"]] r[u"ccUsernames"] = [phidToUser[u] for u in r["ccs"]] r[u"reviewerUsernames"] = [phidToUser[u] for u in r["reviewers"]] for r in results: r[u"humanTimeSinceDateModified"] = humanTimeSince( datetime.datetime.fromtimestamp(float(r["dateModified"]))) r[u"humanTimeSinceDateCreated"] = humanTimeSince( datetime.datetime.fromtimestamp(float(r["dateCreated"]))) # output results if not args.format_type and not args.format_string: args.format_type = "short" if args.format_type: if args.format_type == "json": print json.dumps(results, sort_keys=True, indent=2) elif args.format_type == "python": pprint.pprint(results) elif args.format_type == "short": shortTemplate = string.Template("$id / $statusName / $title") for x in results: print shortTemplate.safe_substitute(x) elif args.format_type == "ids": shortTemplate = string.Template("$id") for x in results: print shortTemplate.safe_substitute(x) else: raise Exception("unsupported format") else: template = string.Template(args.format_string) for x in results: print template.safe_substitute(x)