File: user.py

package info (click to toggle)
python-irodsclient 3.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,352 kB
  • sloc: python: 16,650; xml: 525; sh: 104; awk: 5; sql: 3; makefile: 3
file content (138 lines) | stat: -rw-r--r-- 4,123 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
from irods.models import User, Group, UserAuth
from irods.meta import iRODSMetaCollection
from irods.exception import NoResultFound

_Not_Defined = ()


class Bad_password_change_parameter(Exception):
    pass


class iRODSUser:

    def remove_quota(self, resource="total"):
        self.manager.remove_quota(self.name, resource=resource)

    # TODO: remove this in branch 2.x (#482)
    def set_quota(self, amount, resource="total"):
        self.manager.set_quota(self.name, amount, resource=resource)

    def __init__(self, manager, result=None):
        self.manager = manager
        if result:
            self.id = result[User.id]
            self.name = result[User.name]
            self.type = result[User.type]
            self.zone = result[User.zone]
            self._comment = result.get(
                User.comment, _Not_Defined
            )  # these not needed in results for object ident,
            self._info = result.get(
                User.info, _Not_Defined
            )  # so we fetch lazily via a property
        self._meta = None

    @property
    def comment(self):
        if self._comment == _Not_Defined:
            query = self.manager.sess.query(User.id, User.comment).filter(
                User.id == self.id
            )
            self._comment = query.one()[User.comment]
        return self._comment

    @property
    def info(self):
        if self._info == _Not_Defined:
            query = self.manager.sess.query(User.id, User.info).filter(
                User.id == self.id
            )
            self._info = query.one()[User.info]
        return self._info

    @property
    def dn(self):
        query = self.manager.sess.query(UserAuth.user_dn).filter(
            UserAuth.user_id == self.id
        )
        return [res[UserAuth.user_dn] for res in query]

    @property
    def metadata(self):
        if not self._meta:
            self._meta = iRODSMetaCollection(
                self.manager.sess.metadata, User, self.name
            )
        return self._meta

    def modify_password(
        self, old_value, new_value, modify_irods_authentication_file=False
    ):
        self.manager.modify_password(
            old_value,
            new_value,
            modify_irods_authentication_file=modify_irods_authentication_file,
        )

    def modify(self, *args, **kwargs):
        self.manager.modify(self.name, *args, **kwargs)

    def __repr__(self):
        return f"<iRODSUser {self.id} {self.name} {self.type} {self.zone}>"

    def remove(self):
        self.manager.remove(self.name, self.zone, _object=self)

    def temp_password(self):
        return self.manager.temp_password_for_user(self.name)


class iRODSGroup:

    type = "rodsgroup"

    def remove_quota(self, resource="total"):
        self.set_quota(amount=0, resource=resource)

    def set_quota(self, amount, resource="total"):
        self.manager.set_quota(self.name, amount, resource=resource)

    def __init__(self, manager, result=None):
        self.manager = manager
        if result:
            self.id = result[Group.id]
            self.name = result[Group.name]
        self._meta = None

    def __repr__(self):
        return f"<iRODSGroup {self.id} {self.name}>"

    def remove(self):
        self.manager.remove(self.name, _object=self)

    @property
    def members(self):
        return self.manager.getmembers(self.name)

    @property
    def metadata(self):
        if not self._meta:
            self._meta = iRODSMetaCollection(
                self.manager.sess.metadata, User, self.name
            )
        return self._meta

    def addmember(self, user_name, user_zone=""):
        self.manager.addmember(self.name, user_name, user_zone)

    def removemember(self, user_name, user_zone=""):
        self.manager.removemember(self.name, user_name, user_zone)

    def hasmember(self, user_name):
        member_names = [user.name for user in self.members]
        return user_name in member_names


# The iRODSUserGroup is now renamed iRODSGroup, but we'll keep the deprecated name around for now.
iRODSUserGroup = iRODSGroup