User
A weird characteristic of WIMS is that an User is link to a specific
Class, there is no server-wide User. Many of the methods should
thus be used against a Class.
The first time an User is saved in a Class, the corresponding
instance of the class is then link to the User through the .wclass
attribute. This allow to use some methods such as delete()
or save()
without any argument.
The instance of Class is also link to an User obtained through
Class.getitem()
or User.get()
.
Instantiation
To get an User instance, you have two possibility. You can either create a new instance, or get one from the WIMS server.
To create a new instance :
from wimsapi import User
user = User("quser", "lastname", "firstname", "password", "mail@mail.com")
User can also take a lot of optionnal argument:
User(quser, lastname, firstname, password, email="", comments="", regnum="", photourl="", participate="", courses="", classes="", supervise="", supervisable="no", external_auth="", agreecgu="yes", regprop1="", regprop2="", regprop3="", regprop4="", regprop5="")
Where:
- quser - (str) user identifier on the receiving server.
- lastname - (str) last name of the user.
- firstname - (str) first name of the user.
- password - (str) user's password, non-crypted.
- email - (str) email address.
- comments - (str) any comments.
- regnum - (str) registration number.
- photourl - (str) url of user's photo.
- participate - (str) list classes where user participates.
- courses - (str) special for portal.
- classes - (str) special for portal.
- supervise - (str) List classes where teacher are administator.
- supervisable - (str) yes/no ; give right to the user to supervise a class (default to 'no').
- external_auth - (str) login for external_auth.
- agreecgu - (str) yes/ no ; if yes, the user will not be asked when he enters for the first time to agree the cgu (default to "yes").
- regprop[1..5] - (str) custom variables.
To get an instance from the WIMS server, you can use either of the following class method :
User.get(wclass, quser)
Where :
wclass
is an instance of Class which the User belong to.quser
is the identifier corresponding to the user.
or
c.getitem(quser, User)
Where :
c
is an instance of Class which the User belong to.quser
is the identifier corresponding to the user.User
the User class.
Saving
Any changes made to a User instance can be reflected on the WIMS server
with the method save()
:
from wimsapi import Class, User
c = Class.get("https://wims.unice.fr/wims/wims.cgi", "myself", "toto", 9999, "myclass")
u = User.get(c, "quser")
u.firstname = "Newname"
u.save()
If the User has been instantiated through its constructor, and not with
one of the get
method, and has not been saved yet, you will need to provide
a Class which had already been saved on the server.
c = Class.get("https://wims.unice.fr/wims/wims.cgi", "myself", "toto", 9999, "myclass")
u = User("quser", "lastname", "firstname", "password", "mail@mail.com")
u.save(c)
To add an User to a Class, you can also use c.additem(user)
.
c = Class.get("https://wims.unice.fr/wims/wims.cgi", "myself", "toto", 9999, "myclass")
u = User("quser", "lastname", "firstname", "password", "mail@mail.com")
c.additem(u)
In fact, c.additem(user)
will call user.save(c)
, therefore if a same user is added
to multiple classes through u.save(c)
or c.additem(u)
, future call to u.save()
will only save changed on the last Class the User has been saved to.
c = Class.get("https://wims.unice.fr/wims/wims.cgi", "myself", "toto", 9999, "myclass")
c2 = Class.get("https://wims.unice.fr/wims/wims.cgi", "myself", "toto", 8888, "myclass")
u = User("quser", "lastname", "firstname", "password", "mail@mail.com")
c.additem(u)
u.save(c2)
u.firstname = "Newname"
u.save() # Only save changes on c2
Reloading an instance
To reflect server-side changes on an instance of User, use refresh()
:
supervisor.firstname = "Jhon"
c = Class(9999, "myclass", "Title", "Institution", "mail@mail.com", "password", supervisor)
c.save("https://wims.unice.fr/wims/wims.cgi", "myself", "toto")
supervisor2 = c.getitem("supervisor", User)
supervisor2.firstname = "James"
supervisor2.save()
supervisor.institution # "Jhon"
supervisor.refresh()
supervisor.institution # "James"
Deleting
To delete an already saved User u
from a Class c
, you have a lot
possibility:
u.delete()
User.delete(c, u)
User.delete(c, "quser")
where"quser" == u.quser
c.delitem(u)
c.delitem("quser", User)
where"quser" == u.quser
Check if an user exists in a WIMS class
To check whether User u
is in a Class c
, you have once again
a lot of possibility:
User.check(c, u)
User.check(c, "quser")
where"quser" == u.quser
c.checkitem(u)
c.checkitem("quser", User)
where"quser" == u.quser
u in c
All of these methods return True
if the user exists in the class,
False
otherwise.
More Data
You can acceed to the user fullname with user.fullname
.
Once the User has been saved you can acceed the additionnal fields infos
and wclass
which is the instance of Class this user is saved on:
c = Class.get("https://wims.unice.fr/wims/wims.cgi", "myself", "toto", 9999, "myclass")
u = User("quser", "lastname", "firstname", "password", "mail@mail.com")
u.fullname # Firstname Lastname
c.additem(u)
u.wclass == c # True
c.infos
#{
# 'query_class': '9001', 'queryuser': 'quser', 'firstname': 'firstname',
# 'lastname': 'lastname', 'email': 'mail@mail.com', 'comments': '', 'regnum': '',
# 'photourl': '', 'participate': '', 'courses': '', 'classes': '', 'supervise': '',
# 'supervisable': 'no', 'external_auth': '', 'agreecgu': 'yes', 'regprop1': '',
# 'regprop2': '', 'regprop3': '', 'regprop4': '', 'regprop5': ''
#}