Source code for oc4idskit.combine
import warnings
from oc4idskit.exceptions import MissingProjectsWarning
from oc4idskit.util import _empty_project_package, _remove_empty_optional_metadata, _update_package_metadata
DEFAULT_VERSION = '0.9' # fields might be deprecated
[docs]
def combine_project_packages(packages, uri='', publisher=None, published_date='', version=DEFAULT_VERSION):
"""
Collects the projects from the project packages into one project package.
Warns ``~oc4idskit.exceptions.MissingProjectsWarning`` if the "projects" field is missing from a project package.
:param packages: an iterable of project packages
:param str uri: the project package's ``uri``
:param dict publisher: the project package's ``publisher``
:param str published_date: the project package's ``publishedDate``
:param str version: the project package's ``version``
"""
# See options for not buffering all inputs into memory: https://github.com/open-contracting/ocdskit/issues/119
output = _empty_project_package(uri, publisher, published_date, version)
for i, package in enumerate(packages):
_update_package_metadata(output, package)
if 'projects' in package:
output['projects'].extend(package['projects'])
else:
warnings.warn(MissingProjectsWarning(i))
if publisher:
output['publisher'] = publisher
_remove_empty_optional_metadata(output)
return output