Skip to content

Commit

Permalink
Fixing constraints and project tag sync (#1050)
Browse files Browse the repository at this point in the history
* Fixing constraints and project tag sync

* Fixes flake8
  • Loading branch information
kevgliss authored Apr 20, 2021
1 parent b607d4b commit f4ec93b
Show file tree
Hide file tree
Showing 11 changed files with 43 additions and 14 deletions.
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

0 comments on commit f4ec93b

Please sign in to comment.