Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@karel1980
Last active December 23, 2015 06:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karel1980/6594769 to your computer and use it in GitHub Desktop.
Save karel1980/6594769 to your computer and use it in GitHub Desktop.
create schema.json based on output from GET /repository/schema/fieldType and GET /repository/schema/recordType
import json
# Usage:
#
# curl -O http://lilyserver:12060/repository/schema/fieldType
# curl -O http://lilyserver:12060/repository/schema/recordType
# python schema_json.py > schema.json
# lily-import schema.json
#
def fieldTypes(ft):
result = []
ft_by_id = {}
for f in ft['results']:
nsmap = f['namespaces']
longname = expand_pfx(f['name'], nsmap)
result.append({
"name": longname,
"scope": f['scope'],
"valueType": f['valueType']
})
ft_by_id[f['id']] = longname
return result, ft_by_id
def recordTypes(ft_by_id, rt):
result = []
for r in rt['results']:
nsmap = r['namespaces']
result.append({
"name": expand_pfx(r['name'], nsmap),
"fields": get_field_list(r, ft_by_id)
})
return result
def get_field_list(r, ft_by_id):
result = []
for f in r['fields']:
result.append({
"name": ft_by_id[f['id']],
"mandatory": f["mandatory"]
})
return result
def inv_map(m):
return {v:k for k, v in m.items()}
def expand_pfx(short, local_nsmap):
pfx, name = short.split("$")
ns = inv_map(local_nsmap)[pfx]
return ns + "$" + name
ns_count=0
nsmap={}
def shorten_names(schema):
global nsmap
def shorten(n):
ns,name = n.split("$")
global ns_count
global nsmap
if ns not in nsmap:
ns_count+=1
nsmap[ns] = "ns%s"%(ns_count,)
return nsmap[ns] + "$" + name
for f in schema['fieldTypes']:
f['name'] = shorten(f['name'])
for r in schema['recordTypes']:
r['name'] = shorten(r['name'])
for f in r['fields']:
f['name'] =shorten(f['name'])
schema['namespaces'] = nsmap
def main():
ft = json.load(open("fieldType"))
rt = json.load(open("recordType"))
schema={}
schema['fieldTypes'], ft_by_id = fieldTypes(ft)
schema['recordTypes'] = recordTypes(ft_by_id, rt)
shorten_names(schema)
print json.dumps(schema)
if __name__=="__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment