pyceo/ceod/model/UWLDAPRecord.py

63 lines
1.5 KiB
Python

from typing import List, Union
import ldap3
class UWLDAPRecord:
"""Represents a record from the UW LDAP."""
ldap_attributes = [
'uid',
'mailLocalAddress',
'ou', # program
'cn',
'sn',
'givenName',
]
def __init__(
self,
uid: str,
mail_local_addresses: List[str],
program: Union[str, None] = None,
cn: Union[str, None] = None,
sn: Union[str, None] = None,
given_name: Union[str, None] = None,
):
self.uid = uid
self.mail_local_addresses = mail_local_addresses
self.program = program
self.cn = cn
self.sn = sn
self.given_name = given_name
@staticmethod
def deserialize_from_ldap(entry: ldap3.Entry):
"""
Deserializes a dict returned from LDAP into a
UWLDAPRecord.
"""
return UWLDAPRecord(
uid=entry.uid.value,
mail_local_addresses=entry.mailLocalAddress.values,
program=entry.ou.value,
cn=entry.cn.value,
sn=entry.sn.value,
given_name=entry.givenName.value,
)
def to_dict(self):
data = {
'uid': self.uid,
'mail_local_addresses': self.mail_local_addresses,
}
if self.program:
data['program'] = self.program
if self.cn:
data['cn'] = self.cn
if self.sn:
data['sn'] = self.sn
if self.given_name:
data['given_name'] = self.given_name
return data