* In gam transfer drive, handle unlimited space in target
* Handle user asking for download files when there aren't any
* Reset downloadurl for each CrOS device
* Once a file is foud to download, break out of the loop
* Minor cleanups
In print users allow actual field names isenforcedin2sv and isenrolledin2sv
In print users, add delimiter and sortheaders options
In print groups, add sortheaders option
* Fixed bug in gam oauth create where entering `e` to exit without changes didn't exit.
Remove printer register from documentation
Make non-documented command be:
`gam printer register`
instead of:
`gam printer xxx register`
as xxx isn't used (it's PrinterID for other commands)
49-51: Keep pylint happy
99-1029, 3328: Handle transition from service account to client for calendar
3194: Prepare for client access switching to Google oauth
This is similar to validation in add/update course
In doPrintCourseParticipants, set fields to minimize data download when gettting course list
Sort titles in print course-participants
* Misc updates
doUpdateCustomer - skip API call if user didn't update anything
getPhoto - handle uknkown user and user with no photo
doLabel, updateLabels - cleanup, make consistent
doGetGroupInfo - set settings in all cases to avoid having to use try/except
doPrintGroupMembers - message_attributes not used
* Give error when no arguments
* Update user attribute handling
User attribite type handling issues.
Custom types have their case lowered.
* Use custom keyword as part of type
Old - address, im, phone: type a|b|c|(custom <String>)
New - address, im, phone: type a|b|c|<String>
Dropping custom keyword will break existing scripts
* Use separate keyword for custom type
Old - organization: (type a|b|c) | (customtype <String>)
New - organization: (type a|b|c|<String>)
Dropping customtype keyword will break existing scripts
Unlike all other attributes, you do not set type: custom when customType is set
* Use implied custom
Old - location: type a|b|c|<String>
New - location: type a|b|c|<String>
No change
* Use implied custom, no type keyword
Old - externalid, otheremail, relation, website: a|b|c|<String>
New - externalid, otheremail, relation, website: a|b|c|<String>
No change
This update normalizes the type handling.
Case of custom types is preserved.
In update, for all fields, you can do:
a|b|c|<String>
a|b|c|custom <String>
customtype <String> is still allowed for organization for backward compatability.
* Just in case user does type work and then customtype xxx
* Update documentation