Spaces:
Running
Running
File size: 7,236 Bytes
09ecaf7 1686de5 351d460 09ecaf7 1686de5 09ecaf7 82ff6c1 09ecaf7 d25db6b 09ecaf7 f503159 09ecaf7 d25db6b 09ecaf7 1686de5 d25db6b 1686de5 09ecaf7 d25db6b 09ecaf7 d25db6b 09ecaf7 d25db6b 1686de5 d25db6b 1686de5 d25db6b fe5d98f 4f6cbcc fe5d98f d25db6b 09ecaf7 d7291ef 1686de5 d7291ef 3cf9fa0 1686de5 186c8e8 84aedaf 3cf9fa0 1686de5 76f5d42 1686de5 76f5d42 09ecaf7 d25db6b 1686de5 f503159 1686de5 65933cd 0f31229 82ff6c1 65933cd f503159 82ff6c1 f503159 351d460 f503159 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
from sqlalchemy import (
Column, String, DateTime, SmallInteger, Table, ForeignKey, Boolean,
CheckConstraint, UniqueConstraint, Text, Integer
)
from sqlalchemy.dialects.postgresql import UUID, TIMESTAMP, CHAR, JSONB
from sqlalchemy.orm import relationship
import datetime, uuid
from .database import Base
from sqlalchemy import Float, Boolean
image_countries = Table(
"image_countries", Base.metadata,
Column(
"image_id",
UUID(as_uuid=True),
ForeignKey("images.image_id", ondelete="CASCADE"),
primary_key=True,
),
Column(
"c_code",
CHAR(2),
ForeignKey("countries.c_code"),
primary_key=True,
),
)
images_captions = Table(
"images_captions", Base.metadata,
Column(
"image_id",
UUID(as_uuid=True),
ForeignKey("images.image_id", ondelete="CASCADE"),
primary_key=True,
),
Column(
"caption_id",
UUID(as_uuid=True),
ForeignKey("captions.caption_id", ondelete="CASCADE"),
primary_key=True,
),
)
class Source(Base):
__tablename__ = "sources"
s_code = Column(String, primary_key=True)
label = Column(String, nullable=False)
class Region(Base):
__tablename__ = "regions"
r_code = Column(String, primary_key=True)
label = Column(String, nullable=False)
class EventType(Base):
__tablename__ = "event_types"
t_code = Column(String, primary_key=True)
label = Column(String, nullable=False)
class Country(Base):
__tablename__ = "countries"
c_code = Column(CHAR(2), primary_key=True)
label = Column(String, nullable=False)
r_code = Column(String, ForeignKey("regions.r_code"), nullable=False)
class SpatialReference(Base):
__tablename__ = "spatial_references"
epsg = Column(String, primary_key=True)
srid = Column(String, nullable=False)
proj4 = Column(String, nullable=False)
wkt = Column(String, nullable=False)
class ImageTypes(Base):
__tablename__ = "image_types"
image_type = Column(String, primary_key=True)
label = Column(String, nullable=False)
class Prompts(Base):
__tablename__ = "prompts"
p_code = Column(String, primary_key=True)
label = Column(Text, nullable=False)
metadata_instructions = Column(Text, nullable=True)
image_type = Column(String, ForeignKey("image_types.image_type"), nullable=False)
is_active = Column(Boolean, default=False, nullable=False)
# Relationship to image_types table
image_type_r = relationship("ImageTypes")
class Models(Base):
__tablename__ = "models"
m_code = Column(String, primary_key=True)
label = Column(String, nullable=False)
model_type = Column(String, nullable=False)
is_available = Column(Boolean, default=True)
is_fallback = Column(Boolean, default=False, nullable=False)
config = Column(JSONB, nullable=True)
provider = Column(String, nullable=True)
model_id = Column(String, nullable=True)
delete_count = Column(SmallInteger, nullable=False, default=0)
__table_args__ = (
CheckConstraint('NOT (is_fallback = true AND is_available = false)', name='fallback_must_be_available'),
)
class JSONSchema(Base):
__tablename__ = "json_schemas"
schema_id = Column(String, primary_key=True)
title = Column(String, nullable=False)
schema = Column(JSONB, nullable=False)
version = Column(String, nullable=False)
image_type = Column(String, ForeignKey("image_types.image_type"), nullable=True)
created_at = Column(TIMESTAMP(timezone=True), default=datetime.datetime.utcnow)
# Relationship to image_types table
image_type_r = relationship("ImageTypes")
class Images(Base):
__tablename__ = "images"
__table_args__ = (
CheckConstraint('center_lat IS NULL OR (center_lat BETWEEN -90 AND 90)', name='chk_images_center_lat'),
CheckConstraint('center_lon IS NULL OR (center_lon BETWEEN -180 AND 180)', name='chk_images_center_lon'),
CheckConstraint('heading_deg IS NULL OR (heading_deg >= 0 AND heading_deg <= 360)', name='chk_images_heading_deg'),
CheckConstraint('pitch_deg IS NULL OR (pitch_deg BETWEEN -90 AND 90)', name='chk_images_pitch_deg'),
CheckConstraint('yaw_deg IS NULL OR (yaw_deg BETWEEN -180 AND 180)', name='chk_images_yaw_deg'),
CheckConstraint('roll_deg IS NULL OR (roll_deg BETWEEN -180 AND 180)', name='chk_images_roll_deg'),
)
image_id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
file_key = Column(String, nullable=False)
sha256 = Column(String, nullable=False)
thumbnail_key = Column(String, nullable=True)
thumbnail_sha256 = Column(String, nullable=True)
detail_key = Column(String, nullable=True)
detail_sha256 = Column(String, nullable=True)
source = Column(String, ForeignKey("sources.s_code"), nullable=True)
event_type = Column(String, ForeignKey("event_types.t_code"), nullable=False)
epsg = Column(String, ForeignKey("spatial_references.epsg"), nullable=False)
image_type = Column(String, ForeignKey("image_types.image_type"), nullable=False)
captured_at = Column(TIMESTAMP(timezone=True))
# Drone-specific fields
center_lon = Column(Float)
center_lat = Column(Float)
amsl_m = Column(Float)
agl_m = Column(Float)
heading_deg= Column(Float)
yaw_deg = Column(Float)
pitch_deg = Column(Float)
roll_deg = Column(Float)
rtk_fix = Column(Boolean)
std_h_m = Column(Float)
std_v_m = Column(Float)
# Relationships
countries = relationship("Country", secondary=image_countries, backref="images")
captions = relationship("Captions", secondary=images_captions, backref="images")
class Captions(Base):
__tablename__ = "captions"
__table_args__ = (
CheckConstraint('accuracy IS NULL OR (accuracy BETWEEN 0 AND 100)', name='chk_captions_accuracy'),
CheckConstraint('context IS NULL OR (context BETWEEN 0 AND 100)', name='chk_captions_context'),
CheckConstraint('usability IS NULL OR (usability BETWEEN 0 AND 100)', name='chk_captions_usability'),
)
caption_id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
title = Column(String, nullable=True)
prompt = Column(String, ForeignKey("prompts.p_code"), nullable=True)
model = Column(String, ForeignKey("models.m_code"), nullable=True)
schema_id = Column(String, ForeignKey("json_schemas.schema_id"), nullable=True)
raw_json = Column(JSONB, nullable=True)
generated = Column(Text, nullable=True)
edited = Column(Text)
accuracy = Column(SmallInteger)
context = Column(SmallInteger)
usability = Column(SmallInteger)
starred = Column(Boolean, default=False)
image_count = Column(Integer, nullable=True)
created_at = Column(TIMESTAMP(timezone=True), default=datetime.datetime.utcnow)
updated_at = Column(TIMESTAMP(timezone=True), onupdate=datetime.datetime.utcnow)
# Relationships
schema = relationship("JSONSchema")
model_r = relationship("Models", foreign_keys=[model])
prompt_r = relationship("Prompts", foreign_keys=[prompt])
|