# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""
This file contains a contains the high-level functions to read the various
VOSI Endpoints.
"""
from astropy.utils.xml.writer import XMLWriter
from astropy.io.votable.util import convert_to_writable_filelike
from ...utils.xml.elements import xmlattribute, parse_for_object
from .tree import JobSummary, Jobs
__all__ = ["parse_job", "parse_job_list", "JobFile"]
[docs]def parse_job_list(
source, pedantic=None, filename=None, _debug_python_based_parser=False
):
"""
Parses a job xml file (or file-like object), and returns a
`~pyvo.io.uws.tree.Jobs` object.
Parameters
----------
source : str or readable file-like object
Path or file object containing a tableset xml file.
pedantic : bool, optional
When `True`, raise an error when the file violates the spec,
otherwise issue a warning. Warnings may be controlled using
the standard Python mechanisms. See the `warnings`
module in the Python standard library for more information.
Defaults to False.
filename : str, optional
A filename, URL or other identifier to use in error messages.
If *filename* is None and *source* is a string (i.e. a path),
then *source* will be used as a filename for error messages.
Therefore, *filename* is only required when source is a
file-like object.
Returns
-------
`~pyvo.io.uws.tree.Jobs` object
See also
--------
pyvo.io.vosi.exceptions : The exceptions this function may raise.
"""
return parse_for_object(source, Jobs, pedantic, filename,
_debug_python_based_parser).joblist
[docs]def parse_job(
source, pedantic=None, filename=None, _debug_python_based_parser=False
):
"""
Parses a job xml file (or file-like object), and returns a
`~pyvo.io.uws.tree.JobFile` object.
Parameters
----------
source : str or readable file-like object
Path or file object containing a tableset xml file.
pedantic : bool, optional
When `True`, raise an error when the file violates the spec,
otherwise issue a warning. Warnings may be controlled using
the standard Python mechanisms. See the `warnings`
module in the Python standard library for more information.
Defaults to False.
filename : str, optional
A filename, URL or other identifier to use in error messages.
If *filename* is None and *source* is a string (i.e. a path),
then *source* will be used as a filename for error messages.
Therefore, *filename* is only required when source is a
file-like object.
Returns
-------
`~pyvo.io.vosi.endpoint.JobFile` object
See also
--------
pyvo.io.vosi.exceptions : The exceptions this function may raise.
"""
return parse_for_object(source, JobFile, pedantic, filename,
_debug_python_based_parser)
[docs]class JobFile(JobSummary):
"""
availability element: represents an entire file.
The keyword arguments correspond to setting members of the same
name, documented below.
"""
def __init__(self, config=None, pos=None, **kwargs):
super().__init__(config=config, pos=pos, **kwargs)
self._version = None
@xmlattribute
def version(self):
return self._version
@version.setter
def version(self, version):
self._version = version
[docs] def parse(self, iterator, config):
for start, tag, data, pos in iterator:
if start and tag == 'xml':
pass
elif start and tag == 'job':
# version was not required in v1.0, so default to that.
self._version = data.get('version', '1.0')
break
return super().parse(iterator, config)
[docs] def to_xml(self, fd):
with convert_to_writable_filelike(fd) as _fd:
w = XMLWriter(_fd)
xml_header = (
'<?xml version="1.0" encoding="utf-8"?>\n'
'<!-- Produced with pyvo.io.uws -->\n'
)
w.write(xml_header)
super().to_xml(w)