mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-04 04:41:35 +00:00
add option to specify a time delta (#563)
This commit is contained in:
54
src/gam.py
54
src/gam.py
@@ -917,6 +917,46 @@ def convertEmailAddressToUID(emailAddressOrUID, cd=None, email_type=u'user'):
|
|||||||
return None
|
return None
|
||||||
return normalizedEmailAddressOrUID
|
return normalizedEmailAddressOrUID
|
||||||
|
|
||||||
|
def getTimeOrDeltaFromNow(time_string):
|
||||||
|
"""Get an ISO 8601 date/time or a positive/negative delta applied to now.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
time_string (string): The time or delta (e.g. '2017-09-01T12:34:56Z' or '-4h')
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
string: iso8601 formatted datetime in UTC.
|
||||||
|
|
||||||
|
Exits:
|
||||||
|
2: Not a valid delta.
|
||||||
|
|
||||||
|
"""
|
||||||
|
DELTA_PATTERN = re.compile(r'^([+-])(\d{1,4})([wdhm])$')
|
||||||
|
time_string = time_string.strip()
|
||||||
|
if not time_string or time_string[0] not in [u'+', u'-']:
|
||||||
|
return time_string
|
||||||
|
mg = re.match(DELTA_PATTERN, time_string.lower())
|
||||||
|
if mg is None:
|
||||||
|
print u'ERROR: %s is not a valid delta, expected (+|-)<Number>(m|h|d|w)' % time_string
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
sign = mg.group(1)
|
||||||
|
delta = int(mg.group(2))
|
||||||
|
unit = mg.group(3)
|
||||||
|
|
||||||
|
if unit == u'w':
|
||||||
|
deltaTime = datetime.timedelta(weeks=delta)
|
||||||
|
elif unit == u'd':
|
||||||
|
deltaTime = datetime.timedelta(days=delta)
|
||||||
|
elif unit == u'h':
|
||||||
|
deltaTime = datetime.timedelta(hours=delta)
|
||||||
|
elif unit == u'm':
|
||||||
|
deltaTime = datetime.timedelta(minutes=delta)
|
||||||
|
|
||||||
|
if sign == u'-':
|
||||||
|
return (datetime.datetime.utcnow() - deltaTime).isoformat() + u'Z'
|
||||||
|
else:
|
||||||
|
return (datetime.datetime.utcnow() + deltaTime).isoformat() + u'Z'
|
||||||
|
|
||||||
def buildGAPIServiceObject(api, act_as, use_scopes=None):
|
def buildGAPIServiceObject(api, act_as, use_scopes=None):
|
||||||
http = httplib2.Http(disable_ssl_certificate_validation=GC_Values[GC_NO_VERIFY_SSL],
|
http = httplib2.Http(disable_ssl_certificate_validation=GC_Values[GC_NO_VERIFY_SSL],
|
||||||
cache=GM_Globals[GM_CACHE_DIR])
|
cache=GM_Globals[GM_CACHE_DIR])
|
||||||
@@ -1047,10 +1087,10 @@ def showReport():
|
|||||||
try_date = sys.argv[i+1]
|
try_date = sys.argv[i+1]
|
||||||
i += 2
|
i += 2
|
||||||
elif sys.argv[i].lower() == u'start':
|
elif sys.argv[i].lower() == u'start':
|
||||||
startTime = sys.argv[i+1]
|
startTime = getTimeOrDeltaFromNow(sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
elif sys.argv[i].lower() == u'end':
|
elif sys.argv[i].lower() == u'end':
|
||||||
endTime = sys.argv[i+1]
|
endTime = getTimeOrDeltaFromNow(sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
elif sys.argv[i].lower() == u'event':
|
elif sys.argv[i].lower() == u'event':
|
||||||
eventName = sys.argv[i+1]
|
eventName = sys.argv[i+1]
|
||||||
@@ -3377,14 +3417,14 @@ def doCalendarAddEvent():
|
|||||||
body[u'start'] = {u'date': sys.argv[i+2]}
|
body[u'start'] = {u'date': sys.argv[i+2]}
|
||||||
i += 3
|
i += 3
|
||||||
else:
|
else:
|
||||||
body[u'start'] = {u'dateTime': sys.argv[i+1]}
|
body[u'start'] = {u'dateTime': getTimeOrDeltaFromNow(sys.argv[i+1])}
|
||||||
i += 2
|
i += 2
|
||||||
elif sys.argv[i].lower() == u'end':
|
elif sys.argv[i].lower() == u'end':
|
||||||
if sys.argv[i+1].lower() == u'allday':
|
if sys.argv[i+1].lower() == u'allday':
|
||||||
body[u'end'] = {u'date': sys.argv[i+2]}
|
body[u'end'] = {u'date': sys.argv[i+2]}
|
||||||
i += 3
|
i += 3
|
||||||
else:
|
else:
|
||||||
body[u'end'] = {u'dateTime': sys.argv[i+1]}
|
body[u'end'] = {u'dateTime': getTimeOrDeltaFromNow(sys.argv[i+1])}
|
||||||
i += 2
|
i += 2
|
||||||
elif sys.argv[i].lower() == u'guestscantinviteothers':
|
elif sys.argv[i].lower() == u'guestscantinviteothers':
|
||||||
body[u'guestsCanInviteOthers'] = False
|
body[u'guestsCanInviteOthers'] = False
|
||||||
@@ -3848,7 +3888,7 @@ def addDriveFileACL(users):
|
|||||||
emailMessage = sys.argv[i+1]
|
emailMessage = sys.argv[i+1]
|
||||||
i += 2
|
i += 2
|
||||||
elif sys.argv[i].lower() == u'expires':
|
elif sys.argv[i].lower() == u'expires':
|
||||||
body[u'expirationTime'] = sys.argv[i+1]
|
body[u'expirationTime'] = getTimeOrDeltaFromNow(sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
else:
|
else:
|
||||||
print u'ERROR: %s is not a valid argument for "gam <users> add drivefileacl"' % sys.argv[i]
|
print u'ERROR: %s is not a valid argument for "gam <users> add drivefileacl"' % sys.argv[i]
|
||||||
@@ -4227,10 +4267,10 @@ def getDriveFileAttribute(i, body, parameters, myarg, update=False):
|
|||||||
body[u'labels'][DRIVEFILE_LABEL_CHOICES_MAP[myarg]] = True
|
body[u'labels'][DRIVEFILE_LABEL_CHOICES_MAP[myarg]] = True
|
||||||
i += 1
|
i += 1
|
||||||
elif myarg in [u'lastviewedbyme', u'lastviewedbyuser', u'lastviewedbymedate', u'lastviewedbymetime']:
|
elif myarg in [u'lastviewedbyme', u'lastviewedbyuser', u'lastviewedbymedate', u'lastviewedbymetime']:
|
||||||
body[u'lastViewedByMeDate'] = sys.argv[i+1]
|
body[u'lastViewedByMeDate'] = getTimeOrDeltaFromNow(sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg in [u'modifieddate', u'modifiedtime']:
|
elif myarg in [u'modifieddate', u'modifiedtime']:
|
||||||
body[u'modifiedDate'] = sys.argv[i+1]
|
body[u'modifiedDate'] = getTimeOrDeltaFromNow(sys.argv[i+1])
|
||||||
i += 2
|
i += 2
|
||||||
elif myarg == u'description':
|
elif myarg == u'description':
|
||||||
body[u'description'] = sys.argv[i+1]
|
body[u'description'] = sys.argv[i+1]
|
||||||
|
|||||||
Reference in New Issue
Block a user