Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixing constraints and project tag sync #1050

Merged
merged 2 commits into from
Apr 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/dispatch/definition/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from sqlalchemy import Table, Column, Integer, String, ForeignKey, PrimaryKeyConstraint
from sqlalchemy.orm import relationship
from sqlalchemy.sql.schema import UniqueConstraint

from sqlalchemy_utils import TSVectorType

from dispatch.database.core import Base
Expand Down Expand Up @@ -32,8 +34,9 @@


class Definition(Base, ProjectMixin):
__table_args__ = (UniqueConstraint("text", "project_id"),)
id = Column(Integer, primary_key=True)
text = Column(String, unique=True)
text = Column(String)
source = Column(String, default="dispatch")
terms = relationship("Term", secondary=definition_terms, backref="definitions")
teams = relationship("TeamContact", secondary=definition_teams)
Expand Down
4 changes: 3 additions & 1 deletion src/dispatch/incident_priority/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from sqlalchemy import event, Column, Integer, String, Boolean
from sqlalchemy.sql.expression import true
from sqlalchemy.orm import object_session
from sqlalchemy.sql.schema import UniqueConstraint
from sqlalchemy_utils import TSVectorType

from dispatch.database.core import Base
Expand All @@ -12,8 +13,9 @@


class IncidentPriority(Base, ProjectMixin):
__table_args__ = (UniqueConstraint("name", "project_id"),)
id = Column(Integer, primary_key=True)
name = Column(String, unique=True)
name = Column(String)
description = Column(String)
page_commander = Column(Boolean, default=False)

Expand Down
5 changes: 4 additions & 1 deletion src/dispatch/incident_type/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from sqlalchemy import event, Column, Boolean, ForeignKey, Integer, String, JSON
from sqlalchemy.ext.hybrid import hybrid_method
from sqlalchemy.orm import relationship, object_session
from sqlalchemy.sql.schema import UniqueConstraint

from sqlalchemy.sql.expression import true
from sqlalchemy_utils import TSVectorType

Expand All @@ -15,8 +17,9 @@


class IncidentType(ProjectMixin, Base):
__table_args__ = (UniqueConstraint("name", "project_id"),)
id = Column(Integer, primary_key=True)
name = Column(String, unique=True)
name = Column(String)
slug = Column(String)
description = Column(String)
exclude_from_metrics = Column(Boolean, default=False)
Expand Down
3 changes: 3 additions & 0 deletions src/dispatch/individual/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from typing import List, Optional

from sqlalchemy import Column, ForeignKey, Integer, PrimaryKeyConstraint, String, Table
from sqlalchemy.sql.schema import UniqueConstraint
from sqlalchemy.orm import relationship
from sqlalchemy_utils import TSVectorType

Expand Down Expand Up @@ -39,6 +40,8 @@


class IndividualContact(Base, ContactMixin, ProjectMixin):
__table_args__ = (UniqueConstraint("email", "project_id"),)

id = Column(Integer, primary_key=True)
name = Column(String)
mobile_phone = Column(String)
Expand Down
2 changes: 1 addition & 1 deletion src/dispatch/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class ContactMixin(TimeStampMixin):
is_active = Column(Boolean, default=True)
is_external = Column(Boolean, default=False)
contact_type = Column(String)
email = Column(String, unique=True)
email = Column(String)
company = Column(String)
notes = Column(String)
owner = Column(String)
Expand Down
6 changes: 5 additions & 1 deletion src/dispatch/search/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from pydantic import Field
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.sql.schema import UniqueConstraint

from sqlalchemy.orm import relationship
from sqlalchemy.sql.sqltypes import JSON
from sqlalchemy_utils import TSVectorType
Expand All @@ -22,8 +24,10 @@


class SearchFilter(Base, ProjectMixin):
__table_args__ = (UniqueConstraint("name", "project_id"),)

id = Column(Integer, primary_key=True)
name = Column(String, unique=True)
name = Column(String)
description = Column(String)
expression = Column(JSON)
creator_id = Column(Integer, ForeignKey("dispatch_user.id"))
Expand Down
5 changes: 4 additions & 1 deletion src/dispatch/tag/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.sql.schema import UniqueConstraint
from sqlalchemy_utils import TSVectorType

from dispatch.database.core import Base
Expand All @@ -11,9 +12,11 @@


class Tag(Base, TimeStampMixin, ProjectMixin):
__table_args__ = (UniqueConstraint("name", "project_id"),)

# Columns
id = Column(Integer, primary_key=True)
name = Column(String, unique=True)
name = Column(String)
description = Column(String)
uri = Column(String)
source = Column(String)
Expand Down
15 changes: 10 additions & 5 deletions src/dispatch/tag/scheduled.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from dispatch.decorators import background_task
from dispatch.plugin import service as plugin_service
from dispatch.project import service as project_service
from dispatch.scheduler import scheduler
from dispatch.incident import service as incident_service
from dispatch.tag import service as tag_service
Expand All @@ -23,16 +24,20 @@
@background_task
def sync_tags(db_session=None):
"""Syncs tags from external sources."""
for p in plugin_service.get_all(db_session=db_session):
if p.type != "tag":
for project in project_service.get_all(db_session=db_session):
plugin = plugin_service.get_active_instance(
db_session=db_session, plugin_type="tag", project_id=project.id
)

if not plugin:
continue

log.debug(f"Getting tags via: {p.slug}")
for t in p.instance.get():
log.debug(f"Getting tags via: {plugin.plugin.slug}")
for t in plugin.instance.get():
log.debug(f"Adding Tag. Tag: {t}")

# we always use the plugin project when syncing
project = p.project.__dict__
project = project.__dict__
t["tag_type"].update({"project": project})
tag_in = TagCreate(**t, project=project)
tag_service.get_or_create(db_session=db_session, tag_in=tag_in)
Expand Down
5 changes: 3 additions & 2 deletions src/dispatch/tag_type/models.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from typing import List, Optional

from sqlalchemy import Column, Integer, String

from sqlalchemy.sql.schema import UniqueConstraint
from sqlalchemy_utils import TSVectorType

from dispatch.database.core import Base
Expand All @@ -10,8 +10,9 @@


class TagType(Base, TimeStampMixin, ProjectMixin):
__table_args__ = (UniqueConstraint("name", "project_id"),)
id = Column(Integer, primary_key=True)
name = Column(String, unique=True)
name = Column(String)
description = Column(String)
search_vector = Column(TSVectorType("name"))

Expand Down
3 changes: 3 additions & 0 deletions src/dispatch/team/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from sqlalchemy import Column, ForeignKey, Integer, PrimaryKeyConstraint, String, Table
from sqlalchemy.orm import relationship
from sqlalchemy.sql.schema import UniqueConstraint
from sqlalchemy_utils import TSVectorType

from dispatch.database.core import Base
Expand Down Expand Up @@ -46,6 +47,8 @@


class TeamContact(Base, ContactMixin, ProjectMixin):
__table_args__ = (UniqueConstraint("email", "project_id"),)

id = Column(Integer, primary_key=True)
name = Column(String)
notes = Column(String)
Expand Down
4 changes: 3 additions & 1 deletion src/dispatch/term/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from typing import List, Optional

from sqlalchemy import Column, Integer, String, Boolean
from sqlalchemy.sql.schema import UniqueConstraint
from sqlalchemy_utils import TSVectorType

from dispatch.database.core import Base
Expand All @@ -10,8 +11,9 @@

# SQLAlchemy models...
class Term(Base, ProjectMixin):
__table_args__ = (UniqueConstraint("text", "project_id"),)
id = Column(Integer, primary_key=True)
text = Column(String, unique=True)
text = Column(String)
discoverable = Column(Boolean, default=True)
search_vector = Column(TSVectorType("text"))

Expand Down