• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

NaturalHistoryMuseum / ukbol / 13897929404

17 Mar 2025 11:08AM UTC coverage: 87.52% (+1.6%) from 85.935%
13897929404

push

github

jrdh
ui: add underline on hover to taxonomic tree

554 of 633 relevant lines covered (87.52%)

0.88 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

99.25
/api/ukbol/model.py
1
from datetime import datetime
1✔
2
from typing import Any, List, Self
1✔
3

4
from sqlalchemy import DateTime, ForeignKey
1✔
5
from sqlalchemy.orm import Mapped, mapped_column, relationship
1✔
6

7
from ukbol.extensions import db
1✔
8

9

10
# imported from uksi
11
class Taxon(db.Model):
1✔
12
    id: Mapped[str] = mapped_column(primary_key=True)
1✔
13
    name: Mapped[str]
1✔
14
    authorship: Mapped[str | None]
1✔
15
    rank: Mapped[str] = mapped_column(index=True)
1✔
16
    parent_id: Mapped[int | None] = mapped_column(ForeignKey("taxon.id"), index=True)
1✔
17

18
    # relationships
19
    parent: Mapped["Taxon"] = relationship(back_populates="children", remote_side=[id])
1✔
20
    children: Mapped[List["Taxon"]] = relationship(back_populates="parent")
1✔
21
    synonyms: Mapped[List["Synonym"]] = relationship(back_populates="taxon")
1✔
22

23
    @classmethod
1✔
24
    def get(cls, ident: Any) -> Self | None:
1✔
25
        return db.session.get(cls, ident)
1✔
26

27

28
# imported from uksi
29
class Synonym(db.Model):
1✔
30
    id: Mapped[str] = mapped_column(primary_key=True)
1✔
31
    name: Mapped[str]
1✔
32
    authorship: Mapped[str | None]
1✔
33
    rank: Mapped[str]
1✔
34
    taxon_id: Mapped[str] = mapped_column(ForeignKey(Taxon.id), index=True)
1✔
35

36
    # relationships
37
    taxon: Mapped["Taxon"] = relationship(back_populates="synonyms")
1✔
38

39
    @classmethod
1✔
40
    def get(cls, ident: Any) -> Self | None:
1✔
41
        return db.session.get(cls, ident)
1✔
42

43

44
# imported from BOLD
45
class Specimen(db.Model):
1✔
46
    id: Mapped[int] = mapped_column(primary_key=True)
1✔
47
    processid: Mapped[str | None]
1✔
48
    sampleid: Mapped[str | None]
1✔
49
    fieldid: Mapped[str | None]
1✔
50
    museumid: Mapped[str | None]
1✔
51
    record_id: Mapped[str | None]
1✔
52
    specimenid: Mapped[str | None]
1✔
53
    processid_minted_date: Mapped[str | None]
1✔
54
    bin_uri: Mapped[str | None] = mapped_column(index=True)
1✔
55
    bin_created_date: Mapped[str | None]
1✔
56
    collection_code: Mapped[str | None]
1✔
57
    inst: Mapped[str | None]
1✔
58
    taxid: Mapped[str | None]
1✔
59
    kingdom: Mapped[str | None]
1✔
60
    phylum: Mapped[str | None]
1✔
61
    cls: Mapped[str | None]
1✔
62
    order: Mapped[str | None]
1✔
63
    family: Mapped[str | None]
1✔
64
    subfamily: Mapped[str | None]
1✔
65
    tribe: Mapped[str | None]
1✔
66
    genus: Mapped[str | None]
1✔
67
    species: Mapped[str | None]
1✔
68
    subspecies: Mapped[str | None]
1✔
69
    species_reference: Mapped[str | None]
1✔
70
    identification: Mapped[str | None] = mapped_column(index=True)
1✔
71
    identification_method: Mapped[str | None]
1✔
72
    identification_rank: Mapped[str | None] = mapped_column(index=True)
1✔
73
    identified_by: Mapped[str | None]
1✔
74
    identifier_email: Mapped[str | None]
1✔
75
    taxonomy_notes: Mapped[str | None]
1✔
76
    sex: Mapped[str | None]
1✔
77
    reproduction: Mapped[str | None]
1✔
78
    life_stage: Mapped[str | None]
1✔
79
    short_note: Mapped[str | None]
1✔
80
    notes: Mapped[str | None]
1✔
81
    voucher_type: Mapped[str | None]
1✔
82
    tissue_type: Mapped[str | None]
1✔
83
    specimen_linkout: Mapped[str | None]
1✔
84
    associated_specimens: Mapped[str | None]
1✔
85
    associated_taxa: Mapped[str | None]
1✔
86
    collectors: Mapped[str | None]
1✔
87
    collection_date_start: Mapped[str | None]
1✔
88
    collection_date_end: Mapped[str | None]
1✔
89
    collection_event_id: Mapped[str | None]
1✔
90
    collection_time: Mapped[str | None]
1✔
91
    collection_notes: Mapped[str | None]
1✔
92
    geoid: Mapped[str | None]
1✔
93
    country_ocean: Mapped[str | None]
1✔
94
    country_iso: Mapped[str | None] = mapped_column(index=True)
1✔
95
    province_state: Mapped[str | None]
1✔
96
    region: Mapped[str | None]
1✔
97
    sector: Mapped[str | None]
1✔
98
    site: Mapped[str | None]
1✔
99
    site_code: Mapped[str | None]
1✔
100
    coord: Mapped[str | None]
1✔
101
    coord_accuracy: Mapped[str | None]
1✔
102
    coord_source: Mapped[str | None]
1✔
103
    elev: Mapped[str | None]
1✔
104
    elev_accuracy: Mapped[str | None]
1✔
105
    depth: Mapped[str | None]
1✔
106
    depth_accuracy: Mapped[str | None]
1✔
107
    habitat: Mapped[str | None]
1✔
108
    sampling_protocol: Mapped[str | None]
1✔
109
    nuc: Mapped[str | None]
1✔
110
    nuc_basecount: Mapped[str | None]
1✔
111
    insdc_acs: Mapped[str | None]
1✔
112
    funding_src: Mapped[str | None]
1✔
113
    marker_code: Mapped[str | None]
1✔
114
    primers_forward: Mapped[str | None]
1✔
115
    primers_reverse: Mapped[str | None]
1✔
116
    sequence_run_site: Mapped[str | None]
1✔
117
    sequence_upload_date: Mapped[str | None]
1✔
118
    bold_recordset_code_arr: Mapped[str | None]
1✔
119
    ecoregion: Mapped[str | None]
1✔
120
    biome: Mapped[str | None]
1✔
121
    realm: Mapped[str | None]
1✔
122
    sovereign_inst: Mapped[str | None]
1✔
123

124
    @classmethod
1✔
125
    def get(cls, ident: Any) -> Self | None:
1✔
126
        return db.session.get(cls, ident)
×
127

128

129
# imported from PANTHEON
130
class PantheonSpecies(db.Model):
1✔
131
    id: Mapped[int] = mapped_column(primary_key=True)
1✔
132
    species: Mapped[str | None] = mapped_column(index=True)
1✔
133
    family: Mapped[str | None]
1✔
134
    order: Mapped[str | None]
1✔
135
    sqs: Mapped[str | None]
1✔
136
    conservation_status: Mapped[str | None]
1✔
137
    larval_feeding_guild: Mapped[str | None]
1✔
138
    adult_feeding_guild: Mapped[str | None]
1✔
139
    broad_biotope: Mapped[str | None]
1✔
140
    habitat: Mapped[str | None]
1✔
141
    resources: Mapped[str | None]
1✔
142
    specific_assemblage_type: Mapped[str | None] = mapped_column(index=True)
1✔
143
    habitat_score: Mapped[str | None]
1✔
144
    associations: Mapped[str | None]
1✔
145
    common_name: Mapped[str | None]
1✔
146
    notes: Mapped[str | None]
1✔
147

148

149
# information about when the data was imported from each source
150
class DataSourceStatus(db.Model):
1✔
151
    name: Mapped[str] = mapped_column(primary_key=True)
1✔
152
    updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True))
1✔
153
    version: Mapped[str | None]
1✔
154
    total: Mapped[int]
1✔
155

156
    @classmethod
1✔
157
    def get(cls, name: str) -> Self | None:
1✔
158
        return db.session.get(cls, name)
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc