Coverage report: 92%

Files Functions Classes

coverage.py v7.17.0, created at 2026-10-27 08:42 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
python/felis/__init__.py (no function)   67% 6 2 0   100% 0 0   67%
python/felis/browser/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
python/felis/browser/columns.py _format_field_value   86% 7 1 0   83% 6 1   85%
python/felis/browser/columns.py _column_value   100% 3 0 0   100% 2 0   100%
python/felis/browser/columns.py _field_default   67% 3 1 0   50% 2 1   60%
python/felis/browser/columns.py _column_field   100% 1 0 0   100% 0 0   100%
python/felis/browser/columns.py _column_sets_field   100% 2 0 0   100% 0 0   100%
python/felis/browser/columns.py _table_column_fields   100% 1 0 0   100% 0 0   100%
python/felis/browser/columns.py _column_tag   100% 6 0 0   100% 4 0   100%
python/felis/browser/columns.py _column_tags   100% 18 0 0   100% 14 0   100%
python/felis/browser/columns.py (no function)   100% 27 0 0   100% 0 0   100%
python/felis/browser/config.py SiteConfig.from_file   100% 8 0 0   88% 8 1   94%
python/felis/browser/config.py (no function)   100% 31 0 0   100% 0 0   100%
python/felis/browser/diagram.py _mermaid_label   100% 1 0 0   100% 0 0   100%
python/felis/browser/diagram.py _mermaid_name   100% 4 0 0   100% 2 0   100%
python/felis/browser/diagram.py _RelationshipDiagram.__init__   100% 2 0 0   100% 0 0   100%
python/felis/browser/diagram.py _RelationshipDiagram.text   92% 12 1 0   83% 6 1   89%
python/felis/browser/diagram.py _RelationshipDiagram._referenced_table   100% 2 0 0   100% 0 0   100%
python/felis/browser/diagram.py _RelationshipDiagram._tables   100% 5 0 0   100% 2 0   100%
python/felis/browser/diagram.py _RelationshipDiagram._entity_lines   100% 16 0 0   100% 12 0   100%
python/felis/browser/diagram.py (no function)   100% 12 0 0   100% 0 0   100%
python/felis/browser/navdata.py _NavData.__init__   100% 1 0 0   100% 0 0   100%
python/felis/browser/navdata.py _NavData.data   100% 1 0 0   100% 0 0   100%
python/felis/browser/navdata.py _NavData._schema   100% 2 0 0   100% 0 0   100%
python/felis/browser/navdata.py _NavData._table   100% 1 0 0   100% 0 0   100%
python/felis/browser/navdata.py _NavData._column   100% 4 0 0   100% 2 0   100%
python/felis/browser/navdata.py _NavData._anchored   100% 1 0 0   100% 0 0   100%
python/felis/browser/navdata.py _NavData._entry   100% 4 0 0   100% 2 0   100%
python/felis/browser/navdata.py (no function)   100% 14 0 0   100% 0 0   100%
python/felis/browser/render.py _TemplateFilters.__init__   100% 1 0 0   100% 0 0   100%
python/felis/browser/render.py _TemplateFilters.href   100% 1 0 0   100% 0 0   100%
python/felis/browser/render.py _TemplateFilters.columns   100% 1 0 0   100% 0 0   100%
python/felis/browser/render.py _TemplateFilters.relationship_diagram   100% 1 0 0   100% 0 0   100%
python/felis/browser/render.py _TemplateFilters.all   100% 1 0 0   100% 0 0   100%
python/felis/browser/render.py _none_as_empty   100% 1 0 0   100% 0 0   100%
python/felis/browser/render.py _environment   100% 3 0 0   100% 0 0   100%
python/felis/browser/render.py _write_page   100% 5 0 0   100% 0 0   100%
python/felis/browser/render.py _stylesheet_names   100% 1 0 0   100% 0 0   100%
python/felis/browser/render.py _icon_name   100% 1 0 0   100% 0 0   100%
python/felis/browser/render.py _favicon_name   100% 1 0 0   100% 0 0   100%
python/felis/browser/render.py _page_globals   100% 2 0 0   100% 0 0   100%
python/felis/browser/render.py _write_assets   100% 15 0 0   100% 8 0   100%
python/felis/browser/render.py render_static_site   100% 11 0 0   100% 4 0   100%
python/felis/browser/render.py (no function)   100% 41 0 0   100% 0 0   100%
python/felis/browser/schemas.py _resolve_column   100% 4 0 0   100% 0 0   100%
python/felis/browser/schemas.py _primary_key_columns   100% 1 0 0   100% 0 0   100%
python/felis/browser/schemas.py _foreign_keys   100% 1 0 0   100% 0 0   100%
python/felis/browser/schemas.py _schema_version   100% 3 0 0   100% 2 0   100%
python/felis/browser/schemas.py _version_order   100% 4 0 0   100% 2 0   100%
python/felis/browser/schemas.py _name_sort_key   100% 1 0 0   100% 0 0   100%
python/felis/browser/schemas.py _sorted_by_name   100% 1 0 0   100% 0 0   100%
python/felis/browser/schemas.py (no function)   100% 15 0 0   100% 0 0   100%
python/felis/browser/sitemap.py _slugify   100% 2 0 0   100% 0 0   100%
python/felis/browser/sitemap.py _relative_href   100% 2 0 0   100% 0 0   100%
python/felis/browser/sitemap.py _UniqueNames.__init__   100% 2 0 0   100% 0 0   100%
python/felis/browser/sitemap.py _UniqueNames.claim   100% 8 0 0   100% 2 0   100%
python/felis/browser/sitemap.py SiteMap.__init__   100% 21 0 0   100% 6 0   100%
python/felis/browser/sitemap.py SiteMap._add_rows   100% 4 0 0   100% 2 0   100%
python/felis/browser/sitemap.py SiteMap.path   100% 3 0 0   100% 2 0   100%
python/felis/browser/sitemap.py SiteMap.anchor   100% 1 0 0   100% 0 0   100%
python/felis/browser/sitemap.py SiteMap.table_of   100% 1 0 0   100% 0 0   100%
python/felis/browser/sitemap.py (no function)   100% 20 0 0   100% 0 0   100%
python/felis/cli.py cli   100% 18 0 0   100% 8 0   100%
python/felis/cli.py create   71% 17 5 0   67% 6 2   70%
python/felis/cli.py create_indexes   62% 8 3 0   100% 0 0   62%
python/felis/cli.py drop_indexes   62% 8 3 0   100% 0 0   62%
python/felis/cli.py load_tap_schema   100% 4 0 0   100% 0 0   100%
python/felis/cli.py init_tap_schema   100% 5 0 0   50% 2 1   86%
python/felis/cli.py validate   100% 11 0 0   100% 4 0   100%
python/felis/cli.py diff   100% 19 0 0   100% 8 0   100%
python/felis/cli.py dump   100% 16 0 0   92% 12 1   96%
python/felis/cli.py browser   94% 18 1 0   100% 2 0   95%
python/felis/cli.py (no function)   99% 102 1 0   50% 2 1   98%
python/felis/datamodel.py BaseObject.check_description   100% 6 0 0   100% 4 0   100%
python/felis/datamodel.py validate_ivoa_ucd   100% 6 0 0   50% 2 1   88%
python/felis/datamodel.py Column.check_value   100% 17 0 0   100% 18 0   100%
python/felis/datamodel.py Column.check_ivoa_ucd   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py Column.check_units   100% 11 0 0   100% 4 0   100%
python/felis/datamodel.py Column.check_length   100% 13 0 0   100% 8 0   100%
python/felis/datamodel.py Column.check_redundant_datatypes   95% 20 1 0   92% 12 1   94%
python/felis/datamodel.py Column.check_precision   100% 3 0 0   100% 2 0   100%
python/felis/datamodel.py Column.check_votable_arraysize   92% 25 2 0   94% 18 1   93%
python/felis/datamodel.py Column.serialize_datatype   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py Column.deserialize_datatype   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py Column.check_votable_xtype   100% 3 0 0   100% 2 0   100%
python/felis/datamodel.py Column._update_from_overrides   100% 4 0 0   100% 4 0   100%
python/felis/datamodel.py Constraint.check_deferrable   100% 3 0 0   100% 2 0   100%
python/felis/datamodel.py CheckConstraint.serialize_type   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py UniqueConstraint.serialize_type   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py ForeignKeyConstraint.serialize_type   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py ForeignKeyConstraint.check_column_lengths   100% 3 0 0   100% 2 0   100%
python/felis/datamodel.py Index.check_columns_or_expressions   100% 5 0 0   100% 4 0   100%
python/felis/datamodel.py ColumnGroup.check_ivoa_ucd   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py ColumnGroup.check_unique_columns   100% 4 0 0   100% 2 0   100%
python/felis/datamodel.py ColumnGroup._dereference_columns   100% 12 0 0   100% 6 0   100%
python/felis/datamodel.py ColumnGroup.serialize_columns   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py ColumnOverrides._check_non_nullable_overrides   100% 7 0 0   100% 6 0   100%
python/felis/datamodel.py ColumnOverrides.serialize_datatype   100% 3 0 0   100% 2 0   100%
python/felis/datamodel.py ColumnOverrides.deserialize_datatype   67% 3 1 0   50% 2 1   60%
python/felis/datamodel.py Table.check_unique_column_names   100% 3 0 0   100% 2 0   100%
python/felis/datamodel.py Table.check_tap_table_index   100% 6 0 0   100% 4 0   100%
python/felis/datamodel.py Table.check_tap_principal   100% 7 0 0   100% 6 0   100%
python/felis/datamodel.py Table._find_column_by_id   100% 4 0 0   100% 4 0   100%
python/felis/datamodel.py Table._find_column_by_name   100% 4 0 0   100% 4 0   100%
python/felis/datamodel.py Table.dereference_column_groups   100% 4 0 0   100% 2 0   100%
python/felis/datamodel.py Table._serialize_columns   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py SchemaIdVisitor.__init__   100% 2 0 0   100% 0 0   100%
python/felis/datamodel.py SchemaIdVisitor.add   83% 6 1 0   50% 6 3   67%
python/felis/datamodel.py SchemaIdVisitor.visit_schema   100% 5 0 0   100% 2 0   100%
python/felis/datamodel.py SchemaIdVisitor.visit_table   100% 5 0 0   100% 4 0   100%
python/felis/datamodel.py SchemaIdVisitor.visit_column   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py SchemaIdVisitor.visit_constraint   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py _strip_ids   100% 8 0 0   100% 6 0   100%
python/felis/datamodel.py _append_error   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py Schema._load_resources   100% 22 0 0   90% 10 1   97%
python/felis/datamodel.py Schema._find_table_by_name   100% 4 0 0   100% 4 0   100%
python/felis/datamodel.py Schema._dereference_resource_columns   100% 17 0 0   100% 12 0   100%
python/felis/datamodel.py Schema._process_column_refs   100% 32 0 0   100% 16 0   100%
python/felis/datamodel.py Schema.generate_ids   100% 34 0 0   97% 34 1   99%
python/felis/datamodel.py Schema.check_unique_table_names   100% 3 0 0   100% 2 0   100%
python/felis/datamodel.py Schema.check_tap_table_indexes   100% 11 0 0   88% 8 1   95%
python/felis/datamodel.py Schema.check_unique_constraint_names   100% 11 0 0   100% 8 0   100%
python/felis/datamodel.py Schema.check_unique_index_names   100% 11 0 0   100% 8 0   100%
python/felis/datamodel.py Schema.create_id_map   67% 9 3 0   50% 4 2   62%
python/felis/datamodel.py Schema._validate_column_id   100% 4 0 0   100% 4 0   100%
python/felis/datamodel.py Schema._validate_foreign_key_column   100% 4 0 0   100% 0 0   100%
python/felis/datamodel.py Schema.check_constraints   100% 18 0 0   100% 14 0   100%
python/felis/datamodel.py Schema.__getitem__   100% 3 0 0   100% 2 0   100%
python/felis/datamodel.py Schema.__contains__   100% 1 0 0   100% 0 0   100%
python/felis/datamodel.py Schema.find_object_by_id   100% 4 0 0   100% 2 0   100%
python/felis/datamodel.py Schema.get_table_by_column   100% 4 0 0   100% 4 0   100%
python/felis/datamodel.py Schema.from_uri   100% 9 0 0   100% 0 0   100%
python/felis/datamodel.py Schema.from_stream   100% 3 0 0   100% 0 0   100%
python/felis/datamodel.py Schema._model_dump   100% 7 0 0   100% 6 0   100%
python/felis/datamodel.py Schema.dump_yaml   100% 2 0 0   100% 0 0   100%
python/felis/datamodel.py Schema.dump_json   100% 2 0 0   100% 0 0   100%
python/felis/datamodel.py (no function)   100% 303 0 0   100% 0 0   100%
python/felis/db/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/felis/db/_dialects.py _dialect   100% 1 0 0   100% 0 0   100%
python/felis/db/_dialects.py get_supported_dialects   100% 1 0 0   100% 0 0   100%
python/felis/db/_dialects.py _dialect_module   100% 1 0 0   100% 0 0   100%
python/felis/db/_dialects.py get_dialect_module   67% 3 1 0   50% 2 1   60%
python/felis/db/_dialects.py string_to_typeengine   75% 20 5 0   70% 10 3   73%
python/felis/db/_dialects.py (no function)   100% 23 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py compile_tinyint   0% 1 1 0   100% 0 0   0%
python/felis/db/_sqltypes.py boolean   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py byte   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py short   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py int   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py long   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py float   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py double   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py char   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py string   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py unicode   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py text   0% 1 1 0   100% 0 0   0%
python/felis/db/_sqltypes.py binary   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py timestamp   100% 1 0 0   100% 0 0   100%
python/felis/db/_sqltypes.py get_type_func   67% 3 1 0   50% 2 1   60%
python/felis/db/_sqltypes.py _vary   100% 7 0 0   100% 4 0   100%
python/felis/db/_sqltypes.py (no function)   100% 44 0 0   100% 0 0   100%
python/felis/db/_variants.py _create_column_variant_overrides   100% 4 0 0   100% 2 0   100%
python/felis/db/_variants.py _get_column_variant_overrides   100% 1 0 0   100% 0 0   100%
python/felis/db/_variants.py _get_column_variant_override   67% 3 1 0   50% 2 1   60%
python/felis/db/_variants.py _process_variant_override   89% 9 1 0   75% 4 1   85%
python/felis/db/_variants.py make_variant_dict   100% 8 0 0   100% 4 0   100%
python/felis/db/_variants.py (no function)   100% 19 0 0   100% 0 0   100%
python/felis/db/database_context.py _normalize_statement   100% 3 0 0   100% 2 0   100%
python/felis/db/database_context.py _create_mock_connection   100% 4 0 0   100% 0 0   100%
python/felis/db/database_context.py _dialect_name   100% 4 0 0   100% 2 0   100%
python/felis/db/database_context.py _clear_schema   100% 4 0 0   100% 4 0   100%
python/felis/db/database_context.py _get_existing_indexes   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py is_mock_url   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py is_sqlite_url   100% 3 0 0   50% 2 1   80%
python/felis/db/database_context.py DatabaseContext.__exit__   60% 5 2 0   100% 0 0   60%
python/felis/db/database_context.py DatabaseContext.close   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.metadata   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.engine   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.dialect   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.dialect_name   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.initialize   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.drop   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.create_all   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.create_indexes   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.drop_indexes   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py DatabaseContext.execute   100% 0 0 1   100% 0 0   100%
python/felis/db/database_context.py _BaseContext.__init__   88% 8 1 0   50% 2 1   80%
python/felis/db/database_context.py _BaseContext.echo   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py _BaseContext.echo   100% 3 0 0   50% 2 1   80%
python/felis/db/database_context.py _BaseContext._validate_dialect   100% 4 0 0   100% 2 0   100%
python/felis/db/database_context.py _BaseContext.engine   100% 3 0 0   100% 2 0   100%
python/felis/db/database_context.py _BaseContext.metadata   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py _BaseContext.dialect   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py _BaseContext.dialect_name   0% 1 1 0   100% 0 0   0%
python/felis/db/database_context.py _BaseContext.schema_name   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py _BaseContext.connect   100% 2 0 0   100% 0 0   100%
python/felis/db/database_context.py _BaseContext.execute   90% 10 1 0   50% 2 1   83%
python/felis/db/database_context.py _BaseContext.create_all   67% 6 2 0   100% 0 0   67%
python/felis/db/database_context.py _BaseContext._manage_indexes   72% 25 7 0   79% 14 3   74%
python/felis/db/database_context.py _BaseContext.create_indexes   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py _BaseContext.drop_indexes   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py _BaseContext._required_schema_name   0% 3 3 0   0% 2 0   0%
python/felis/db/database_context.py _BaseContext.close   100% 3 0 0   50% 2 1   80%
python/felis/db/database_context.py DatabaseContextFactory.register   100% 2 0 0   100% 0 0   100%
python/felis/db/database_context.py DatabaseContextFactory.register.decorator   75% 4 1 0   50% 2 1   67%
python/felis/db/database_context.py DatabaseContextFactory.register_class   0% 4 4 0   0% 2 0   0%
python/felis/db/database_context.py DatabaseContextFactory.create_context   88% 8 1 0   75% 4 1   83%
python/felis/db/database_context.py DatabaseContextFactory.get_supported_dialects   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py _SQLWriter.__init__   100% 2 0 0   100% 0 0   100%
python/felis/db/database_context.py _SQLWriter.write   47% 15 8 0   30% 10 1   40%
python/felis/db/database_context.py PostgreSQLContext.__init__   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py PostgreSQLContext.initialize   0% 10 10 0   0% 2 0   0%
python/felis/db/database_context.py PostgreSQLContext.drop   0% 6 6 0   100% 0 0   0%
python/felis/db/database_context.py MySQLContext.__init__   0% 1 1 0   100% 0 0   0%
python/felis/db/database_context.py MySQLContext.initialize   0% 12 12 0   0% 2 0   0%
python/felis/db/database_context.py MySQLContext.drop   0% 8 8 0   100% 0 0   0%
python/felis/db/database_context.py SQLiteContext.__init__   100% 2 0 0   100% 0 0   100%
python/felis/db/database_context.py SQLiteContext.initialize   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py SQLiteContext.drop   60% 5 2 0   100% 0 0   60%
python/felis/db/database_context.py MockContext.__init__   100% 3 0 0   100% 0 0   100%
python/felis/db/database_context.py MockContext.dialect   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py MockContext.dialect_name   0% 1 1 0   100% 0 0   0%
python/felis/db/database_context.py MockContext.metadata   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py MockContext.engine   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py MockContext.initialize   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py MockContext.drop   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py MockContext.create_all   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py MockContext.create_indexes   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py MockContext.drop_indexes   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py MockContext.execute   75% 4 1 0   50% 2 1   67%
python/felis/db/database_context.py MockContext.close   100% 1 0 0   100% 0 0   100%
python/felis/db/database_context.py create_database_context   96% 23 1 0   75% 12 3   89%
python/felis/db/database_context.py (no function)   100% 132 0 12   100% 0 0   100%
python/felis/diff.py SchemaDiff.__init__   100% 3 0 0   100% 0 0   100%
python/felis/diff.py SchemaDiff.print   100% 1 0 0   100% 0 0   100%
python/felis/diff.py SchemaDiff.has_changes   100% 1 0 0   100% 0 0   100%
python/felis/diff.py FormattedSchemaDiff.__init__   100% 1 0 0   100% 0 0   100%
python/felis/diff.py FormattedSchemaDiff.print   100% 4 0 0   100% 4 0   100%
python/felis/diff.py FormattedSchemaDiff._print_header   100% 1 0 0   100% 0 0   100%
python/felis/diff.py FormattedSchemaDiff._handle_values_changed   100% 7 0 0   100% 2 0   100%
python/felis/diff.py FormattedSchemaDiff._handle_iterable_item_added   100% 5 0 0   100% 2 0   100%
python/felis/diff.py FormattedSchemaDiff._handle_iterable_item_removed   100% 5 0 0   100% 2 0   100%
python/felis/diff.py FormattedSchemaDiff._handle_dictionary_item_added   100% 6 0 0   100% 2 0   100%
python/felis/diff.py FormattedSchemaDiff._handle_dictionary_item_removed   100% 6 0 0   100% 2 0   100%
python/felis/diff.py FormattedSchemaDiff._get_id   59% 17 7 0   50% 12 4   55%
python/felis/diff.py FormattedSchemaDiff._get_key_display   100% 1 0 0   100% 0 0   100%
python/felis/diff.py FormattedSchemaDiff._parse_deepdiff_path   100% 11 0 0   75% 8 2   89%
python/felis/diff.py DatabaseDiff.__init__   100% 6 0 0   100% 0 0   100%
python/felis/diff.py DatabaseDiff.print   100% 2 0 0   50% 2 1   75%
python/felis/diff.py (no function)   100% 37 0 0   100% 0 0   100%
python/felis/metadata.py _handle_timestamp_column   100% 3 0 0   100% 2 0   100%
python/felis/metadata.py get_datatype_with_variants   85% 13 2 0   75% 8 2   81%
python/felis/metadata.py MetaDataBuilder.__init__   100% 8 0 0   100% 2 0   100%
python/felis/metadata.py MetaDataBuilder.build   100% 8 0 0   100% 4 0   100%
python/felis/metadata.py MetaDataBuilder.build_tables   100% 5 0 0   100% 4 0   100%
python/felis/metadata.py MetaDataBuilder.build_primary_key   100% 1 0 0   100% 0 0   100%
python/felis/metadata.py MetaDataBuilder.build_table   91% 11 1 0   50% 4 2   80%
python/felis/metadata.py MetaDataBuilder.build_column   100% 17 0 0   100% 6 0   100%
python/felis/metadata.py MetaDataBuilder.build_constraints   100% 5 0 0   100% 4 0   100%
python/felis/metadata.py MetaDataBuilder.build_constraint   95% 21 1 0   90% 10 1   94%
python/felis/metadata.py MetaDataBuilder.build_index   100% 5 0 0   100% 0 0   100%
python/felis/metadata.py MetaDataBuilder.build_indexes   80% 10 2 0   75% 8 2   78%
python/felis/metadata.py create_metadata   100% 9 0 0   83% 6 1   93%
python/felis/metadata.py (no function)   100% 30 0 0   100% 0 0   100%
python/felis/tap_schema.py TableManager.__init__   73% 15 4 0   50% 6 1   67%
python/felis/tap_schema.py TableManager._load_from_yaml   86% 7 1 0   50% 2 1   78%
python/felis/tap_schema.py TableManager._reflect_from_database   0% 6 6 0   100% 0 0   0%
python/felis/tap_schema.py TableManager._apply_extensions   100% 16 0 0   100% 8 0   100%
python/felis/tap_schema.py TableManager.__getitem__   100% 3 0 0   100% 2 0   100%
python/felis/tap_schema.py TableManager.schema   100% 1 0 0   100% 0 0   100%
python/felis/tap_schema.py TableManager.metadata   100% 1 0 0   100% 0 0   100%
python/felis/tap_schema.py TableManager.get_tap_schema_std_path   100% 1 0 0   100% 0 0   100%
python/felis/tap_schema.py TableManager.get_tap_schema_std_resource   100% 1 0 0   100% 0 0   100%
python/felis/tap_schema.py TableManager.get_table_names_std   100% 1 0 0   100% 0 0   100%
python/felis/tap_schema.py TableManager.get_schema_name_std   0% 1 1 0   100% 0 0   0%
python/felis/tap_schema.py TableManager.load_schema_resource   100% 2 0 0   100% 0 0   100%
python/felis/tap_schema.py TableManager._load_schema   0% 1 1 0   100% 0 0   0%
python/felis/tap_schema.py TableManager._create_table_map   100% 2 0 0   100% 0 0   100%
python/felis/tap_schema.py TableManager._check_tables   100% 2 0 0   100% 2 0   100%
python/felis/tap_schema.py TableManager.initialize_database   100% 3 0 0   100% 0 0   100%
python/felis/tap_schema.py TableManager.select   100% 8 0 0   100% 2 0   100%
python/felis/tap_schema.py DataLoader.__init__   100% 9 0 0   100% 0 0   100%
python/felis/tap_schema.py DataLoader.load   100% 8 0 0   100% 6 0   100%
python/felis/tap_schema.py DataLoader._insert_schemas   100% 2 0 0   100% 0 0   100%
python/felis/tap_schema.py DataLoader._get_table_name   100% 1 0 0   100% 0 0   100%
python/felis/tap_schema.py DataLoader._insert_tables   100% 3 0 0   100% 2 0   100%
python/felis/tap_schema.py DataLoader._insert_columns   100% 10 0 0   100% 4 0   100%
python/felis/tap_schema.py DataLoader._get_key   100% 5 0 0   100% 2 0   100%
python/felis/tap_schema.py DataLoader._insert_keys   100% 13 0 0   100% 8 0   100%
python/felis/tap_schema.py DataLoader._generate_all_inserts   100% 6 0 0   100% 0 0   100%
python/felis/tap_schema.py DataLoader._execute_inserts   57% 7 3 0   100% 2 0   67%
python/felis/tap_schema.py DataLoader._compiled_inserts   100% 1 0 0   100% 0 0   100%
python/felis/tap_schema.py DataLoader._print_sql   100% 2 0 0   100% 2 0   100%
python/felis/tap_schema.py DataLoader._write_sql_to_file   75% 4 1 0   75% 4 1   75%
python/felis/tap_schema.py DataLoader._insert   100% 3 0 0   100% 0 0   100%
python/felis/tap_schema.py DataLoader._get_size   100% 10 0 0   100% 6 0   100%
python/felis/tap_schema.py DataLoader._is_indexed   100% 6 0 0   100% 6 0   100%
python/felis/tap_schema.py MetadataInserter.__init__   100% 2 0 0   100% 0 0   100%
python/felis/tap_schema.py MetadataInserter.insert_metadata   100% 10 0 0   100% 2 0   100%
python/felis/tap_schema.py (no function)   100% 68 0 0   100% 0 0   100%
python/felis/tests/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/felis/tests/postgresql.py TemporaryPostgresInstance.__init__   0% 2 2 0   100% 0 0   0%
python/felis/tests/postgresql.py TemporaryPostgresInstance.url   0% 1 1 0   100% 0 0   0%
python/felis/tests/postgresql.py TemporaryPostgresInstance.engine   0% 1 1 0   100% 0 0   0%
python/felis/tests/postgresql.py TemporaryPostgresInstance.begin   0% 2 2 0   100% 0 0   0%
python/felis/tests/postgresql.py TemporaryPostgresInstance.print_info   0% 9 9 0   0% 2 0   0%
python/felis/tests/postgresql.py setup_postgres_test_db   25% 8 6 0   50% 2 1   30%
python/felis/tests/postgresql.py (no function)   100% 22 0 0   100% 0 0   100%
python/felis/tests/run_cli.py run_cli   93% 15 1 0   90% 10 1   92%
python/felis/tests/run_cli.py (no function)   100% 5 0 0   100% 0 0   100%
python/felis/types.py FelisType.__init_subclass__   100% 7 0 0   100% 0 0   100%
python/felis/types.py FelisType.felis_type   50% 4 2 0   100% 0 0   50%
python/felis/types.py (no function)   100% 33 0 0   100% 0 0   100%
tests/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
tests/test_browser.py load_sales   100% 1 0 0   100% 0 0   100%
tests/test_browser.py build_site   100% 1 0 0   100% 0 0   100%
tests/test_browser.py read_page   100% 1 0 0   100% 0 0   100%
tests/test_browser.py read_nav   100% 4 0 0   100% 0 0   100%
tests/test_browser.py html_pages   100% 1 0 0   100% 0 0   100%
tests/test_browser.py cell_texts   100% 1 0 0   100% 0 0   100%
tests/test_browser.py parse_diagram   100% 18 0 0   90% 10 1   96%
tests/test_browser.py BrowserSiteTestCase.setUpClass   100% 3 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.tearDownClass   100% 1 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.page   100% 1 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_pages   100% 1 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_links   100% 14 0 0   100% 10 0   100%
tests/test_browser.py BrowserSiteTestCase.test_navigation_data   100% 3 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_navigation_data.entries   100% 1 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_navigation_data_targets   100% 8 0 0   100% 6 0   100%
tests/test_browser.py BrowserSiteTestCase.test_page_titles   100% 3 0 0   100% 2 0   100%
tests/test_browser.py BrowserSiteTestCase.test_breadcrumbs   100% 2 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_headings   100% 6 0 0   100% 2 0   100%
tests/test_browser.py BrowserSiteTestCase.test_home_page_schemas   100% 2 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_site_description   100% 3 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_schema_page   100% 5 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_columns_table   100% 11 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_show_empty_columns   100% 2 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_column_tags   100% 4 0 0   100% 2 0   100%
tests/test_browser.py BrowserSiteTestCase.test_indexes   100% 3 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_unique_constraint   100% 3 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_foreign_key_constraint   100% 3 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_check_constraint   100% 2 0 0   100% 0 0   100%
tests/test_browser.py BrowserSiteTestCase.test_stylesheets   100% 6 0 0   100% 4 0   100%
tests/test_browser.py BrowserSiteTestCase.test_icon   100% 7 0 0   100% 2 0   100%
tests/test_browser.py BrowserSiteTestCase.test_favicon   100% 4 0 0   100% 2 0   100%
tests/test_browser.py BrowserSiteTestCase.test_footer   100% 8 0 0   100% 2 0   100%
tests/test_browser.py BrowserSiteTestCase.test_relationship_diagram   100% 4 0 0   100% 0 0   100%
tests/test_browser.py BrowserDefaultsTestCase.setUpClass   100% 3 0 0   100% 0 0   100%
tests/test_browser.py BrowserDefaultsTestCase.tearDownClass   100% 1 0 0   100% 0 0   100%
tests/test_browser.py BrowserDefaultsTestCase.test_title   100% 2 0 0   100% 0 0   100%
tests/test_browser.py BrowserDefaultsTestCase.test_no_optional_parts   100% 9 0 0   100% 2 0   100%
tests/test_browser.py BrowserDefaultsTestCase.test_columns_table_leaves_out_empty_fields   100% 3 0 0   100% 0 0   100%
tests/test_browser.py BrowserDefaultsTestCase.test_columns_table_leaves_out_empty_fields.headings   100% 2 0 0   100% 0 0   100%
tests/test_browser.py BrowserNameClashTestCase.test_name_clash   100% 5 0 0   100% 0 0   100%
tests/test_browser.py UniqueNamesTestCase.test_claim   100% 2 0 0   100% 0 0   100%
tests/test_browser.py UniqueNamesTestCase.test_site   100% 13 0 0   100% 2 0   100%
tests/test_browser.py UniqueNamesTestCase.test_table_named_index   100% 3 0 0   100% 0 0   100%
tests/test_browser.py RelationshipDiagramTestCase.test_names_mermaid_rejects   100% 4 0 0   100% 0 0   100%
tests/test_browser.py BrowserEscapingTestCase.test_markup_escaped   100% 17 0 0   100% 2 0   100%
tests/test_browser.py UnresolvedColumnTestCase.test_error   100% 3 0 0   100% 0 0   100%
tests/test_browser.py SiteConfigTestCase.test_full_configuration   100% 10 0 0   100% 0 0   100%
tests/test_browser.py SiteConfigTestCase.test_empty_file   100% 4 0 0   100% 0 0   100%
tests/test_browser.py SiteConfigTestCase.test_invalid   100% 7 0 0   100% 2 0   100%
tests/test_browser.py (no function)   100% 82 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.setUp   100% 3 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_invalid_command   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_help   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_create   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_create_with_echo   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_create_with_dry_run   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_create_with_ignore_constraints   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_browser_with_config   100% 12 0 0   100% 2 0   100%
tests/test_cli.py CliTestCase.test_browser_with_invalid_config   100% 4 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_browser_with_malformed_config   100% 4 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_browser_resource   100% 3 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_browser_missing_file   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_browser_unresolved_column   100% 4 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_browser_non_yaml_file   100% 4 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_validate   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_validate_with_log_file   67% 6 2 0   50% 4 2   60%
tests/test_cli.py CliTestCase.test_validate_with_id_generation   100% 2 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_validate_with_id_generation_error   100% 2 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_validate_with_extra_checks   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_create_with_initialize_and_drop_error   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_load_tap_schema   100% 3 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_load_tap_schema_with_dry_run_and_output_file   67% 6 2 0   50% 4 2   60%
tests/test_cli.py CliTestCase.test_init_tap_schema   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_init_tap_schema_mock   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_init_tap_schema_with_extensions   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_init_tap_schema_with_custom_extensions   100% 5 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_diff   100% 3 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_diff_database   100% 7 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_diff_alembic   100% 3 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_diff_error   100% 2 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_diff_error_on_change   100% 3 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_dump_yaml   100% 2 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase._check_strip_ids   88% 8 1 0   90% 10 1   89%
tests/test_cli.py CliTestCase.test_dump_yaml_with_strip_ids   75% 8 2 0   100% 0 0   75%
tests/test_cli.py CliTestCase.test_dump_json   100% 2 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_dump_with_dereference_resources_and_sort_columns   100% 18 0 0   100% 2 0   100%
tests/test_cli.py CliTestCase.test_dump_json_with_strip_ids   75% 8 2 0   100% 0 0   75%
tests/test_cli.py CliTestCase._check_columns_sorted   100% 4 0 0   100% 2 0   100%
tests/test_cli.py CliTestCase.test_dump_yaml_with_sort_columns   100% 5 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_dump_json_with_sort_columns   100% 5 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_dump_with_invalid_file_extension_error   100% 1 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_create_and_drop_indexes   100% 4 0 0   100% 0 0   100%
tests/test_cli.py CliTestCase.test_generate_and_load_sql   91% 23 2 0   75% 4 1   89%
tests/test_cli.py ColumnRefsTestCase.setUp   100% 11 0 0   100% 0 0   100%
tests/test_cli.py ColumnRefsTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_cli.py ColumnRefsTestCase.test_validate_with_column_ref_index_increment   100% 1 0 0   100% 0 0   100%
tests/test_cli.py ColumnRefsTestCase.test_validate_with_column_ref_index_increment_error   100% 1 0 0   100% 0 0   100%
tests/test_cli.py ColumnRefsTestCase.test_load_tap_schema_with_column_refs   100% 2 0 0   100% 0 0   100%
tests/test_cli.py ColumnRefsTestCase.test_load_tap_schema_with_column_ref_index_increment   100% 2 0 0   100% 0 0   100%
tests/test_cli.py (no function)   99% 71 1 0   50% 2 1   97%
tests/test_database_context.py BaseDatabaseContextTest.setUp   100% 4 0 0   100% 0 0   100%
tests/test_database_context.py BaseDatabaseContextTest._create_database_context   100% 1 0 0   100% 0 0   100%
tests/test_database_context.py BaseDatabaseContextTest.test_database_context   95% 20 1 0   83% 6 1   92%
tests/test_database_context.py BaseDatabaseContextTest.test_initialize_is_idempotent   100% 5 0 0   100% 0 0   100%
tests/test_database_context.py BaseDatabaseContextTest.test_drop_is_idempotent   100% 4 0 0   100% 0 0   100%
tests/test_database_context.py SQLiteTestCase.setUp   100% 3 0 0   100% 0 0   100%
tests/test_database_context.py PostgreSQLTestCase.setUp   0% 4 4 0   100% 0 0   0%
tests/test_database_context.py PostgreSQLTestCase.test_missing_schema_name   0% 3 3 0   100% 0 0   0%
tests/test_database_context.py MySQLTestCase.setUp   56% 9 4 0   0% 2 0   45%
tests/test_database_context.py MySQLTestCase.test_missing_schema_name   0% 3 3 0   100% 0 0   0%
tests/test_database_context.py MockTestCase.setUp   100% 2 0 0   100% 0 0   100%
tests/test_database_context.py MockTestCase.test_mock_connection_engine_error   100% 3 0 0   100% 0 0   100%
tests/test_database_context.py DatabaseContextTestCase.test_create_with_bad_url   100% 3 0 0   100% 0 0   100%
tests/test_database_context.py DatabaseContextTestCase.test_create_with_bad_dialect   100% 4 0 0   100% 0 0   100%
tests/test_database_context.py SupportedDialectsTestCase.test_supported_dialects   100% 4 0 0   100% 0 0   100%
tests/test_database_context.py SupportedDialectsTestCase.test_supported_dialect_with_driver   100% 3 0 0   100% 0 0   100%
tests/test_database_context.py SupportedDialectsTestCase.test_unsupported_dialect   100% 5 0 0   100% 0 0   100%
tests/test_database_context.py (no function)   98% 40 1 0   50% 2 1   95%
tests/test_datamodel.py ColumnTestCase.test_validation   100% 36 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnTestCase.test_description_unchecked   100% 10 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnTestCase.test_description_checked   100% 11 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnTestCase.test_values   100% 53 0 0   94% 18 1   99%
tests/test_datamodel.py ColumnTestCase.test_values.default_coldata   100% 1 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnTestCase.test_timestamp   100% 2 0 0   100% 0 0   100%
tests/test_datamodel.py TableTestCase.test_validation   100% 13 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnGroupTestCase.test_validation   100% 26 0 0   100% 0 0   100%
tests/test_datamodel.py ConstraintTestCase.test_base_constraint   100% 11 0 0   100% 0 0   100%
tests/test_datamodel.py ConstraintTestCase.test_unique_constraint   100% 11 0 0   100% 0 0   100%
tests/test_datamodel.py ConstraintTestCase.test_foreign_key_constraint   100% 19 0 0   100% 0 0   100%
tests/test_datamodel.py ConstraintTestCase.test_check_constraint   100% 11 0 0   100% 0 0   100%
tests/test_datamodel.py ConstraintTestCase.test_bad_constraint_type   100% 2 0 0   100% 0 0   100%
tests/test_datamodel.py ConstraintTestCase.test_constraint_column_checks   100% 14 0 0   100% 0 0   100%
tests/test_datamodel.py ConstraintTestCase.test_constraint_column_checks._create_test_schema   100% 7 0 0   100% 0 0   100%
tests/test_datamodel.py IndexTestCase.test_index_validation   100% 17 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_validation   100% 18 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_schema_object_ids   100% 10 0 0   100% 2 0   100%
tests/test_datamodel.py SchemaTestCase.test_check_unique_constraint_names   100% 7 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_check_unique_index_names   100% 8 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_model_validate   100% 3 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_id_generation   100% 8 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_get_table_by_column   100% 7 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_find_object_by_id   100% 8 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_from_file   100% 9 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_from_resource   100% 8 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaTestCase.test_find_table_by_name   100% 9 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaVersionTest.test_validation   100% 12 0 0   100% 0 0   100%
tests/test_datamodel.py ValidationFlagsTest.test_check_tap_table_indexes   100% 11 0 0   100% 0 0   100%
tests/test_datamodel.py ValidationFlagsTest.test_check_tap_principal   100% 6 0 0   100% 0 0   100%
tests/test_datamodel.py ValidationFlagsTest.test_check_description   100% 8 0 0   100% 0 0   100%
tests/test_datamodel.py RedundantDatatypesTest.test_mysql_datatypes   100% 36 0 0   100% 0 0   100%
tests/test_datamodel.py RedundantDatatypesTest.test_mysql_datatypes.ColumnGenerator.__init__   100% 4 0 0   100% 0 0   100%
tests/test_datamodel.py RedundantDatatypesTest.test_mysql_datatypes.ColumnGenerator.col   100% 1 0 0   100% 0 0   100%
tests/test_datamodel.py RedundantDatatypesTest.test_precision   100% 2 0 0   100% 0 0   100%
tests/test_datamodel.py SchemaSerializationTest.test_serialization   100% 11 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.setUp   100% 10 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_schema_resource   92% 50 4 0   100% 0 0   92%
tests/test_datamodel.py ResourceTestCase.test_schema_resource_missing_column_error   100% 7 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_schema_resource_missing_ref_name_error   100% 7 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_schema_resource_not_found_error   100% 7 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_schema_resource_table_not_found_error   100% 7 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_schema_resource_bad_uri_error   100% 7 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_ref_schema_with_indexes   100% 12 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_ref_schema_with_foreign_key   100% 11 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_ref_schema_serialization   87% 15 2 0   100% 0 0   87%
tests/test_datamodel.py ResourceTestCase.test_ref_schema_with_dereference_columns   100% 7 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_tap_column_index_with_overrides   94% 18 1 0   88% 8 1   92%
tests/test_datamodel.py ResourceTestCase.test_from_uri_with_relative_resource_uri   100% 13 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_from_uri_with_absolute_resource_uri   100% 14 0 0   100% 0 0   100%
tests/test_datamodel.py ResourceTestCase.test_absolute_resource_uri_ignores_ref_schema_directory   100% 14 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnOverridesTestCase.test_all_override_fields_exist_on_column   100% 4 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnOverridesTestCase.test_overrides_all   100% 9 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnOverridesTestCase.test_overrides_subset   100% 9 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnOverridesTestCase.test_overrides_default   100% 8 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnOverridesTestCase.test_overrides_with_explicit_none_values   100% 8 0 0   100% 2 0   100%
tests/test_datamodel.py ColumnOverridesTestCase.test_extra_fields_in_overrides   100% 3 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnOverridesTestCase.test_overrides_accept_alias_keys   100% 5 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnOverridesTestCase.test_datatype_deserialize_and_serialize   100% 8 0 0   100% 0 0   100%
tests/test_datamodel.py ColumnOverridesTestCase.test_non_nullable_overrides_data_is_none   100% 1 0 0   100% 0 0   100%
tests/test_datamodel.py (no function)   99% 88 1 0   50% 2 1   98%
tests/test_diff.py TestSchemaDiff._diff   100% 1 0 0   100% 0 0   100%
tests/test_diff.py TestSchemaDiff.test_schema_diff   100% 84 0 0   100% 0 0   100%
tests/test_diff.py TestSchemaDiff.test_index_diff   100% 16 0 0   100% 0 0   100%
tests/test_diff.py TestSchemaDiff.test_print   100% 3 0 0   100% 0 0   100%
tests/test_diff.py TestSchemaDiff.test_formatted_print   100% 3 0 0   100% 0 0   100%
tests/test_diff.py TestSchemaDiff.test_parse_deepdiff_path   100% 3 0 0   100% 0 0   100%
tests/test_diff.py TestSchemaDiff.test_get_id_error   100% 4 0 0   100% 0 0   100%
tests/test_diff.py TestDatabaseDiff.test_database_diff   100% 14 0 0   100% 0 0   100%
tests/test_diff.py (no function)   100% 15 0 0   100% 0 0   100%
tests/test_import_modules.py (no function)   83% 6 1 0   50% 2 1   75%
tests/test_metadata.py MetaDataTestCase.setUp   100% 2 0 0   100% 0 0   100%
tests/test_metadata.py MetaDataTestCase.test_create_all   100% 54 0 0   89% 18 2   97%
tests/test_metadata.py MetaDataTestCase.test_create_all._sorted_indexes   100% 1 0 0   100% 0 0   100%
tests/test_metadata.py MetaDataTestCase.test_create_all._sorted_constraints   100% 1 0 0   100% 0 0   100%
tests/test_metadata.py MetaDataTestCase.test_builder   97% 33 1 0   82% 22 4   91%
tests/test_metadata.py MetaDataTestCase.test_timestamp   100% 12 0 0   100% 2 0   100%
tests/test_metadata.py MetaDataTestCase.test_ignore_constraints   100% 7 0 0   100% 2 0   100%
tests/test_metadata.py MetaDataTestCase.test_table_name_postfix   100% 6 0 0   100% 2 0   100%
tests/test_metadata.py MetaDataTestCase.test_fk_actions   100% 9 0 0   100% 6 0   100%
tests/test_metadata.py (no function)   95% 20 1 0   50% 2 1   91%
tests/test_postgres.py TestPostgresql.setUpClass   50% 2 1 0   100% 0 0   50%
tests/test_postgres.py TestPostgresql.test_initialize_create_and_drop   0% 22 22 0   0% 2 0   0%
tests/test_postgres.py TestPostgresql.test_create_and_drop_indexes   0% 18 18 0   100% 0 0   0%
tests/test_postgres.py TestPostgresql.test_create_and_drop_indexes.check_indexes_exist   0% 11 11 0   0% 8 0   0%
tests/test_postgres.py (no function)   100% 16 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerTestCase.setUp   100% 2 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerTestCase.test_create_table_manager   100% 9 0 0   100% 2 0   100%
tests/test_tap_schema.py TableManagerTestCase.test_table_name_postfix   100% 3 0 0   100% 2 0   100%
tests/test_tap_schema.py DataLoaderTestCase.setUp   100% 3 0 0   100% 0 0   100%
tests/test_tap_schema.py DataLoaderTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_tap_schema.py DataLoaderTestCase.test_sqlite   100% 5 0 0   100% 0 0   100%
tests/test_tap_schema.py DataLoaderTestCase.test_sql_output   100% 13 0 0   100% 0 0   100%
tests/test_tap_schema.py DataLoaderTestCase.test_unique_keys   100% 13 0 0   100% 4 0   100%
tests/test_tap_schema.py DataLoaderTestCase.test_select_with_filter   100% 7 0 0   100% 0 0   100%
tests/test_tap_schema.py _find_row   100% 4 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaSqliteSetup.__init__   100% 5 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaSqliteSetup.schema   100% 1 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaSqliteSetup.mgr   100% 1 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaSqliteSetup.metadata   100% 1 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaDataTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaDataTest.test_schemas   100% 14 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaDataTest.test_tables   100% 17 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaDataTest.test_columns   100% 58 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaDataTest.test_keys   100% 16 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaDataTest.test_key_columns   100% 14 0 0   100% 0 0   100%
tests/test_tap_schema.py TapSchemaDataTest.test_bad_table_name   100% 2 0 0   100% 0 0   100%
tests/test_tap_schema.py ForceUnboundArraySizeTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_tap_schema.py ForceUnboundArraySizeTest.test_force_unbounded_arraysize   100% 12 0 0   100% 4 0   100%
tests/test_tap_schema.py CompositeKeysTestCase.setUp   100% 12 0 0   100% 0 0   100%
tests/test_tap_schema.py CompositeKeysTestCase.test_keys   100% 3 0 0   100% 0 0   100%
tests/test_tap_schema.py CompositeKeysTestCase.test_key_columns   100% 6 0 0   100% 0 0   100%
tests/test_tap_schema.py ColumnRefsTestCase.setUp   100% 11 0 0   100% 0 0   100%
tests/test_tap_schema.py ColumnRefsTestCase.test_column_refs   95% 19 1 0   88% 8 1   93%
tests/test_tap_schema.py TableManagerExtensionsTestCase.setUp   100% 5 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_applied   100% 6 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_column_count   100% 8 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_with_data_loader   100% 13 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_invalid_extensions_file   100% 3 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_empty_extensions   100% 5 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_with_null_table_extensions   100% 8 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_invalid_column_missing_name   100% 5 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_column_id_auto_generation   100% 6 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_column_id_preserved   100% 6 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_multiple_tables_extended   100% 14 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_nonexistent_table_skipped   100% 6 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_column_properties_preserved   100% 6 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_apply_schema_to_metadata_true   100% 3 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_apply_schema_to_metadata_false   100% 4 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_with_table_name_postfix   100% 3 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_metadata_builder_called   100% 7 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_preserve_original_columns   100% 6 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_no_extensions_path_provided   100% 3 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_path_empty_string   100% 3 0 0   100% 0 0   100%
tests/test_tap_schema.py TableManagerExtensionsTestCase.test_extensions_file_not_found   100% 3 0 0   100% 0 0   100%
tests/test_tap_schema.py (no function)   99% 76 1 0   50% 2 1   97%
tests/test_tap_schema_postgres.py TestTapSchemaPostgresql.setUp   33% 6 4 0   50% 2 1   38%
tests/test_tap_schema_postgres.py TestTapSchemaPostgresql.test_create_metadata   0% 5 5 0   100% 0 0   0%
tests/test_tap_schema_postgres.py TestTapSchemaPostgresql.test_reflect_database   0% 29 29 0   100% 0 0   0%
tests/test_tap_schema_postgres.py TestTapSchemaPostgresql.test_nonstandard_names   0% 12 12 0   0% 2 0   0%
tests/test_tap_schema_postgres.py TestTapSchemaPostgresql.test_bad_engine   0% 5 5 0   100% 0 0   0%
tests/test_tap_schema_postgres.py TestTapSchemaPostgresql.tearDown   0% 2 2 0   100% 0 0   0%
tests/test_tap_schema_postgres.py (no function)   96% 27 1 0   50% 2 1   93%
Total     93% 4830 315 23   87% 906 88   92%

No items found using the specified filter.