From f66aa71ec1a1a8d3485f76b7ad2a3989ca420146 Mon Sep 17 00:00:00 2001 From: Jay Lee Date: Fri, 19 Aug 2016 15:58:56 -0400 Subject: [PATCH] Schema updates no longer deletes fields. Fixes #229. --- src/gam.py | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/gam.py b/src/gam.py index 08b1c6ce..b9e8df33 100755 --- a/src/gam.py +++ b/src/gam.py @@ -6346,11 +6346,23 @@ def doDelSchema(): def doCreateOrUpdateUserSchema(function): cd = buildGAPIObject(u'directory') - schemaName = sys.argv[3] - body = {u'schemaName': schemaName, u'fields': []} + schemaKey = sys.argv[3] + if function == u'update': + try: + body = callGAPI(cd.schemas(), u'get', throw_reasons=[u'notFound'], customerId=GC_Values[GC_CUSTOMER_ID], schemaKey=schemaKey) + except googleapiclient.errors.HttpError: + print u'ERROR: Schema %s does not exist.' % schemaKey + sys.exit(3) + else: # function == insert + body = {u'schemaName': schemaKey, u'fields': []} i = 4 while i < len(sys.argv): if sys.argv[i] in [u'field']: + if function != u'insert': # clear field if it exists on update + for n, field in enumerate(body[u'fields']): + if field[u'fieldName'].lower() == sys.argv[i+1].lower(): + del(body[u'fields'][n]) + break a_field = {u'fieldName': sys.argv[i+1]} i += 2 while True: @@ -6379,14 +6391,27 @@ def doCreateOrUpdateUserSchema(function): else: print u'ERROR: %s is not a valid argument for "gam create schema"' % sys.argv[i] sys.exit(2) + elif sys.argv[i] in [u'deletefield']: + field_found = False + for n, field in enumerate(body[u'fields']): + if field[u'fieldName'].lower() == sys.argv[i+1].lower(): + del(body[u'fields'][n]) + field_found = True + break + else: + print "%s != %s" % (field[u'fieldName'].lower(), sys.argv[i+1].lower()) + if not field_found: + print u'ERROR: field %s not found in schema %s' % (sys.argv[i+1], schemaKey) + sys.exit(3) + i += 2 else: print u'ERROR: %s is not a valid argument for "gam create schema"' % sys.argv[i] sys.exit(2) if function == u'insert': - result = callGAPI(cd.schemas(), function, customerId=GC_Values[GC_CUSTOMER_ID], body=body) + result = callGAPI(cd.schemas(), u'insert', customerId=GC_Values[GC_CUSTOMER_ID], body=body) print u'Created user schema %s' % result[u'schemaName'] - else: - result = callGAPI(cd.schemas(), function, customerId=GC_Values[GC_CUSTOMER_ID], body=body, schemaKey=schemaName) + else: # function == update + result = callGAPI(cd.schemas(), u'update', customerId=GC_Values[GC_CUSTOMER_ID], body=body, schemaKey=schemaKey) print u'Updated user schema %s' % result[u'schemaName'] def _showSchema(schema):