summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Šplíchal <psplicha@redhat.com>2011-06-27 10:28:38 +0200
committerPetr Šplíchal <psplicha@redhat.com>2011-06-27 10:28:38 +0200
commit88cbc8fac64ad4b2f67da0f47602cde8fdac9cb8 (patch)
treec262dfa970e2c04d25b91e59d76f197151b08478
parent4cb86893ef8d20e180e95250ebfce65e3484ffdd (diff)
downloadpython-nitrate-88cbc8fac64ad4b2f67da0f47602cde8fdac9cb8.tar.gz
python-nitrate-88cbc8fac64ad4b2f67da0f47602cde8fdac9cb8.tar.xz
python-nitrate-88cbc8fac64ad4b2f67da0f47602cde8fdac9cb8.zip
Nitrate: User class implementation
-rw-r--r--Nitrate.py90
1 files changed, 87 insertions, 3 deletions
diff --git a/Nitrate.py b/Nitrate.py
index eb9531f..b555b4f 100644
--- a/Nitrate.py
+++ b/Nitrate.py
@@ -468,9 +468,93 @@ class Status(Nitrate):
class User(Nitrate):
""" User. """
- id = property(_getter("id"), doc="User id")
- def __init__(self, id):
- self._id = id
+
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ # User Properties
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ # Read-only properties
+ id = property(_getter("id"), doc="User id.")
+ login = property(_getter("login"), doc="Login username.")
+ email = property(_getter("email"), doc="User email address.")
+ name = property(_getter("name"), doc="User first name and last name.")
+
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ # User Special
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ def __init__(self, id=None, login=None, email=None):
+ """ Initialize by user id, login or email. Defaults to the current
+ user if no id, login or email provided. """
+
+ self._name = self._login = self._email = NitrateNone
+
+ # Set login & email if provided
+ if login is not None:
+ self._login = login
+ elif email is not None:
+ self._email = email
+ # Detect login & email if passed as the first parameter
+ elif isinstance(id, basestring):
+ if '@' in id:
+ self._email = id
+ else:
+ self._login = id
+ id = None
+ Nitrate.__init__(self, id, prefix="UID")
+
+ def __str__(self):
+ """ User login for printing. """
+ return self.login
+
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ # User Methods
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ def _get(self):
+ """ Get the missing build data. """
+
+ # Search by id
+ if self._id is not NitrateNone:
+ try:
+ hash = self._server.User.filter({"id": self.id})[0]
+ log.info("Fetched user " + self.identifier)
+ log.debug(pretty(hash))
+ except IndexError:
+ raise NitrateError(
+ "Cannot find user for " + self.identifier)
+ # Search by login
+ elif self._login is not NitrateNone:
+ try:
+ hash = self._server.User.filter({"username": self.login})[0]
+ log.info("Fetched user for login '{0}'" + self.login)
+ log.debug(pretty(hash))
+ except IndexError:
+ raise NitrateError("No user found for login '{0}'".format(
+ self.login))
+ # Search by email
+ elif self._email is not NitrateNone:
+ try:
+ hash = self._server.User.filter({"email": self.email})[0]
+ log.info("Fetched user for email '{0}'" + self.email)
+ log.debug(pretty(hash))
+ except IndexError:
+ raise NitrateError("No user found for email '{0}'".format(
+ self.email))
+ # Otherwise initialize to the current user
+ else:
+ hash = self._server.User.get_me()
+ log.info("Fetched current user")
+ log.debug(pretty(hash))
+
+ # Save values
+ self._id = hash["id"]
+ self._login = hash["username"]
+ self._email = hash["email"]
+ if hash["first_name"] and hash["last_name"]:
+ self._name = hash["first_name"] + " " + hash["last_name"]
+ else:
+ self._name = None
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~