FAKE_ACCOUNTS = ('unknown','buildservice-autocommit', 'autobuild', '_service') class User: def parse(self, xml, userid): self.userid = userid self.realname = xml.find("realname").text self.email = xml.find("email").text if self.email == None: self.email = "" return self def __str__(self): return f"User {self.userid}: {self.realname} {self.email}" def __repr__(self): return f"[{self.__str__()}]" def import_into_db(self, db): cur = db.cursor() cur.execute( """INSERT INTO users (userid, realname, email) VALUES (%s,%s,%s) RETURNING id""", ( self.userid, self.realname, self.email, ), ) cur.close() def lookup(db, userid): cur= db.cursor() cur.execute("SELECT * FROM users where userid=%s", (userid,)) row = cur.fetchone() if not row: cur.close() return None return row @classmethod def get_batch(self, db): cur = db.cursor() cur.execute( """SELECT DISTINCT revisions.userid FROM revisions LEFT JOIN users ON revisions.userid = users.userid WHERE users.userid IS NULL AND revisions.userid NOT IN ('unknown','buildservice-autocommit', 'autobuild', '_service')""" ) missing_users = [row[0] for row in cur.fetchall()] if not missing_users: cur.close() return [] return missing_users