bug fixes
[plstackapi.git] / plstackapi / core / api / users.py
index 6862e30..5b89389 100644 (file)
@@ -1,37 +1,41 @@
+from types import StringTypes
 from plstackapi.openstack.client import OpenStackClient
 from plstackapi.openstack.driver import OpenStackDriver
 from plstackapi.core.api.auth import auth_check
-from plstackapi.core.models import User, Site
-def lookup_site(fields):
-    site = None
-    if 'site' in fields:
-        if isinstance(fields['site'], int):
-            sites = Site.objects.filter(id=fields['site'])
-        else:
-            sites = Site.objects.filter(login_base=fields['site'])
-        if sites:
-            site = sites[0]
-    return site 
+from plstackapi.core.models import PLUser, Site
+from plstackapi.core.api.sites import _get_sites
+
+def _get_users(filter):
+    if isinstance(filter, StringTypes) and filter.isdigit():
+        filter = int(filter)
+    if isinstance(filter, int):
+        users = PLUser.objects.filter(id=filter)
+    elif isinstance(filter, StringTypes):
+        users = PLUser.objects.filter(email=filter)
+    elif isinstance(filter, dict):
+        users = PLUser.objects.filter(**filter)
+    else:
+        users = []
+    return users 
 
 def add_user(auth, fields):
     driver = OpenStackDriver(client = auth_check(auth))
-    site = lookup_site(fields
-    if site: fields['site'] = site     
-    user = User(**fields)
+    sites = _get_sites(fields.get('site')
+    if sites: fields['site'] = sites[0]     
+    user = PLUser(**fields)
     nova_fields = {'name': user.email[:user.email.find('@')],
                    'email': user.email, 
                    'password': fields.get('password'),
                    'enabled': user.enabled}    
     nova_user = driver.create_user(**nova_fields)
-    #driver.add_user_role(user.id, user.site.tenant_id, 'user')
+    #driver.add_user_user(user.id, user.site.tenant_id, 'user')
     user.user_id=nova_user.id
     user.save()
     return user
 
 def update_user(auth, id, **fields):
     driver = OpenStackDriver(client = auth_check(auth))
-    users = User.objects.filter(id=id)
+    users = PLUser.objects.filter(id=id)
     if not users:
         return
 
@@ -45,14 +49,14 @@ def update_user(auth, id, **fields):
     if 'enabled' in fields:
         nova_fields['enabled'] = fields['enabled']
     driver.update_user(user.user_id, **nova_fields)
-    site = lookup_site(fields)
-    if site: fields['site'] = site
+    sites = _get_sites(fields.get('site'))
+    if sites: fields['site'] = sites[0]
     user.update(**fields)
     return user 
 
 def delete_user(auth, filter={}):
     driver = OpenStackDriver(client = auth_check(auth))   
-    users = User.objects.filter(**filter)
+    users = _get_users(filter)
     for user in users:
         driver.delete_user(id=user.user_id) 
         user.delete()
@@ -60,7 +64,7 @@ def delete_user(auth, filter={}):
 
 def get_users(auth, filter={}):
     client = auth_check(auth)
-    users = User.objects.filter(**filter)
+    users = _get_users(filter)
     return users