def _assert_doc_citations(doc, is_update):
    """Assert citations."""
    tu.assert_int(doc.citations, 2)

    c = doc.citations[0]
    tu.assert_str(c.collective_title, "Bellouin N., O. Boucher", True)
    tu.assert_str(c.location, "http://www.metoffice.gov.uk/publications/HCTN/HCTN_73.pdf")
    tu.assert_str(c.title, "Bellouin et al. 2007")
    tu.assert_str(c.type, "Online Other")
def _assert_doc_citations(doc, is_update):
    """Assert citations."""
    tu.assert_int(doc.citations, 2)

    c = doc.citations[0]
    tu.assert_str(c.collective_title, "Bellouin N., O. Boucher", True)
    tu.assert_str(c.location,
                  "http://www.metoffice.gov.uk/publications/HCTN/HCTN_73.pdf")
    tu.assert_str(c.title, "Bellouin et al. 2007")
    tu.assert_str(c.type, "Online Other")
def _assert_doc_tile(doc, is_update):
    """Assert tile information."""
    g = doc.esm_model_grids[0]
    tu.assert_int(g.tile_count, 1)
    tu.assert_iter(g.tiles, 1, cim.v1.GridTile)
    tu.assert_object(g.tiles[0], cim.v1.GridTile)
    t = g.tiles[0]
    tu.assert_str(t.description, "Horizontal properties: The N96", True)
    tu.assert_str(t.discretization_type, "logically_rectangular")
    tu.assert_str(t.mnemonic, "N96")
def _assert_doc_core(doc, is_update):
    """Assert core information."""
    tu.assert_str(doc.description, "The HadGEM2-A model", True)
    if not is_update:
        tu.assert_str(doc.long_name, "Hadley Global Environment Model 2 - Atmosphere")
    tu.assert_date(doc.release_date, "2009")
    tu.assert_str(doc.short_name, "HadGEM2-A")
    tu.assert_str(doc.type, "model")
    tu.assert_int(doc.types, 2)
    tu.assert_str(doc.types[1], "model")
def _assert_doc_tile(doc, is_update):
    """Assert tile information."""
    g = doc.esm_model_grids[0]
    tu.assert_int(g.tile_count, 1)
    tu.assert_iter(g.tiles, 1, cim.v1.GridTile)
    tu.assert_object(g.tiles[0], cim.v1.GridTile)
    t = g.tiles[0]
    tu.assert_str(t.description, "Horizontal properties: The N96", True)
    tu.assert_str(t.discretization_type, "logically_rectangular")
    tu.assert_str(t.mnemonic, "N96")
Example #6
0
def _test(mod, doc, encoding):
    """Perform encoding specific serialization tests."""
    # Encode/decode and re-assert document.
    as_repr = tu.encode(doc, encoding)
    as_doc_1 = tu.decode(as_repr, encoding)
    tu.assert_doc(mod, as_doc_1)

    # Re-encode and assert encodings.
    as_repr_1 = tu.encode(as_doc_1, encoding)
    tu.assert_int(len(as_repr), len(as_repr_1))
    tu.assert_str(as_repr, as_repr_1)
def _test(mod, doc, encoding):
    """Perform encoding specific serialization tests."""
    # Encode/decode and re-assert document.
    as_repr = tu.encode(doc, encoding)
    as_doc_1 = tu.decode(as_repr, encoding)
    tu.assert_doc(mod, as_doc_1)

    # Re-encode and assert encodings.
    as_repr_1 = tu.encode(as_doc_1, encoding)
    tu.assert_int(len(as_repr), len(as_repr_1))
    tu.assert_str(as_repr, as_repr_1)
def _assert_doc_core(doc, is_update):
    """Assert core information."""
    tu.assert_str(doc.description, "The HadGEM2-A model", True)
    if not is_update:
        tu.assert_str(doc.long_name,
                      "Hadley Global Environment Model 2 - Atmosphere")
    tu.assert_date(doc.release_date, "2009")
    tu.assert_str(doc.short_name, "HadGEM2-A")
    tu.assert_str(doc.type, "model")
    tu.assert_int(doc.types, 2)
    tu.assert_str(doc.types[1], "model")
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "IBM Power 6_Other")
    tu.assert_str(ext.description, "Machine IBM Power 6", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Platform : MOHC - IBM Power 6_Other")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "IBM Power 6_Other")
    tu.assert_str(ext.summary_fields[1], "Machine IBM Power 6", True)
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "amip")
    tu.assert_str(ext.description, "AMIP (1979 - at least 2008)", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Experiment : MOHC - amip")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "amip")
    tu.assert_str(ext.summary_fields[1], "AMIP")
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, u"amip")
    tu.assert_str(ext.description, u"Six element ensemble", True)
    tu.assert_str(ext.full_display_name, u"CMIP5 Ensemble : MOHC - amip")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], u"amip")
    tu.assert_str(ext.summary_fields[1], u"3.3 AMIP and AMIP Ensemble")
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "HadGEM2-A")
    tu.assert_str(ext.description, "The HadGEM2-A model", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Model : MOHC - HadGEM2-A")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "HadGEM2-A")
    tu.assert_str(ext.summary_fields[1], "Hadley Global Environment Model 2 - Atmosphere")
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "UM N96L38 ATM Grid System")
    tu.assert_str(ext.description, "Met Office Unified Model", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Grid Spec : MOHC - UM N96L38 ATM Grid System")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "UM N96L38 ATM Grid System")
    tu.assert_str(ext.summary_fields[1], "Met Office Unified Model", True)
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "amip")
    tu.assert_str(ext.description, "Main amip ensemble simulations", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Simulation : MOHC - amip")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "amip")
    tu.assert_str(ext.summary_fields[1], "3.3 AMIP and AMIP Ensemble", True)
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "CMIP5 Quality Control Data Level 2")
    tu.assert_str(ext.description, "CMIP5 Quality Control", True)
    tu.assert_str(ext.full_display_name, "CMIP5 QC Record : MOHC - CMIP5 Quality Control Data Level 2")
    tu.assert_str(ext.type_display_name, "QC Record")
    tu.assert_int(ext.summary_fields, 1)
    tu.assert_str(ext.summary_fields[0], "cmip5.output1.", True)
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "fossil_fuel_organic_carbon")
    tu.assert_str(ext.description, "2D gridded monthly-mean", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Data Object : MOHC - fossil_fuel_organic_carbon")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "fossil_fuel_organic_carbon")
    tu.assert_str(ext.summary_fields[1], "2D gridded monthly-mean", True)
def _assert_doc_deployments(doc, is_update):
    """Assert simulation deployments."""
    tu.assert_iter(doc.deployments, 1, cim.v1.Deployment)

    dep = doc.deployments[0]
    tu.assert_str(dep.description, "The resources(deployment) on which", True)
    tu.assert_object(dep.platform_reference, cim.v1.DocReference)
    ref = dep.platform_reference
    tu.assert_str(ref.description, "Reference to a platform", True)
    tu.assert_uuid(ref.id, "b765775a-e2ac-11df-9efb-00163e9152a5")
    tu.assert_str(ref.name, "IBM Power 6")
    tu.assert_str(ref.type, "platform")
    tu.assert_int(ref.version, 1)
def _assert_doc_deployments(doc, is_update):
    """Assert simulation deployments."""
    tu.assert_iter(doc.deployments, 1, cim.v1.Deployment)

    dep = doc.deployments[0]
    tu.assert_str(dep.description, "The resources(deployment) on which", True)
    tu.assert_object(dep.platform_reference, cim.v1.DocReference)
    ref = dep.platform_reference
    tu.assert_str(ref.description, "Reference to a platform", True)
    tu.assert_uuid(ref.id, "b765775a-e2ac-11df-9efb-00163e9152a5")
    tu.assert_str(ref.name, "IBM Power 6")
    tu.assert_str(ref.type, "platform")
    tu.assert_int(ref.version, 1)
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "amip")
    tu.assert_str(ext.description, "Main amip ensemble simulations", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Simulation : MOHC - amip")
    tu.assert_str(ext.type_display_name, "Simulation")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "amip")
    tu.assert_str(ext.summary_fields[1], "3.3 AMIP and AMIP Ensemble", True)
Example #20
0
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "fossil_fuel_organic_carbon")
    tu.assert_str(ext.description, "2D gridded monthly-mean", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Data Object : MOHC - fossil_fuel_organic_carbon")
    tu.assert_str(ext.type_display_name, "Data Object")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "fossil_fuel_organic_carbon")
    tu.assert_str(ext.summary_fields[1], "2D gridded monthly-mean", True)
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "amip")
    tu.assert_str(ext.description, "AMIP (1979 - at least 2008)", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Experiment : MOHC - amip")
    tu.assert_str(ext.type_display_name, "Experiment")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "amip")
    tu.assert_str(ext.summary_fields[1], "AMIP")
def _assert_doc_machine(doc, is_update):
    """Assert machine information."""
    tu.assert_object(doc.units[0].machine, cim.v1.Machine)
    m = doc.units[0].machine
    tu.assert_int(m.cores_per_processor, 32)
    tu.assert_str(m.interconnect, "Infiniband")
    tu.assert_str(m.name, "IBM Power 6")
    tu.assert_iter(m.libraries, 0)
    tu.assert_int(m.maximum_processors, 2)
    tu.assert_str(m.operating_system, "AIX")
    tu.assert_str(m.system, "Parallel")
    tu.assert_str(m.vendor, "IBM")
    tu.assert_str(m.processor_type, "Other")
def _assert_doc_machine(doc, is_update):
    """Assert machine information."""
    tu.assert_object(doc.units[0].machine, cim.v1.Machine)
    m = doc.units[0].machine
    tu.assert_int(m.cores_per_processor, 32)
    tu.assert_str(m.interconnect, "Infiniband")
    tu.assert_str(m.name, "IBM Power 6")
    tu.assert_iter(m.libraries, 0)
    tu.assert_int(m.maximum_processors, 2)
    tu.assert_str(m.operating_system, "AIX")
    tu.assert_str(m.system, "Parallel")
    tu.assert_str(m.vendor, "IBM")
    tu.assert_str(m.processor_type, "Other")
def _assert_doc_responsible_parties(doc, is_update):
    """Assert responsible parties."""
    tu.assert_int(doc.responsible_parties, 4)

    rp = doc.responsible_parties[0]
    tu.assert_str(rp.abbreviation, "Chris Jones")
    tu.assert_str(rp.contact_info.address, "Met Office Hadley Centre", True)
    tu.assert_str(rp.contact_info.email, "*****@*****.**")
    tu.assert_str(rp.contact_info.url, r"http://www.metoffice.gov.uk/research/our-scientists/climate-chemistry-ecosystems/chris-jones", True)
    tu.assert_str(rp.individual_name, "Chris Jones")
    tu.assert_str(rp.role, "PI")

    rp = doc.responsible_parties[1]
    tu.assert_str(rp.organisation_name, "UK Met Office Hadley Centre")
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "UM N96L38 ATM Grid System")
    tu.assert_str(ext.description, "Met Office Unified Model", True)
    tu.assert_str(ext.full_display_name,
                  "CMIP5 Grid Spec : MOHC - UM N96L38 ATM Grid System")
    tu.assert_str(ext.type_display_name, "Grid Spec")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "UM N96L38 ATM Grid System")
    tu.assert_str(ext.summary_fields[1], "Met Office Unified Model", True)
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "IBM Power 6_Other")
    tu.assert_str(ext.description, "Machine IBM Power 6", True)
    tu.assert_str(ext.full_display_name,
                  "CMIP5 Platform : MOHC - IBM Power 6_Other")
    tu.assert_str(ext.type_display_name, "Platform")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "IBM Power 6_Other")
    tu.assert_str(ext.summary_fields[1], "Machine IBM Power 6", True)
def assert_extension_info(ext):
    """Asserts a document's extension information.

    :param object ext: Document extension information.

    """
    tu.assert_str(ext.display_name, "HadGEM2-A")
    tu.assert_str(ext.description, "The HadGEM2-A model", True)
    tu.assert_str(ext.full_display_name, "CMIP5 Model : MOHC - HadGEM2-A")
    tu.assert_str(ext.type_display_name, "Model")
    tu.assert_int(ext.summary_fields, 2)
    tu.assert_str(ext.summary_fields[0], "HadGEM2-A")
    tu.assert_str(ext.summary_fields[1],
                  "Hadley Global Environment Model 2 - Atmosphere")
def _assert_doc_extent(doc, is_update):
    """Assert extent information."""
    tu.assert_object(doc.extent, cim.v1.DataExtent)
    e = doc.extent
    tu.assert_object(e.geographical, cim.v1.DataExtentGeographical)
    tu.assert_float(e.geographical.east, 360.0)
    tu.assert_float(e.geographical.north, 90.0)
    tu.assert_float(e.geographical.south, -90.0)
    tu.assert_object(e.temporal, cim.v1.DataExtentTemporal)
    tu.assert_date(e.temporal.begin, "1859-12-01 00:00:00")
    tu.assert_date(e.temporal.end, "1999-12-30 00:00:00")
    tu.assert_object(e.temporal.time_interval, cim.v1.DataExtentTimeInterval)
    ti = e.temporal.time_interval
    tu.assert_int(ti.factor, -1)
    tu.assert_int(ti.radix, 50430)
    tu.assert_str(ti.unit, "day")
def _assert_doc_tile_extent(doc, is_update):
    """Assert tile extent information."""
    t = doc.esm_model_grids[0].tiles[0]
    tu.assert_object(t.extent, cim.v1.GridExtent)
    e = t.extent
    tu.assert_int(e.maximum_latitude, 90)
    tu.assert_int(e.minimum_latitude, -90)
    tu.assert_int(e.minimum_longitude, 0)
    tu.assert_int(e.maximum_longitude, 360, int)
def _assert_doc_tile_extent(doc, is_update):
    """Assert tile extent information."""
    t = doc.esm_model_grids[0].tiles[0]
    tu.assert_object(t.extent, cim.v1.GridExtent)
    e = t.extent
    tu.assert_int(e.maximum_latitude, 90)
    tu.assert_int(e.minimum_latitude, -90)
    tu.assert_int(e.minimum_longitude, 0)
    tu.assert_int(e.maximum_longitude, 360, int)
def _assert_doc_responsible_parties(doc, is_update):
    """Assert responsible parties."""
    tu.assert_int(doc.responsible_parties, 4)

    rp = doc.responsible_parties[0]
    tu.assert_str(rp.abbreviation, "Chris Jones")
    tu.assert_str(rp.contact_info.address, "Met Office Hadley Centre", True)
    tu.assert_str(rp.contact_info.email, "*****@*****.**")
    tu.assert_str(
        rp.contact_info.url,
        r"http://www.metoffice.gov.uk/research/our-scientists/climate-chemistry-ecosystems/chris-jones",
        True)
    tu.assert_str(rp.individual_name, "Chris Jones")
    tu.assert_str(rp.role, "PI")

    rp = doc.responsible_parties[1]
    tu.assert_str(rp.organisation_name, "UK Met Office Hadley Centre")
def _assert_doc_conformances(doc, is_update):
    """Assert simulation conformances."""
    tu.assert_iter(doc.conformances, 13, cim.v1.Conformance)

    c = doc.conformances[0]
    tu.assert_str(c.type, "standard config")
    tu.assert_iter(c.requirements_references, 1, cim.v1.DocReference)
    ref = c.requirements_references[0]
    tu.assert_str(ref.description, "Reference to a NumericalRequirement", True)
    tu.assert_uuid(ref.id, "9fa513fc-d3a5-11df-837f-00163e9152a5")
    tu.assert_str(ref.name, "ic.003")
    tu.assert_str(ref.type, "NumericalRequirement")
    tu.assert_int(ref.version, 1)

    c = doc.conformances[7]
    tu.assert_str(c.description, "Prescribed land use", True)
    tu.assert_bool(c.is_conformant, True)
    tu.assert_str(c.type, "via inputs")
def _assert_doc_conformances(doc, is_update):
    """Assert simulation conformances."""
    tu.assert_iter(doc.conformances, 13, cim.v1.Conformance)

    c = doc.conformances[0]
    tu.assert_str(c.type, "standard config")
    tu.assert_iter(c.requirements_references, 1, cim.v1.DocReference)
    ref = c.requirements_references[0]
    tu.assert_str(ref.description, "Reference to a NumericalRequirement", True)
    tu.assert_uuid(ref.id, "9fa513fc-d3a5-11df-837f-00163e9152a5")
    tu.assert_str(ref.name, "ic.003")
    tu.assert_str(ref.type, "NumericalRequirement")
    tu.assert_int(ref.version, 1)

    c = doc.conformances[7]
    tu.assert_str(c.description, "Prescribed land use", True)
    tu.assert_bool(c.is_conformant, True)
    tu.assert_str(c.type, "via inputs")
def _test(mod, doc, encoding):
    """Perform encoding specific serialization tests."""
    # Encode/decode and re-assert document.
    as_repr = tu.encode(doc, encoding)
    as_doc_1 = tu.decode(as_repr, encoding)
    tu.assert_doc(mod, as_doc_1)

    # Re-encode.
    as_repr_1 = tu.encode(as_doc_1, encoding)

    # TODO - explore why sometimes XML encoding is problematic
    # although all good when reencoding to json.
    if len(as_repr) != len(as_repr_1) and encoding == 'xml':
        as_repr = tu.encode(tu.decode(as_repr, encoding), 'json')
        as_repr_1 = tu.encode(tu.decode(as_repr_1, encoding), 'json')

    # Verify encoding equivalence.
    tu.assert_int(len(as_repr), len(as_repr_1), msg=str(type(doc)))
    tu.assert_str(as_repr, as_repr_1)
def _assert_doc_references(doc, is_update):
    """Assert simulation references."""
    # Model reference.
    tu.assert_object(doc.model_reference, cim.v1.DocReference)
    ref = doc.model_reference
    tu.assert_str(ref.description, "Reference to a modelComponent", True)
    tu.assert_uuid(ref.id, "7a2b64cc-03ca-11e1-a36a-00163e9152a5")
    tu.assert_str(ref.name, "HadGEM2-A")
    tu.assert_str(ref.type, "modelComponent")
    tu.assert_int(ref.version, 1)

    # Experiment reference.
    tu.assert_iter(doc.supports_references, 1, cim.v1.DocReference)
    ref = doc.supports_references[0]
    tu.assert_str(ref.description, "Reference to an Experiment", True)
    tu.assert_uuid(ref.id, "9fa513fc-d3a5-11df-837f-00163e9152a5")
    tu.assert_str(ref.name, "amip")
    tu.assert_str(ref.type, "experiment")
    tu.assert_int(ref.version, 1)
def _assert_doc_references(doc, is_update):
    """Assert simulation references."""
    # Model reference.
    tu.assert_object(doc.model_reference, cim.v1.DocReference)
    ref = doc.model_reference
    tu.assert_str(ref.description, "Reference to a modelComponent", True)
    tu.assert_uuid(ref.id, "7a2b64cc-03ca-11e1-a36a-00163e9152a5")
    tu.assert_str(ref.name, "HadGEM2-A")
    tu.assert_str(ref.type, "modelComponent")
    tu.assert_int(ref.version, 1)

    # Experiment reference.
    tu.assert_iter(doc.supports_references, 1, cim.v1.DocReference)
    ref = doc.supports_references[0]
    tu.assert_str(ref.description, "Reference to an Experiment", True)
    tu.assert_uuid(ref.id, "9fa513fc-d3a5-11df-837f-00163e9152a5")
    tu.assert_str(ref.name, "amip")
    tu.assert_str(ref.type, "experiment")
    tu.assert_int(ref.version, 1)
Example #37
0
def _test_list_types():
    """Test listing supported types."""
    # supported - all
    types = pyesdoc.list_types()
    tu.assert_int(len(types), 103)

    # supported - cim v1
    types = pyesdoc.list_types(_CIM, _CIM_V1)
    tu.assert_int(len(types), 103)

    # unsupported
    types = pyesdoc.list_types('x', 'x')
    tu.assert_int(len(types), 0)
Example #38
0
def _test_list_types():
    """Test listing supported types."""
    # supported - all
    types = pyesdoc.list_types()
    tu.assert_int(len(types), 103)

    # supported - cim v1
    types = pyesdoc.list_types(_CIM, _CIM_V1)
    tu.assert_int(len(types), 103)

    # unsupported
    types = pyesdoc.list_types('x', 'x')
    tu.assert_int(len(types), 0)
Example #39
0
def _test_archive_config():
    """Test archive configuration."""
    import pyesdoc.archive.config as cfg

    tu.assert_path(cfg.get_directory())
    tu.assert_int(cfg.get_projects(), 6)
    tu.assert_int(cfg.get_sources(), 4)
    tu.assert_int(cfg.get_projects()[0].feeds, 2)
    tu.assert_int(cfg.get_projects()[1].feeds, 1)
    tu.assert_int(cfg.get_projects()[2].feeds, 1)
    tu.assert_int(cfg.get_projects()[3].feeds, 1)
    tu.assert_int(cfg.get_projects()[4].feeds, 1)
    tu.assert_int(cfg.get_project_sources(), 7)
Example #40
0
def _test_archive_get_counts():
    """Test archive document counts."""
    tu.assert_int(pyesdoc.archive.get_count(), 37019, assert_type=tu.COMPARE_LTE)
def _assert_doc_sub_components(doc, is_update):
    """Assert sub-components."""
    tu.assert_int(doc.sub_components, 4)

    sc = doc.sub_components[0]
    tu.assert_int(sc.citations, 1)
    tu.assert_str(sc.description, "The model includes interactive schemes", True)
    tu.assert_uuid(sc.meta.id, "7a44cb24-03ca-11e1-a36a-00163e9152a5")
    tu.assert_int(sc.meta.version, 1)
    tu.assert_date(sc.meta.create_date, "2012-04-23 14:59:04.757315")
    tu.assert_str(sc.long_name, "Aerosols")
    tu.assert_int(sc.properties, 4)
    tu.assert_int(sc.responsible_parties, 4)
    tu.assert_int(sc.sub_components, 3)
    tu.assert_str(sc.short_name, "Aerosols")
    tu.assert_str(sc.type, "Aerosols")
    tu.assert_int(sc.types, 3)

    # Property.
    p = sc.properties[0]
    tu.assert_bool(p.is_represented, True)
    tu.assert_str(p.long_name, "Aerosols")
    tu.assert_str(p.short_name, "Aerosol Key Properties")
    tu.assert_int(p.sub_properties, 6)

    p = sc.properties[2]
    tu.assert_int(p.standard_names, 1)
    tu.assert_str(p.standard_names[0], "tendency_of_atmosphere", True)
    tu.assert_str(p.units, "kg/m2/s")

    # Sub-property.
    p = sc.properties[0].sub_properties[0]
    tu.assert_str(p.short_name, "AerosolSchemeScope")
    tu.assert_str(p.long_name, "AerosolSchemeScope")
    tu.assert_int(p.values, 1)
    tu.assert_str(p.values[0], "Whole atmosphere")
def _assert_doc_sub_components(doc, is_update):
    """Assert sub-components."""
    tu.assert_int(doc.sub_components, 4)

    sc = doc.sub_components[0]
    tu.assert_int(sc.citations, 1)
    tu.assert_str(sc.description, "The model includes interactive schemes",
                  True)
    tu.assert_uuid(sc.meta.id, "7a44cb24-03ca-11e1-a36a-00163e9152a5")
    tu.assert_int(sc.meta.version, 1)
    tu.assert_date(sc.meta.create_date, "2012-04-23 14:59:04.757315")
    tu.assert_str(sc.long_name, "Aerosols")
    tu.assert_int(sc.properties, 4)
    tu.assert_int(sc.responsible_parties, 4)
    tu.assert_int(sc.sub_components, 3)
    tu.assert_str(sc.short_name, "Aerosols")
    tu.assert_str(sc.type, "Aerosols")
    tu.assert_int(sc.types, 3)

    # Property.
    p = sc.properties[0]
    tu.assert_bool(p.is_represented, True)
    tu.assert_str(p.long_name, "Aerosols")
    tu.assert_str(p.short_name, "Aerosol Key Properties")
    tu.assert_int(p.sub_properties, 6)

    p = sc.properties[2]
    tu.assert_int(p.standard_names, 1)
    tu.assert_str(p.standard_names[0], "tendency_of_atmosphere", True)
    tu.assert_str(p.units, "kg/m2/s")

    # Sub-property.
    p = sc.properties[0].sub_properties[0]
    tu.assert_str(p.short_name, "AerosolSchemeScope")
    tu.assert_str(p.long_name, "AerosolSchemeScope")
    tu.assert_int(p.values, 1)
    tu.assert_str(p.values[0], "Whole atmosphere")