from xml.etree import ElementTree
import json

from pyvo.registry import search as regsearch
from pyvo.dal import TAPService
from pyvo.io.vosi.tapregext import TableAccess

udflist = []

for service_record in regsearch(servicetype='tap'):
  service = TAPService(service_record.access_url)
  try: 
    for capability in service.capabilities:
      if 'TAP' in capability.standardid and isinstance(capability,
          TableAccess):
        for language in capability.languages:
          for langfeatlist in language.languagefeaturelists:
            for feature in langfeatlist:
              udflist.append({'name': feature.form,
               'description': feature.description})
  except:
    pass

udflist = list({value['name']:value for value in udflist}.values())

#This prints a JSON output
print(json.dumps(udflist, indent = 4))
