demo/tools/residue_types.py

Summary

Maintainability
D
2 days
Test Coverage
#!python3

entries = []
with open('residue_types.csv') as f:
  first = True
  for line in f:
    values = line.strip().split(',')
    if first:
      keys = values
      first = False
    else:
      entry = dict(zip(keys, values))
      assert len(entry.keys()) == len(keys)
      entry['nameQuoted'] = "'{}'".format(entry['name'])
      entries.append(entry)

def format_entry(entry):
  return "{nameQuoted:<5}: new ResidueType('{name}', '{fullName}', '{letterCode}')".format(**entry)

print('''\
// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.
ResidueType.StandardTypes = {
  /* eslint-disable no-magic-numbers */
%s
  /* eslint-enable no-magic-numbers */
};
''' % ',\n'.join('  ' + format_entry(entry) for entry in entries))


def format_color_entry(entry, key):
  return "{nameQuoted:<5}: {color}".format(color=entry[key], **entry)
  
for key in filter(lambda x: x.startswith('color'), keys):
  print('''\
// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.
/* %s */.colors = {
  /* eslint-disable no-magic-numbers */
%s
  /* eslint-enable no-magic-numbers */
};
''' % (key, ',\n'.join('  ' + format_color_entry(entry, key) for entry in entries if entry[key])))