accounts2/fas/fas .LDAP.py.swp, NONE, 1.1 .test.py.swp, NONE, 1.1 LDAP.pyc, NONE, 1.1 __init__.py, NONE, 1.1 __init__.pyc, NONE, 1.1 controllers.py, NONE, 1.1 controllers.pyc, NONE, 1.1 controllers.py~, NONE, 1.1 fasLDAP.py, NONE, 1.1 fasLDAP.pyc, NONE, 1.1 fasLDAP.py~, NONE, 1.1 json.py, NONE, 1.1 model.py, NONE, 1.1 model.pyc, NONE, 1.1 release.py, NONE, 1.1 t.py, NONE, 1.1 test.py, NONE, 1.1

Michael Patrick McGrath (mmcgrath) fedora-extras-commits at redhat.com
Mon Mar 26 15:11:19 UTC 2007


Author: mmcgrath

Update of /cvs/fedora/accounts2/fas/fas
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv26831/fas/fas

Added Files:
	.LDAP.py.swp .test.py.swp LDAP.pyc __init__.py __init__.pyc 
	controllers.py controllers.pyc controllers.py~ fasLDAP.py 
	fasLDAP.pyc fasLDAP.py~ json.py model.py model.pyc release.py 
	t.py test.py 
Log Message:
added tg fas2 code


--- NEW FILE .LDAP.py.swp ---
b0VIM 7.0

tp

ad






es)

--- NEW FILE .test.py.swp ---
b0VIM 7.0

tp

ad



--- NEW FILE LDAP.pyc ---
mò
–|áEc













--- NEW FILE __init__.py ---


--- NEW FILE __init__.pyc ---
mò
PkàEc

--- NEW FILE controllers.py ---
from turbogears import controllers, expose
# from model import *
from turbogears import identity, redirect
from cherrypy import request, response
from fas.fasLDAP import UserAccount
from fas.fasLDAP import Person
from fas.fasLDAP import Groups
from turbogears import exception_handler
import turbogears
# from fas import json
# import logging
# log = logging.getLogger("fas.controllers")

class Root(controllers.RootController):
    @expose(template="fas.templates.error")
    def errorMessage(self, tg_exceptions=None):
        ''' Generic exception handler'''
        message = 'Replace me with a tg_error popup thang %s' % tg_exceptions
        return dict(handling_value=True,exception=message)

    @expose(template="fas.templates.welcome")
    # @identity.require(identity.in_group("admin"))
    def index(self):
        import time
        # log.debug("Happy TurboGears Controller Responding For Duty")
        return dict(now=time.ctime())

    @expose(template="fas.templates.login")
    def login(self, forward_url=None, previous_url=None, *args, **kw):

        if not identity.current.anonymous \
            and identity.was_login_attempted() \
            and not identity.get_identity_errors():
            raise redirect(forward_url)

        forward_url=None
        previous_url= request.path

        if identity.was_login_attempted():
            msg=_("The credentials you supplied were not correct or "
                   "did not grant access to this resource.")
        elif identity.get_identity_errors():
            msg=_("You must provide your credentials before accessing "
                   "this resource.")
        else:
            msg=_("Please log in.")
            forward_url= request.headers.get("Referer", "/")

        response.status=403
        return dict(message=msg, previous_url=previous_url, logging_in=True,
                    original_parameters=request.params,
                    forward_url=forward_url)

    @expose()
    def logout(self):
        identity.current.logout()
        raise redirect("/")

    @expose(template="fas.templates.editAccount")
#    @identity.require(identity.in_group("admin"))
#    @identity.require(identity.not_anonymous())
    def editAccount(self,userName=None):
        if not userName:
            userName = turbogears.identity.current.user_name
        user = Person.byUserName(userName)
        groups = Groups.byUserName(userName)
        # log.debug("Happy TurboGears Controller Responding For Duty")
        return dict(user=user, groups=groups)

    @expose(template="fas.templates.editGroup")
#    @identity.require(identity.not_anonymous())
    def editGroup(self, groupName):
        groups = Groups.byGroupName(groupName)
        return dict(groups=groups, groupName=groupName)

    @expose(template="fas.templates.groupList")
    @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
#    @identity.require(identity.not_anonymous())
    def groupList(self, search='*'):
        groups = Groups.groups(search)
        try:
            groups[0]
        except:
        turbogears.flash("No Groups found matching '%s'" % search)
        groups = []
        return dict(printList=groups, search=search)

    @expose(template="fas.templates.userList")
#    @identity.require(identity.not_anonymous())
    @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
    def userList(self, search='a*'):
        users = Person.users(search)
        try:
            users[0]
        except:
        turbogears.flash("No users found matching '%s'" % search)
        users = []
#            raise ValueError("No users found matching '%s'.  Please go back and search again." % search)
        return dict(printList=users, search=search)

    @expose(template='fas.templates.edit')
    @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
#    @identity.require(identity.not_anonymous())
    def edit(self, userName, attribute, value, update=None):
        attribute = attribute.encode('utf8')
        value = value.encode('utf8')
        if update:
            p = Person.byUserName(userName)
            p.__setattr__('%s' % attribute, '%s' % value)
            turbogears.flash("'%s' Updated to %s" % (attribute, value))
        return dict(userName=userName, attribute=attribute, value=value)


--- NEW FILE controllers.pyc ---
mò
BFc







s






s
s




--- NEW FILE controllers.py~ ---
from turbogears import controllers, expose
# from model import *
from turbogears import identity, redirect
from cherrypy import request, response
from fas.fasLDAP import UserAccount
from fas.fasLDAP import Person
from fas.fasLDAP import Groups
from turbogears import exception_handler
import turbogears
# from fas import json
# import logging
# log = logging.getLogger("fas.controllers")

class Root(controllers.RootController):
    @expose(template="fas.templates.error")
    def errorMessage(self, tg_exceptions=None):
        ''' Generic exception handler'''
        message = 'Replace me with a tg_error popup thang %s' % tg_exceptions
        return dict(handling_value=True,exception=message)

    @expose(template="fas.templates.welcome")
    # @identity.require(identity.in_group("admin"))
    def index(self):
        import time
        # log.debug("Happy TurboGears Controller Responding For Duty")
        return dict(now=time.ctime())

    @expose(template="fas.templates.login")
    def login(self, forward_url=None, previous_url=None, *args, **kw):

        if not identity.current.anonymous \
            and identity.was_login_attempted() \
            and not identity.get_identity_errors():
            raise redirect(forward_url)

        forward_url=None
        previous_url= request.path

        if identity.was_login_attempted():
            msg=_("The credentials you supplied were not correct or "
                   "did not grant access to this resource.")
        elif identity.get_identity_errors():
            msg=_("You must provide your credentials before accessing "
                   "this resource.")
        else:
            msg=_("Please log in.")
            forward_url= request.headers.get("Referer", "/")

        response.status=403
        return dict(message=msg, previous_url=previous_url, logging_in=True,
                    original_parameters=request.params,
                    forward_url=forward_url)

    @expose()
    def logout(self):
        identity.current.logout()
        raise redirect("/")

    @expose(template="fas.templates.editAccount")
#    @identity.require(identity.in_group("admin"))
    @identity.require(identity.not_anonymous())
    def editAccount(self,userName=None):
        if not userName:
            userName = turbogears.identity.current.user_name
        user = Person.byUserName(userName)
        groups = Groups.byUserName(userName)
        # log.debug("Happy TurboGears Controller Responding For Duty")
        return dict(user=user, groups=groups)
        
    @expose(template="fas.templates.editGroup")
#    @identity.require(identity.not_anonymous())
    def editGroup(self, groupName):
        groups = Groups.byGroupName(groupName)
        return dict(groups=groups, groupName=groupName)

    @expose(template="fas.templates.groupList")
    @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
#    @identity.require(identity.not_anonymous())
    def groupList(self, search='*'):
        groups = Groups.groups(search)
        try:
            groups[0]
        except:
		turbogears.flash("No Groups found matching '%s'" % search)
		groups = []
        return dict(printList=groups, search=search)
    
    @expose(template="fas.templates.userList")
#    @identity.require(identity.not_anonymous())
    @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)")
    def userList(self, search='a*'):
        users = Person.users(search)
        try:
            users[0]
        except:
		turbogears.flash("No users found matching '%s'" % search)
		users = []
#            raise ValueError("No users found matching '%s'.  Please go back and search again." % search)
        return dict(printList=users, search=search)


--- NEW FILE fasLDAP.py ---
#!/usr/bin/python

import ldap

class Server:
    def __init__(self, server='localhost', who='', password=''):
        self.ldapConn = ldap.open(server)
        self.ldapConn.simple_bind_s(who, password)

class Group:
    ''' Individual Group abstraction class '''
    def __init__(self, fedoraRoleApprovalDate, fedoraRoleSponsor, cn, fedoraRoleCreationDate, objectClass, fedoraRoleType, fedoraRoleStatus, fedoraRoleDomain):
        self.fedoraRoleApprovalDate = fedoraRoleApprovalDate
        self.fedoraRoleSponsor = fedoraRoleSponsor
        self.cn = cn
        self.fedoraRoleCreationDate = fedoraRoleCreationDate
        self.objectClass = objectClass
        self.fedoraRoleType = fedoraRoleType
        self.fedoraRoleStatus = fedoraRoleStatus
        self.fedoraRoleDomain = fedoraRoleDomain

class Groups:
    ''' Class contains group information '''

    @classmethod
    def byUserName(self, cn):
        server = Server()
        groups = {}
        filter = 'objectClass=FedoraRole'
        base = 'ou=Roles,cn=%s,ou=People,dc=fedoraproject,dc=org' % cn
        groupsDict = search(base, filter)
        for group in groupsDict:
            cn = group[0][1]['cn'][0]
            groups[cn] = Group(
                fedoraRoleApprovalDate = group[0][1]['fedoraRoleApprovalDate'][0],
                fedoraRoleSponsor = group[0][1]['fedoraRoleSponsor'][0],
                cn = group[0][1]['cn'][0],
                fedoraRoleCreationDate = group[0][1]['fedoraRoleCreationDate'][0],
                objectClass = group[0][1]['objectClass'][0],
                fedoraRoleType = group[0][1]['fedoraRoleType'][0],
                fedoraRoleStatus = group[0][1]['fedoraRoleStatus'][0],
                fedoraRoleDomain = group[0][1]['fedoraRoleDomain'][0]
                        )
        return groups
    
    @classmethod
    def groups(self, searchExpression='*', findAttr='cn'):
        groups = []
        filter = '%s=%s' % (findAttr, searchExpression)
        base = 'ou=FedoraGroups,dc=fedoraproject,dc=org'
        attributes = ['cn']
        groupsDict = search(base, filter, attributes)
        if groupsDict:
            for group in groupsDict:
                groups.append(group[0][1]['cn'][0])
        else:
            return None
        return groups

    @classmethod
    def remove(self, groupName, userName):
        if groupName in self.byUserName(userName):
            # Probably shouldn't be 'TypeError'
            delete('cn=%s,ou=Roles,cn=%s,ou=People,dc=fedoraproject,dc=org' % (groupName, userName))
        else:
            raise TypeError, 'User not in that group'

    @classmethod
    def apply(self, groupName, userName):
        ''' Apply for a group '''
        import datetime
        if groupName in self.byUserName(userName):
            # Probably shouldn't be 'TypeError'
            raise TypeError, 'Already in that group'
        try:
            self.byGroupName(groupName)
        except TypeError:
            raise TypeError, 'Group "%s" does not exist' % groupName

        dt = datetime.datetime.now()
        now = '%s-%s-%s %s:%s:%s.%s' % (dt.year,
                                        dt.month,
                                        dt.day,
                                        dt.hour,
                                        dt.minute,
                                        dt.second,
                                        dt.microsecond)

        attributes = { 'cn' : groupName,
                    'fedoraRoleApprovaldate' : 'NotApproved',
                    'fedoraRoleCreationDate' : now,
                    'fedoraRoleDomain' : 'None',
                    'fedoraRoleSponsor' : 'None',
                    'fedoraRoleStatus' : 'unapproved',
                    'fedoraRoleType' : 'user',
                    'objectClass' : ('fedoraRole')}

   add('cn=%s,ou=Roles,cn=%s,ou=People,dc=fedoraproject,dc=org' % (groupName, userName), attributes) 


    @classmethod
    def byGroupName(cls, cn):
        self = cls()
        server = Server()
        users = {}
        filter = 'cn=%s' % cn
        base = 'ou=People,dc=fedoraproject,dc=org'
        self.__attributes = ['cn']
        attributes = ['cn']
        usersDict = search(base, filter)
        for user in usersDict:
            userName = user[0][0].split(',')[2].split('=')[1]

            users[userName] = Group(
                fedoraRoleApprovalDate = user[0][1]['fedoraRoleApprovalDate'][0],
                fedoraRoleSponsor = user[0][1]['fedoraRoleSponsor'][0],
                cn = user[0][1]['cn'][0],
                fedoraRoleCreationDate = user[0][1]['fedoraRoleCreationDate'][0],
                objectClass = user[0][1]['objectClass'][0],
                fedoraRoleType = user[0][1]['fedoraRoleType'][0],
                fedoraRoleStatus = user[0][1]['fedoraRoleStatus'][0],
                fedoraRoleDomain = user[0][1]['fedoraRoleDomain'][0]
            )
        return users

class Person:
    ''' information and attributes about users '''
    __base = 'ou=People,dc=fedoraproject,dc=org'
    __server = Server()
    __filter = ''

    def __getattr__(self, attr):
        if attr.startswith('_'):
            print 'GET %s=%s' % (attr, self.__getattr__(attr))
            return self.__getattr__(attr)
        try:
            attributes = []
            attributes.append(attr)
            return search(self.__base, self.__filter, attributes)[0][0][1][attr][0]
        except:
            # Should probably raise here.
            return None

    def __setattr__(self, attr, value):
        if attr.startswith('_'):
            return setattr(self.__class__, attr, value)

        base = 'cn=%s,ou=People,dc=fedoraproject,dc=org' % self.__getattr__('cn')
        modify(base, attr, value, self.__getattr__(attr))
        return setattr(self.__class__, attr, value)

    @classmethod
    def users(self, searchExpression='*', findAttr='cn'):
        ''' Returns a list of users '''
        users = []
        filter = '(&(objectClass=top)(%s=%s))' % (findAttr, searchExpression)
        attributes = ['cn']
        usersDict = search(self.__base, filter, attributes)
        if usersDict:
            for user in usersDict:
                users.append(user[0][1]['cn'][0])
        else:
            return None
        return users

    @classmethod
    def byFilter(cls, filter):
        ''' Returns only the first result in the search '''
        self = cls()
        self.__filter = filter
        return self

    @classmethod
    def byUserName(self, cn):
        '''Wrapper for byFilter - search by cn'''
        return self.byFilter('cn=%s' % cn)

    @classmethod
    def auth(self, who, password):
        ''' Basic Authentication Module '''
        who = 'cn=%s,ou=People,dc=fedoraproject,dc=org' % who
        self.server.ldapConn.simple_bind_s(who, password)

class UserAccount:
    def __init__(self):
        self.realName = ''
        self.userName = ''
        self.primaryEmail = ''
        self.groups = []

def delete(base, ldapServer=None):
    ''' Delete target base '''
    if not ldapServer:
        s = Server()
        ldapServer = s.ldapConn

    ldapServer.simple_bind_s('cn=directory manager', 'test')
    ldapServer.delete_s(base)

def add(base, attributes, ldapServer=None):
    ''' Add a new record to LDAP instance '''
    if not ldapServer:
        s = Server()
        ldapServer = s.ldapConn
    attributes=[ (k,v) for k,v in attributes.items() ]

    ldapServer.simple_bind_s('cn=directory manager', 'test')
    ldapServer.add_s(base, attributes)

def modify(base, attribute, new, old=None, ldapServer=None):
    ''' Modify an attribute, requires write access '''
    if old == new:
        print "same"
        return None
    else:
        print "diff %s %s %s" % (attribute, new, old)

    if not ldapServer:
        s = Server()
        ldapServer = s.ldapConn

    from ldap import modlist
    ldapServer.simple_bind_s('cn=directory manager', 'test')


    o = { attribute : old }
    n = { attribute : new }
    print attribute
    print o
    print n
    ldif = modlist.modifyModlist(o, n)
    
    #commit
    ldapServer.modify_s(base, ldif)
    ldapServer.unbind_s()
    
    

def search(base, filter, attributes=None, ldapServer=None):
    if not ldapServer:
            s = Server()
            ldapServer = s.ldapConn
    scope = ldap.SCOPE_SUBTREE
    count = 0
    timeout = 2
    result_set = []
    try:
        result_id = ldapServer.search(base, scope, filter, attributes)
        while 1:
            result_type, result_data = ldapServer.result(result_id, timeout)
            if (result_data == []):
                break
            else:
                if result_type == ldap.RES_SEARCH_ENTRY:
                    result_set.append(result_data)
        if len(result_set) == 0:
            print "No results."
            return
    except ldap.LDAPError, e:
        print "Crap: %s" % e
        raise
    ldapServer.unbind_s()

    return result_set


--- NEW FILE fasLDAP.pyc ---
mò
cÉFc



















	









(










(



--- NEW FILE fasLDAP.py~ ---
#!/usr/bin/python

import ldap

class Server:
    def __init__(self, server='localhost', who='', password=''):
        self.ldapConn = ldap.open(server)
        self.ldapConn.simple_bind_s(who, password)

class Group:
    ''' Individual Group abstraction class '''
    def __init__(self, fedoraRoleApprovalDate, fedoraRoleSponsor, cn, fedoraRoleCreationDate, objectClass, fedoraRoleType, fedoraRoleStatus, fedoraRoleDomain):
        self.fedoraRoleApprovalDate = fedoraRoleApprovalDate
        self.fedoraRoleSponsor = fedoraRoleSponsor
        self.cn = cn
        self.fedoraRoleCreationDate = fedoraRoleCreationDate
        self.objectClass = objectClass
        self.fedoraRoleType = fedoraRoleType
        self.fedoraRoleStatus = fedoraRoleStatus
        self.fedoraRoleDomain = fedoraRoleDomain

class Groups:
    ''' Class contains group information '''
    @classmethod
    def byUserName(self, cn):
        server = Server()
        groups = {}
        filter = 'objectClass=FedoraRole'
        base = 'ou=Roles,cn=%s,ou=People,dc=fedoraproject,dc=org' % cn
        groupsDict = search(base, filter)
        for group in groupsDict:
            cn = group[0][1]['cn'][0]
            groups[cn] = Group(
                fedoraRoleApprovalDate = group[0][1]['fedoraRoleApprovalDate'][0],
                fedoraRoleSponsor = group[0][1]['fedoraRoleSponsor'][0],
                cn = group[0][1]['cn'][0],
                fedoraRoleCreationDate = group[0][1]['fedoraRoleCreationDate'][0],
                objectClass = group[0][1]['objectClass'][0],
                fedoraRoleType = group[0][1]['fedoraRoleType'][0],
                fedoraRoleStatus = group[0][1]['fedoraRoleStatus'][0],
                fedoraRoleDomain = group[0][1]['fedoraRoleDomain'][0]
                        )
        return groups
    
    @classmethod
    def groups(self, searchExpression='*', findAttr='cn'):
        groups = []
        filter = '%s=%s' % (findAttr, searchExpression)
        base = 'ou=FedoraGroups,dc=fedoraproject,dc=org'
        attributes = ['cn']
        groupsDict = search(base, filter, attributes)
        if groupsDict:
            for group in groupsDict:
                groups.append(group[0][1]['cn'][0])
        else:
            return None
        return groups

    @classmethod
    def byGroupName(self, cn):
        server = Server()
        users = {}
        filter = 'cn=%s' % cn
        base = 'ou=People,dc=fedoraproject,dc=org'
        attributes = ['cn']
        usersDict = search(base, filter)
        for user in usersDict:
            userName = user[0][0].split(',')[2].split('=')[1]

            users[userName] = Group(
                fedoraRoleApprovalDate = user[0][1]['fedoraRoleApprovalDate'][0],
                fedoraRoleSponsor = user[0][1]['fedoraRoleSponsor'][0],
                cn = user[0][1]['cn'][0],
                fedoraRoleCreationDate = user[0][1]['fedoraRoleCreationDate'][0],
                objectClass = user[0][1]['objectClass'][0],
                fedoraRoleType = user[0][1]['fedoraRoleType'][0],
                fedoraRoleStatus = user[0][1]['fedoraRoleStatus'][0],
                fedoraRoleDomain = user[0][1]['fedoraRoleDomain'][0]
            )
        return users

class Person:
    ''' information and attributes about users '''
    base = 'ou=People,dc=fedoraproject,dc=org'
    server = Server()
#    def __init__(self):
#        self.server = Server()

    @classmethod
    def users(self, searchExpression='*', findAttr='cn'):
        ''' Returns a list of users '''
        users = []
        filter = '(&(objectClass=top)(%s=%s))' % (findAttr, searchExpression)
        attributes = ['cn']
        usersDict = search(self.base, filter, attributes)
        if usersDict:
            for user in usersDict:
                users.append(user[0][1]['cn'][0])
        else:
            return None
        return users

    @classmethod
    def byFilter(self, filter):
        ''' Returns only the first result in the search '''
        person = search(self.base, filter)[0][0]
        self.telephoneNumber = person[1]['telephoneNumber'][0]
        self.userName = person[1]['cn'][0]
        self.bugzillaEmail = person[1]['fedoraPersonBugzillaMail'][0]
        self.ircNick = person[1]['fedoraPersonIrcNick'][0]
        self.pgpKey = person[1]['fedoraPersonKeyId'][0]
        self.primaryEmail = person[1]['mail'][0]
        self.postalAddress = person[1]['postalAddress'][0]
        self.givenName = person[1]['givenName'][0]
        self.sshPubKey = person[1]['fedoraPersonSshKey'][0]
        self.description = person[1]['description'][0]
        return self

    @classmethod
    def byUserName(self, cn):
        '''Wrapper for byFilter - search by cn'''
        return self.byFilter('cn=%s' % cn)

    @classmethod
    def auth(self, who, password):
        ''' Basic Authentication Module '''
        who = 'cn=%s,ou=People,dc=fedoraproject,dc=org' % who
        self.server.ldapConn.simple_bind_s(who, password)

    @classmethod
    def commit(self):
        ''' Commit changes made to the object '''
        # ghost is our fake user to compare against.
        self.ghost = self.byUserName(self.userName)
        #modify(self.server.ldapConn

class UserAccount:
    def __init__(self):
        self.realName = ''
        self.userName = ''
        self.primaryEmail = ''
        self.groups = []

def modify(base, attribute, old, new, ldapServer=None):
    if not ldapServer:
        s = Server()
        ldapServer = s.ldapConn

    from ldap import modlist
    ''' Modify an attribute, requires write access '''
    ldapServer.simple_bind_s('cn=directory manager', 'test')

    if old == new:
        return None

    o = { attribute : old }
    n = { attribute : new }
    ldif = modlist.modifyModlist(o, n)
    
    #commit
    ldapServer.modify_s(base, ldif)
    ldapServer.unbind_s()
    

def search(base, filter, attributes=None, ldapServer=None):
    if not ldapServer:
            s = Server()
            ldapServer = s.ldapConn
    scope = ldap.SCOPE_SUBTREE
    count = 0
    timeout = 2
    result_set = []
    try:
        result_id = ldapServer.search(base, scope, filter, attributes)
        while 1:
            result_type, result_data = ldapServer.result(result_id, timeout)
            if (result_data == []):
                break
            else:
                if result_type == ldap.RES_SEARCH_ENTRY:
                    result_set.append(result_data)
        if len(result_set) == 0:
            print "No results."
            return
    except ldap.LDAPError, e:
        print "Crap: %s" % e
        raise
    ldapServer.unbind_s()

    return result_set


--- NEW FILE json.py ---
# A JSON-based API(view) for your app.
# Most rules would look like:
# @jsonify.when("isinstance(obj, YourClass)")
# def jsonify_yourclass(obj):
#     return [obj.val1, obj.val2]
# @jsonify can convert your objects to following types:
# lists, dicts, numbers and strings

from turbojson.jsonify import jsonify

from turbojson.jsonify import jsonify_sqlobject
from fas.model import User, Group, Permission

@jsonify.when('isinstance(obj, Group)')
def jsonify_group(obj):
    result = jsonify_sqlobject( obj )
    result["users"] = [u.user_name for u in obj.users]
    result["permissions"] = [p.permission_name for p in obj.permissions]
    return result

@jsonify.when('isinstance(obj, User)')
def jsonify_user(obj):
    result = jsonify_sqlobject( obj )
    del result['password']
    result["groups"] = [g.group_name for g in obj.groups]
    result["permissions"] = [p.permission_name for p in obj.permissions]
    return result

@jsonify.when('isinstance(obj, Permission)')
def jsonify_permission(obj):
    result = jsonify_sqlobject( obj )
    result["groups"] = [g.group_name for g in obj.groups]
    return result


--- NEW FILE model.py ---
from datetime import datetime
from turbogears.database import PackageHub
from sqlobject import *
from turbogears import identity 

hub = PackageHub("fas")
__connection__ = hub

# class YourDataClass(SQLObject):
#     pass

# identity models.
class Visit(SQLObject):
    class sqlmeta:
        table = "visit"

    visit_key = StringCol(length=40, alternateID=True,
                          alternateMethodName="by_visit_key")
    created = DateTimeCol(default=datetime.now)
    expiry = DateTimeCol()

    def lookup_visit(cls, visit_key):
        try:
            return cls.by_visit_key(visit_key)
        except SQLObjectNotFound:
            return None
    lookup_visit = classmethod(lookup_visit)

class VisitIdentity(SQLObject):
    visit_key = StringCol(length=40, alternateID=True,
                          alternateMethodName="by_visit_key")
    user_id = IntCol()



--- NEW FILE model.pyc ---
mò
çâEc











--- NEW FILE release.py ---
# Release information about fas

version = "1.0"

# description = "Your plan to rule the world"
# long_description = "More description about your plan"
# author = "Your Name Here"
# email = "YourEmail at YourDomain"
# copyright = "Vintage 2006 - a good year indeed"

# if it's open source, you might want to specify these
# url = "http://yourcool.site/"
# download_url = "http://yourcool.site/download"
# license = "MIT"


--- NEW FILE t.py ---
from fasLDAP import Groups
g = Groups.byGroupName('art')
print g.__base
print g.__filter


--- NEW FILE test.py ---
from fasLDAP import add, Groups, delete

attributes = { 'cn' : 'infrastructureTest',
                    'fedoraRoleApprovaldate' : 'None',
                    'fedoraRoleCreationDate' : 'None',
                    'fedoraRoleDomain' : 'None',
                    'fedoraRoleSponsor' : 'None',
                    'fedoraRoleStatus' : 'unapproved',
                    'fedoraRoleType' : 'user',
                    'objectClass' : ('fedoraRole')}
print "add('cn=infrastructureTest,ou=Roles,cn=mmcgrath,ou=People,dc=fedoraproject,dc=org', attributes)"
print "delete('cn=infrastructureTest,ou=Roles,cn=mmcgrath,ou=People,dc=fedoraproject,dc=org')"





More information about the scm-commits mailing list