Skip to content

Commit

Permalink
Merge branch 'master' into Add-related-docs-menu
Browse files Browse the repository at this point in the history
  • Loading branch information
matentzn authored Nov 15, 2023
2 parents bdc7468 + 4334dce commit 88e4e16
Show file tree
Hide file tree
Showing 9 changed files with 1,823 additions and 1,123 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/deploy_documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,5 +72,5 @@ jobs:
mkdir docs
touch docs/.nojekyll
cp -r src/docs/* docs/
poetry run gen-doc -d docs src/sssom_schema/schema/sssom_schema.yaml
poetry run gen-doc -d docs src/sssom_schema/schema/sssom_schema.yaml --template-directory src/doc-templates
poetry run mkdocs gh-deploy
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ SRC = src
DEST = project
PYMODEL = $(SRC)/$(SCHEMA_NAME)/datamodel
DOCDIR = docs
TEMPLATE_DIR = $(SRC)/doc-templates

# basename of a YAML file in model/
.PHONY: all clean
Expand Down Expand Up @@ -84,7 +85,7 @@ $(DOCDIR):

gendoc: $(DOCDIR)
cp $(SRC)/docs/*md $(DOCDIR) ; \
$(RUN) gen-doc -d $(DOCDIR) $(SOURCE_SCHEMA_PATH)
$(RUN) gen-doc -d $(DOCDIR) $(SOURCE_SCHEMA_PATH) --template-directory $(TEMPLATE_DIR)

testdoc: gendoc serve

Expand Down
2,479 changes: 1,358 additions & 1,121 deletions poetry.lock

Large diffs are not rendered by default.

123 changes: 123 additions & 0 deletions src/doc-templates/class.md.jinja2
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Class: {{ gen.name(element) }}

{%- if header -%}
{{header}}
{%- endif -%}


{% if element.description %}
{% set element_description_lines = element.description.split('\n') %}
{% for element_description_line in element_description_lines %}
_{{ element_description_line }}_
{% endfor %}
{% endif %}

{% if element.abstract %}
* __NOTE__: this is an abstract class and should not be instantiated directly
{% endif %}

URI: {{ gen.uri_link(element) }}


{% if diagram_type == "er_diagram" %}
```{{ gen.mermaid_directive() }}
{{ gen.mermaid_diagram([element.name]) }}
```
{% else %}
{% include "class_diagram.md.jinja2" %}
{% endif %}

{% if schemaview.class_parents(element.name) or schemaview.class_children(element.name, mixins=False) %}

## Inheritance
{{ gen.inheritance_tree(element, mixins=True) }}
{% else %}
<!-- no inheritance hierarchy -->
{% endif %}

## Slots

| Name | Cardinality and Range | Description | Inheritance |
| --- | --- | --- | --- |
{% if gen.get_direct_slots(element)|length > 0 %}
{%- for slot in gen.get_direct_slots(element) -%}
| {{ gen.link(slot) }} | {{ gen.cardinality(slot) }} <br/> {{ gen.link(slot.range) }} | {{ slot.description|enshorten }} | direct |
{% endfor -%}
{% endif -%}
{% if gen.get_indirect_slots(element)|length > 0 %}
{%- for slot in gen.get_indirect_slots(element) -%}
| {{ gen.link(slot) }} | {{ gen.cardinality(slot) }} <br/> {{ gen.link(slot.range) }} | {{ slot.description|enshorten }} | {{ gen.links(gen.get_slot_inherited_from(element.name, slot.name))|join(', ') }} |
{% endfor -%}
{% endif %}

{% if schemaview.is_mixin(element.name) %}
## Mixin Usage

| mixed into | description |
| --- | --- |
{% for c in schemaview.class_children(element.name, is_a=False) -%}
| {{ gen.link(c) }} | {{ schemaview.get_class(c).description|enshorten }} |
{% endfor %}
{% endif %}

{% if schemaview.usage_index().get(element.name) %}
## Usages

| used by | used in | type | used |
| --- | --- | --- | --- |
{% for usage in schemaview.usage_index().get(element.name) -%}
| {{gen.link(usage.used_by)}} | {{gen.link(usage.slot)}} | {{usage.metaslot}} | {{ gen.link(usage.used) }} |
{% endfor %}
{% endif %}

{% include "common_metadata.md.jinja2" %}


{% if schemaview.get_mappings(element.name).items() -%}
## Mappings

| Mapping Type | Mapped Value |
| --- | --- |
{% for m, mt in schemaview.get_mappings(element.name).items() -%}
{% if mt|length > 0 -%}
| {{ m }} | {{ mt|join(', ') }} |
{% endif -%}
{% endfor %}

{% endif -%}

{% if gen.example_object_blobs(element.name) -%}
## Examples
{% for name, blob in gen.example_object_blobs(element.name) -%}
### Example: {{name}}

```yaml
{{ blob }}
```
{% endfor %}
{% endif %}


## LinkML Source

<!-- TODO: investigate https://stackoverflow.com/questions/37606292/how-to-create-tabbed-code-blocks-in-mkdocs-or-sphinx -->

### Direct

<details>
```yaml
{{gen.yaml(element)}}
```
</details>

### Induced

<details>
```yaml
{{gen.yaml(element, inferred=True)}}
```
</details>

{%- if footer -%}
{{footer}}
{%- endif -%}
59 changes: 59 additions & 0 deletions src/doc-templates/class_diagram.md.jinja2
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
{% if schemaview.class_parents(element.name) and schemaview.class_children(element.name) %}
```{{ gen.mermaid_directive() }}
classDiagram
class {{ gen.name(element) }}
{% for s in schemaview.class_parents(element.name)|sort(attribute='name') -%}
{{ gen.name(schemaview.get_element(s)) }} <|-- {{ gen.name(element) }}
{% endfor %}

{% for s in schemaview.class_children(element.name)|sort(attribute='name') -%}
{{ gen.name(element) }} <|-- {{ gen.name(schemaview.get_element(s)) }}
{% endfor %}

{% for s in schemaview.class_induced_slots(element.name)|sort(attribute='name') -%}
{{ gen.name(element) }} : {{gen.name(s)}}
{% if s.range not in gen.all_type_object_names() %}
{{ gen.name(element) }} --|> {{ s.range }} : {{ gen.name(s) }}
{% endif %}
{% endfor %}
```
{% elif schemaview.class_parents(element.name) %}
```{{ gen.mermaid_directive() }}
classDiagram
class {{ gen.name(element) }}
{% for s in schemaview.class_parents(element.name)|sort(attribute='name') -%}
{{ gen.name(schemaview.get_element(s)) }} <|-- {{ gen.name(element) }}
{% endfor %}
{% for s in schemaview.class_induced_slots(element.name)|sort(attribute='name') -%}
{{ gen.name(element) }} : {{gen.name(s)}}
{% if s.range not in gen.all_type_object_names() %}
{{ gen.name(element) }} --|> {{ s.range }} : {{ gen.name(s) }}
{% endif %}
{% endfor %}
```
{% elif schemaview.class_children(element.name) %}
```{{ gen.mermaid_directive() }}
classDiagram
class {{ gen.name(element) }}
{% for s in schemaview.class_children(element.name)|sort(attribute='name') -%}
{{ gen.name(element) }} <|-- {{ gen.name(schemaview.get_element(s)) }}
{% endfor %}
{% for s in schemaview.class_induced_slots(element.name)|sort(attribute='name') -%}
{{ gen.name(element) }} : {{gen.name(s)}}
{% if s.range not in gen.all_type_object_names() %}
{{ gen.name(element) }} --|> {{ s.range }} : {{ gen.name(s) }}
{% endif %}
{% endfor %}
```
{% else %}
```{{ gen.mermaid_directive() }}
classDiagram
class {{ gen.name(element) }}
{% for s in schemaview.class_induced_slots(element.name)|sort(attribute='name') -%}
{{ gen.name(element) }} : {{gen.name(s)}}
{% if s.range not in gen.all_type_object_names() %}
{{ gen.name(element) }} --|> {{ s.range }} : {{ gen.name(s) }}
{% endif %}
{% endfor %}
```
{% endif %}
78 changes: 78 additions & 0 deletions src/doc-templates/common_metadata.md.jinja2
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{% if element.aliases %}
## Aliases

{% for alias in element.aliases %}
* {{ alias }}
{%- endfor %}
{% endif %}


{% if element.examples %}
## Examples

| Value |
| --- |
{% for x in element.examples -%}
| {{ x.value }} |
{% endfor %}
{% endif -%}

{% if element.comments -%}
## Comments

{% for x in element.comments -%}
* {{x}}
{% endfor %}
{% endif -%}

{% if element.todos -%}
## TODOs

{% for x in element.todos -%}
* {{x}}
{% endfor %}
{% endif -%}

{% if element.see_also -%}
## See Also

{% for x in element.see_also -%}
* {{ gen.uri_link(x) }}
{% endfor %}
{% endif -%}

## Identifier and Mapping Information

{% if element.id_prefixes %}
### Valid ID Prefixes

Instances of this class *should* have identifiers with one of the following prefixes:
{% for p in element.id_prefixes %}
* {{p}}
{% endfor %}

{% endif %}


{% if element.annotations %}
### Annotations

| property | value |
| --- | --- |
{% for a in element.annotations -%}
{%- if a|string|first != '_' -%}
| {{ a }} | {{ element.annotations[a].value }} |
{%- endif -%}
{% endfor %}
{% endif %}

{% if element.from_schema or element.imported_from %}
### Schema Source

{% if element.from_schema %}
* from schema: {{ element.from_schema }}
{% endif %}
{% if element.imported_from %}
* imported from: {{ element.imported_from }}
{% endif %}
{% endif %}
62 changes: 62 additions & 0 deletions src/doc-templates/index.md.jinja2
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# {% if schema.title %}{{ schema.title }}{% else %}{{ schema.name }}{% endif %}

{% if schema.description %}{{ schema.description }}{% endif %}

URI: {{ schema.id }}

Name: {{ schema.name }}

{% if include_top_level_diagram %}

## Schema Diagram

```{{ gen.mermaid_directive() }}
{{ gen.mermaid_diagram() }}
```
{% endif %}

## Classes

| Class | Description |
| --- | --- |
{% if gen.hierarchical_class_view -%}
{% for u, v in gen.class_hierarchy_as_tuples() -%}
| {{ "&nbsp;"|safe*u*8 }}{{ gen.link(schemaview.get_class(v)) }} | {{ schemaview.get_class(v).description }} |
{% endfor %}
{% else -%}
{% for c in gen.all_class_objects()|sort(attribute=sort_by) -%}
| {{gen.link(c)}} | {{c.description|enshorten}} |
{% endfor %}
{% endif %}

## Slots

| Slot | Description |
| --- | --- |
{% for s in gen.all_slot_objects()|sort(attribute=sort_by) -%}
| {{gen.link(s)}} | {{s.description|enshorten}} |
{% endfor %}

## Enumerations

| Enumeration | Description |
| --- | --- |
{% for e in gen.all_enum_objects()|sort(attribute=sort_by) -%}
| {{gen.link(e)}} | {{e.description|enshorten}} |
{% endfor %}

## Types

| Type | Description |
| --- | --- |
{% for t in gen.all_type_objects()|sort(attribute=sort_by) -%}
| {{gen.link(t)}} | {{t.description|enshorten}} |
{% endfor %}

## Subsets

| Subset | Description |
| --- | --- |
{% for ss in schemaview.all_subsets().values()|sort(attribute='name') -%}
| {{gen.link(ss)}} | {{ss.description|enshorten}} |
{% endfor %}
Loading

0 comments on commit 88e4e16

Please sign in to comment.