Fix some LGTM errors

This commit is contained in:
richard-dds 2019-10-31 10:57:46 -04:00
parent 6910916cd8
commit e3c9105270
37 changed files with 95 additions and 71 deletions

View File

@ -52,6 +52,7 @@ disable=all
enable=import-error, enable=import-error,
import-self, import-self,
cyclic-import,
reimported, reimported,
misplaced-future, misplaced-future,
relative-import, relative-import,

View File

@ -1,7 +1,8 @@
from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.orm.exc import NoResultFound
from atst.database import db from atst.database import db
from atst.models import PermissionSet, Permissions from atst.models.permissions import Permissions
from atst.models.permission_set import PermissionSet
from .exceptions import NotFoundError from .exceptions import NotFoundError

View File

@ -1,8 +1,4 @@
from sqlalchemy.ext.declarative import declarative_base from .base import Base
Base = declarative_base()
from .application import Application from .application import Application
from .application_invitation import ApplicationInvitation from .application_invitation import ApplicationInvitation
from .application_role import ApplicationRole, Status as ApplicationRoleStatus from .application_role import ApplicationRole, Status as ApplicationRoleStatus

View File

@ -1,7 +1,7 @@
from sqlalchemy import and_, Column, ForeignKey, String from sqlalchemy import and_, Column, ForeignKey, String
from sqlalchemy.orm import relationship, synonym from sqlalchemy.orm import relationship, synonym
from atst.models import Base from atst.models.base import Base
from atst.models.application_role import ApplicationRole from atst.models.application_role import ApplicationRole
from atst.models.environment import Environment from atst.models.environment import Environment
from atst.models import mixins from atst.models import mixins

View File

@ -2,11 +2,13 @@ from sqlalchemy import Column, ForeignKey
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship, backref from sqlalchemy.orm import relationship, backref
from atst.models import Base from atst.models.base import Base
from atst.models.mixins import TimestampsMixin, AuditableMixin, InvitesMixin import atst.models.mixins as mixins
class ApplicationInvitation(Base, TimestampsMixin, AuditableMixin, InvitesMixin): class ApplicationInvitation(
Base, mixins.TimestampsMixin, mixins.AuditableMixin, mixins.InvitesMixin
):
__tablename__ = "application_invitations" __tablename__ = "application_invitations"
application_role_id = Column( application_role_id = Column(

View File

@ -5,10 +5,11 @@ from sqlalchemy.orm import relationship
from sqlalchemy.event import listen from sqlalchemy.event import listen
from atst.utils import first_or_none from atst.utils import first_or_none
from atst.models import Base, mixins from atst.models.base import Base
import atst.models.mixins as mixins
import atst.models.types as types
from atst.models.environment_role import EnvironmentRole from atst.models.environment_role import EnvironmentRole
from atst.models.mixins.auditable import record_permission_sets_updates from atst.models.mixins.auditable import record_permission_sets_updates
from .types import Id
class Status(Enum): class Status(Enum):
@ -36,7 +37,7 @@ class ApplicationRole(
): ):
__tablename__ = "application_roles" __tablename__ = "application_roles"
id = Id() id = types.Id()
application_id = Column( application_id = Column(
UUID(as_uuid=True), ForeignKey("applications.id"), index=True, nullable=False UUID(as_uuid=True), ForeignKey("applications.id"), index=True, nullable=False
) )

View File

@ -2,7 +2,9 @@ from sqlalchemy import Column, String
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.orm.exc import NoResultFound
from atst.models import Base, types, mixins from atst.models.base import Base
import atst.models.mixins as mixins
import atst.models.types as types
from atst.database import db from atst.database import db
from atst.domain.exceptions import NotFoundError from atst.domain.exceptions import NotFoundError

View File

@ -2,7 +2,8 @@ from sqlalchemy import String, Column, ForeignKey, inspect
from sqlalchemy.dialects.postgresql import UUID, JSONB from sqlalchemy.dialects.postgresql import UUID, JSONB
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Base, types from atst.models.base import Base
import atst.models.types as types
from atst.models.mixins.timestamps import TimestampsMixin from atst.models.mixins.timestamps import TimestampsMixin

3
atst/models/base.py Normal file
View File

@ -0,0 +1,3 @@
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

View File

@ -2,7 +2,9 @@ from enum import Enum
from sqlalchemy import Column, Date, Enum as SQLAEnum, ForeignKey, Numeric, String from sqlalchemy import Column, Date, Enum as SQLAEnum, ForeignKey, Numeric, String
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Base, mixins, types from atst.models.base import Base
import atst.models.mixins as mixins
import atst.models.types as types
class JEDICLINType(Enum): class JEDICLINType(Enum):

View File

@ -3,9 +3,9 @@ from sqlalchemy.orm import relationship
from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.dialects.postgresql import JSONB
from enum import Enum from enum import Enum
from atst.models import Base from atst.models.base import Base
from atst.models.types import Id import atst.models.mixins as mixins
from atst.models import mixins import atst.models.types as types
class Environment( class Environment(
@ -13,7 +13,7 @@ class Environment(
): ):
__tablename__ = "environments" __tablename__ = "environments"
id = Id() id = types.Id()
name = Column(String, nullable=False) name = Column(String, nullable=False)
application_id = Column(ForeignKey("applications.id"), nullable=False) application_id = Column(ForeignKey("applications.id"), nullable=False)

View File

@ -3,7 +3,9 @@ from sqlalchemy import Index, ForeignKey, Column, String, TIMESTAMP, Enum as SQL
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Base, types, mixins from atst.models.base import Base
import atst.models.mixins as mixins
import atst.models.types as types
class CSPRole(Enum): class CSPRole(Enum):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, ForeignKey from sqlalchemy import Column, ForeignKey
from atst.models import Base from atst.models.base import Base
from atst.models import mixins import atst.models.mixins as mixins
class EnvironmentJobFailure(Base, mixins.JobFailureMixin): class EnvironmentJobFailure(Base, mixins.JobFailureMixin):

View File

@ -1,6 +1,8 @@
from sqlalchemy import String, Column from sqlalchemy import String, Column
from atst.models import Base, types, mixins from atst.models.base import Base
import atst.models.types as types
import atst.models.mixins as mixins
class NotificationRecipient(Base, mixins.TimestampsMixin): class NotificationRecipient(Base, mixins.TimestampsMixin):

View File

@ -1,7 +1,9 @@
from sqlalchemy import String, Column from sqlalchemy import String, Column
from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy.dialects.postgresql import ARRAY
from atst.models import Base, types, mixins from atst.models.base import Base
import atst.models.mixins as mixins
import atst.models.types as types
class PermissionSet(Base, mixins.TimestampsMixin): class PermissionSet(Base, mixins.TimestampsMixin):

View File

@ -1,9 +1,11 @@
from sqlalchemy import and_, Column, String from sqlalchemy import Column, String
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from sqlalchemy.types import ARRAY from sqlalchemy.types import ARRAY
from itertools import chain from itertools import chain
from atst.models import Base, Application, mixins, types from atst.models.base import Base
import atst.models.types as types
import atst.models.mixins as mixins
from atst.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus from atst.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
from atst.domain.permission_sets import PermissionSets from atst.domain.permission_sets import PermissionSets
from atst.utils import first_or_none from atst.utils import first_or_none
@ -31,7 +33,7 @@ class Portfolio(
applications = relationship( applications = relationship(
"Application", "Application",
back_populates="portfolio", back_populates="portfolio",
primaryjoin=and_(Application.portfolio_id == id, Application.deleted == False), primaryjoin="and_(Application.portfolio_id == Portfolio.id, Application.deleted == False)",
) )
roles = relationship("PortfolioRole") roles = relationship("PortfolioRole")

View File

@ -2,11 +2,13 @@ from sqlalchemy import Column, ForeignKey
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship, backref from sqlalchemy.orm import relationship, backref
from atst.models import Base from atst.models.base import Base
from atst.models.mixins import TimestampsMixin, AuditableMixin, InvitesMixin import atst.models.mixins as mixins
class PortfolioInvitation(Base, TimestampsMixin, InvitesMixin, AuditableMixin): class PortfolioInvitation(
Base, mixins.TimestampsMixin, mixins.InvitesMixin, mixins.AuditableMixin
):
__tablename__ = "portfolio_invitations" __tablename__ = "portfolio_invitations"
portfolio_role_id = Column( portfolio_role_id = Column(

View File

@ -4,8 +4,9 @@ from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from sqlalchemy.event import listen from sqlalchemy.event import listen
from atst.models import Base, mixins from atst.models.base import Base
from .types import Id import atst.models.types as types
import atst.models.mixins as mixins
from atst.utils import first_or_none from atst.utils import first_or_none
from atst.models.mixins.auditable import record_permission_sets_updates from atst.models.mixins.auditable import record_permission_sets_updates
@ -41,7 +42,7 @@ class PortfolioRole(
): ):
__tablename__ = "portfolio_roles" __tablename__ = "portfolio_roles"
id = Id() id = types.Id()
portfolio_id = Column( portfolio_id = Column(
UUID(as_uuid=True), ForeignKey("portfolios.id"), index=True, nullable=False UUID(as_uuid=True), ForeignKey("portfolios.id"), index=True, nullable=False
) )

View File

@ -5,7 +5,10 @@ from sqlalchemy import Column, DateTime, ForeignKey, String
from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Attachment, Base, mixins, types from atst.models.base import Base
import atst.models.types as types
import atst.models.mixins as mixins
from atst.models.attachment import Attachment
from atst.utils.clock import Clock from atst.utils.clock import Clock

View File

@ -1,9 +1,11 @@
from sqlalchemy import and_, String, ForeignKey, Column, Date, Boolean, Table, TIMESTAMP from sqlalchemy import String, ForeignKey, Column, Date, Boolean, Table, TIMESTAMP
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.event import listen from sqlalchemy.event import listen
from atst.models import Base, ApplicationRole, types, mixins from atst.models.base import Base
import atst.models.types as types
import atst.models.mixins as mixins
from atst.models.portfolio_invitation import PortfolioInvitation from atst.models.portfolio_invitation import PortfolioInvitation
from atst.models.application_invitation import ApplicationInvitation from atst.models.application_invitation import ApplicationInvitation
from atst.models.mixins.auditable import ( from atst.models.mixins.auditable import (
@ -35,9 +37,7 @@ class User(
application_roles = relationship( application_roles = relationship(
"ApplicationRole", "ApplicationRole",
backref="user", backref="user",
primaryjoin=and_( primaryjoin="and_(ApplicationRole.user_id == User.id, ApplicationRole.deleted == False)",
ApplicationRole.user_id == id, ApplicationRole.deleted == False
),
) )
portfolio_invitations = relationship( portfolio_invitations = relationship(

View File

@ -1,18 +1,14 @@
from flask import Blueprint, current_app as app, g, redirect, url_for from flask import current_app as app, g, redirect, url_for
applications_bp = Blueprint("applications", __name__)
from . import index from . import index
from . import new from . import new
from . import settings from . import settings
from . import invitations from . import invitations
from .blueprint import applications_bp
from atst.domain.environment_roles import EnvironmentRoles from atst.domain.environment_roles import EnvironmentRoles
from atst.domain.exceptions import UnauthorizedError from atst.domain.exceptions import UnauthorizedError
from atst.domain.authz.decorator import user_can_access_decorator as user_can from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.models.permissions import Permissions from atst.models.permissions import Permissions
from atst.utils.context_processors import portfolio as portfolio_context_processor
applications_bp.context_processor(portfolio_context_processor)
def wrap_environment_role_lookup(user, environment_id=None, **kwargs): def wrap_environment_role_lookup(user, environment_id=None, **kwargs):

View File

@ -0,0 +1,6 @@
from flask import Blueprint
from atst.utils.context_processors import portfolio as portfolio_context_processor
applications_bp = Blueprint("applications", __name__)
applications_bp.context_processor(portfolio_context_processor)

View File

@ -1,6 +1,6 @@
from flask import render_template from flask import render_template
from . import applications_bp from .blueprint import applications_bp
from atst.domain.authz.decorator import user_can_access_decorator as user_can from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.models.permissions import Permissions from atst.models.permissions import Permissions

View File

@ -1,6 +1,6 @@
from flask import redirect, url_for, g from flask import redirect, url_for, g
from . import applications_bp from .blueprint import applications_bp
from atst.domain.invitations import ApplicationInvitations from atst.domain.invitations import ApplicationInvitations

View File

@ -1,6 +1,6 @@
from flask import redirect, render_template, request as http_request, url_for, g from flask import redirect, render_template, request as http_request, url_for, g
from . import applications_bp from .blueprint import applications_bp
from atst.domain.applications import Applications from atst.domain.applications import Applications
from atst.domain.portfolios import Portfolios from atst.domain.portfolios import Portfolios
from atst.forms.application import NameAndDescriptionForm, EnvironmentsForm from atst.forms.application import NameAndDescriptionForm, EnvironmentsForm

View File

@ -1,6 +1,6 @@
from flask import redirect, render_template, request as http_request, url_for, g from flask import redirect, render_template, request as http_request, url_for, g
from . import applications_bp from .blueprint import applications_bp
from atst.domain.exceptions import AlreadyExistsError from atst.domain.exceptions import AlreadyExistsError
from atst.domain.environments import Environments from atst.domain.environments import Environments
from atst.domain.applications import Applications from atst.domain.applications import Applications

View File

@ -1,12 +1,7 @@
from flask import Blueprint, request as http_request, g, render_template from flask import request as http_request, g, render_template
from operator import attrgetter from operator import attrgetter
portfolios_bp = Blueprint("portfolios", __name__)
from . import index from . import index
from . import invitations from . import invitations
from . import admin from . import admin
from atst.utils.context_processors import portfolio as portfolio_context_processor from .blueprint import portfolios_bp
portfolios_bp.context_processor(portfolio_context_processor)

View File

@ -1,6 +1,6 @@
from flask import render_template, request as http_request, g, redirect, url_for from flask import render_template, request as http_request, g, redirect, url_for
from . import portfolios_bp from .blueprint import portfolios_bp
from atst.domain.portfolios import Portfolios from atst.domain.portfolios import Portfolios
from atst.domain.portfolio_roles import PortfolioRoles from atst.domain.portfolio_roles import PortfolioRoles
from atst.models.portfolio_role import Status as PortfolioRoleStatus from atst.models.portfolio_role import Status as PortfolioRoleStatus

View File

@ -0,0 +1,5 @@
from flask import Blueprint
from atst.utils.context_processors import portfolio as portfolio_context_processor
portfolios_bp = Blueprint("portfolios", __name__)
portfolios_bp.context_processor(portfolio_context_processor)

View File

@ -2,7 +2,7 @@ from datetime import date, timedelta
from flask import redirect, render_template, url_for, request as http_request, g from flask import redirect, render_template, url_for, request as http_request, g
from . import portfolios_bp from .blueprint import portfolios_bp
from atst.forms.portfolio import PortfolioCreationForm from atst.forms.portfolio import PortfolioCreationForm
from atst.domain.reports import Reports from atst.domain.reports import Reports
from atst.domain.portfolios import Portfolios from atst.domain.portfolios import Portfolios

View File

@ -1,6 +1,6 @@
from flask import g, redirect, url_for, render_template, request as http_request from flask import g, redirect, url_for, render_template, request as http_request
from . import portfolios_bp from .blueprint import portfolios_bp
from atst.domain.authz.decorator import user_can_access_decorator as user_can from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.domain.exceptions import AlreadyExistsError from atst.domain.exceptions import AlreadyExistsError
from atst.domain.invitations import PortfolioInvitations from atst.domain.invitations import PortfolioInvitations

View File

@ -1,10 +1,4 @@
from flask import Blueprint
task_orders_bp = Blueprint("task_orders", __name__)
from . import index from . import index
from . import new from . import new
from . import downloads from . import downloads
from atst.utils.context_processors import portfolio as portfolio_context_processor from .blueprint import task_orders_bp
task_orders_bp.context_processor(portfolio_context_processor)

View File

@ -0,0 +1,5 @@
from flask import Blueprint
from atst.utils.context_processors import portfolio as portfolio_context_processor
task_orders_bp = Blueprint("task_orders", __name__)
task_orders_bp.context_processor(portfolio_context_processor)

View File

@ -1,6 +1,6 @@
from flask import Response, current_app as app from flask import Response, current_app as app
from . import task_orders_bp from .blueprint import task_orders_bp
from atst.domain.task_orders import TaskOrders from atst.domain.task_orders import TaskOrders
from atst.domain.exceptions import NotFoundError from atst.domain.exceptions import NotFoundError
from atst.domain.authz.decorator import user_can_access_decorator as user_can from atst.domain.authz.decorator import user_can_access_decorator as user_can

View File

@ -1,6 +1,6 @@
from flask import g, render_template, url_for, redirect from flask import g, render_template, url_for, redirect
from . import task_orders_bp from .blueprint import task_orders_bp
from atst.domain.authz.decorator import user_can_access_decorator as user_can from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.domain.portfolios import Portfolios from atst.domain.portfolios import Portfolios
from atst.domain.task_orders import TaskOrders from atst.domain.task_orders import TaskOrders

View File

@ -8,7 +8,7 @@ from flask import (
jsonify, jsonify,
) )
from . import task_orders_bp from .blueprint import task_orders_bp
from atst.domain.authz.decorator import user_can_access_decorator as user_can from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.domain.exceptions import NoAccessError from atst.domain.exceptions import NoAccessError
from atst.domain.task_orders import TaskOrders from atst.domain.task_orders import TaskOrders

View File

@ -2,7 +2,7 @@ from sqlalchemy import select
from atst.jobs import send_notification_mail from atst.jobs import send_notification_mail
from atst.database import db from atst.database import db
from atst.models import NotificationRecipient from atst.models.notification_recipient import NotificationRecipient
class NotificationSender(object): class NotificationSender(object):