Update atst to atat
This commit is contained in:
parent
6eb48239cf
commit
c2814416fb
@ -1,9 +1,9 @@
|
||||
[run]
|
||||
omit =
|
||||
atst/routes/dev.py
|
||||
atst/domain/audit_log.py
|
||||
atst/models/mixins/auditable.py
|
||||
atst/models/audit_event.py
|
||||
atat/routes/dev.py
|
||||
atat/domain/audit_log.py
|
||||
atat/models/mixins/auditable.py
|
||||
atat/models/audit_event.py
|
||||
branch = True
|
||||
|
||||
[report]
|
||||
|
@ -80,7 +80,7 @@ COPY --from=builder /install/.venv/ ./.venv/
|
||||
COPY --from=builder /install/alembic/ ./alembic/
|
||||
COPY --from=builder /install/alembic.ini .
|
||||
COPY --from=builder /install/app.py .
|
||||
COPY --from=builder /install/atst/ ./atst/
|
||||
COPY --from=builder /install/atat/ ./atst/
|
||||
COPY --from=builder /install/celery_worker.py ./celery_worker.py
|
||||
COPY --from=builder /install/config/ ./config/
|
||||
COPY --from=builder /install/templates/ ./templates/
|
||||
|
@ -7,7 +7,7 @@ Azure Stages:
|
||||
admin subscription
|
||||
etc.
|
||||
|
||||
`atst.models.mixins.state_machines` module contains:
|
||||
`atat.models.mixins.state_machines` module contains:
|
||||
|
||||
python Enum classes that define the stages for a CSP
|
||||
|
||||
@ -16,7 +16,7 @@ Azure Stages:
|
||||
BILLING_PROFILE = "billing profile"
|
||||
ADMIN_SUBSCRIPTION = "admin subscription"
|
||||
|
||||
there are two types of python dataclass subclasses defined in `atst.models.portoflio_state_machine` module.
|
||||
there are two types of python dataclass subclasses defined in `atat.models.portoflio_state_machine` module.
|
||||
|
||||
one holds the data that is submitted to the CSP
|
||||
|
||||
@ -34,7 +34,7 @@ the other holds the results of the call to the CSP
|
||||
user_object_id: str
|
||||
etc.
|
||||
|
||||
A Finite State Machine `atst.models.portoflio_state_machine.PortfolioStateMachine` is created for each provisioning process and tied to an instance of Portfolio class.
|
||||
A Finite State Machine `atat.models.portoflio_state_machine.PortfolioStateMachine` is created for each provisioning process and tied to an instance of Portfolio class.
|
||||
|
||||
Aach time the FSM is created/accessed it will generate a list of States and Transitions between the states.
|
||||
|
||||
@ -58,13 +58,3 @@ There is a set of callbacks defined that are triggered as the process transition
|
||||
validates the collected data.
|
||||
|
||||
A transition into the next state can be triggered using PortfolioStateMachine.trigger_next_transition`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
13
README.md
13
README.md
@ -1,4 +1,4 @@
|
||||
# ATST
|
||||
# ATAT
|
||||
|
||||
[](https://circleci.com/gh/dod-ccpo/atst)
|
||||
|
||||
@ -9,7 +9,7 @@ This is the user-facing web application for ATAT.
|
||||
## Installation
|
||||
|
||||
### System Requirements
|
||||
ATST uses the [Scripts to Rule Them All](https://github.com/github/scripts-to-rule-them-all)
|
||||
ATAT uses the [Scripts to Rule Them All](https://github.com/github/scripts-to-rule-them-all)
|
||||
pattern for setting up and running the project. The scripts are located in the
|
||||
`script` directory and use script fragments in the
|
||||
[scriptz](https://github.com/dod-ccpo/scriptz) repository that are shared across
|
||||
@ -25,17 +25,17 @@ locally:
|
||||
computer, but 3.7.3 is required for ATAT.
|
||||
|
||||
* `pipenv`
|
||||
ATST requires `pipenv` to be installed for python dependency management. `pipenv`
|
||||
ATAT requires `pipenv` to be installed for python dependency management. `pipenv`
|
||||
will create the virtual environment that the app requires. [See
|
||||
`pipenv`'s documentation for instructions on installing `pipenv`](
|
||||
https://pipenv.readthedocs.io/en/latest/install/#installing-pipenv).
|
||||
|
||||
* `yarn`
|
||||
ATST requires `yarn` for installing and managing Javascript
|
||||
ATAT requires `yarn` for installing and managing Javascript
|
||||
dependencies: https://yarnpkg.com/en/
|
||||
|
||||
* `postgres` >= 9.6
|
||||
ATST requires a PostgreSQL instance (>= 9.6) for persistence. Have PostgresSQL installed
|
||||
ATAT requires a PostgreSQL instance (>= 9.6) for persistence. Have PostgresSQL installed
|
||||
and running on the default port of 5432. (A good resource for installing and running
|
||||
PostgreSQL for Macs is [Postgres.app](https://postgresapp.com/). Follow the instructions,
|
||||
including the optional Step 3, and add `/Applications/Postgres.app/Contents/Versions/latest/bin`
|
||||
@ -43,7 +43,7 @@ locally:
|
||||
by executing `psql` and ensuring that a connection is successfully made.
|
||||
|
||||
* `redis`
|
||||
ATST also requires a Redis instance for session management. Have Redis installed and
|
||||
ATAT also requires a Redis instance for session management. Have Redis installed and
|
||||
running on the default port of 6379. You can ensure that Redis is running by
|
||||
executing `redis-cli` with no options and ensuring a connection is succesfully made.
|
||||
|
||||
@ -370,4 +370,3 @@ fi
|
||||
```
|
||||
|
||||
Also note that if the line number of a previously whitelisted secret changes, the whitelist file, `.secrets.baseline`, will be updated and needs to be committed.
|
||||
|
||||
|
@ -28,13 +28,13 @@ from unipath import Path
|
||||
parent_dir = Path(__file__).parent.parent
|
||||
sys.path.append(parent_dir)
|
||||
|
||||
from atst.app import make_config
|
||||
from atat.app import make_config
|
||||
|
||||
app_config = make_config()
|
||||
config.set_main_option("sqlalchemy.url", app_config["DATABASE_URI"])
|
||||
|
||||
from atst.database import db
|
||||
from atst.models import *
|
||||
from atat.database import db
|
||||
from atat.models import *
|
||||
|
||||
target_metadata = Base.metadata
|
||||
|
||||
|
2
app.py
2
app.py
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from atst.app import make_app, make_config
|
||||
from atat.app import make_app, make_config
|
||||
|
||||
config = make_config()
|
||||
app = make_app(config)
|
||||
|
@ -9,34 +9,34 @@ from unipath import Path
|
||||
from flask_wtf.csrf import CSRFProtect
|
||||
from urllib.parse import urljoin
|
||||
|
||||
from atst.database import db
|
||||
from atst.assets import environment as assets_environment
|
||||
from atst.filters import register_filters
|
||||
from atst.routes import bp
|
||||
from atst.routes.portfolios import portfolios_bp as portfolio_routes
|
||||
from atst.routes.task_orders import task_orders_bp
|
||||
from atst.routes.applications import applications_bp
|
||||
from atst.routes.dev import bp as dev_routes
|
||||
from atst.routes.users import bp as user_routes
|
||||
from atst.routes.errors import make_error_pages
|
||||
from atst.routes.ccpo import bp as ccpo_routes
|
||||
from atst.domain.authnid.crl import CRLCache, NoOpCRLCache
|
||||
from atst.domain.auth import apply_authentication
|
||||
from atst.domain.authz import Authorization
|
||||
from atst.domain.csp import make_csp_provider
|
||||
from atst.domain.portfolios import Portfolios
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.queue import celery, update_celery
|
||||
from atst.utils import mailer
|
||||
from atst.utils.form_cache import FormCache
|
||||
from atst.utils.json import CustomJSONEncoder, sqlalchemy_dumps
|
||||
from atst.utils.notification_sender import NotificationSender
|
||||
from atst.utils.session_limiter import SessionLimiter
|
||||
from atat.database import db
|
||||
from atat.assets import environment as assets_environment
|
||||
from atat.filters import register_filters
|
||||
from atat.routes import bp
|
||||
from atat.routes.portfolios import portfolios_bp as portfolio_routes
|
||||
from atat.routes.task_orders import task_orders_bp
|
||||
from atat.routes.applications import applications_bp
|
||||
from atat.routes.dev import bp as dev_routes
|
||||
from atat.routes.users import bp as user_routes
|
||||
from atat.routes.errors import make_error_pages
|
||||
from atat.routes.ccpo import bp as ccpo_routes
|
||||
from atat.domain.authnid.crl import CRLCache, NoOpCRLCache
|
||||
from atat.domain.auth import apply_authentication
|
||||
from atat.domain.authz import Authorization
|
||||
from atat.domain.csp import make_csp_provider
|
||||
from atat.domain.portfolios import Portfolios
|
||||
from atat.models.permissions import Permissions
|
||||
from atat.queue import celery, update_celery
|
||||
from atat.utils import mailer
|
||||
from atat.utils.form_cache import FormCache
|
||||
from atat.utils.json import CustomJSONEncoder, sqlalchemy_dumps
|
||||
from atat.utils.notification_sender import NotificationSender
|
||||
from atat.utils.session_limiter import SessionLimiter
|
||||
|
||||
from logging.config import dictConfig
|
||||
from atst.utils.logging import JsonFormatter, RequestContextFilter
|
||||
from atat.utils.logging import JsonFormatter, RequestContextFilter
|
||||
|
||||
from atst.utils.context_processors import assign_resources
|
||||
from atat.utils.context_processors import assign_resources
|
||||
|
||||
|
||||
ENV = os.getenv("FLASK_ENV", "dev")
|
@ -1,7 +1,7 @@
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
|
||||
from atst.database import db
|
||||
from atst.domain.exceptions import NotFoundError
|
||||
from atat.database import db
|
||||
from atat.domain.exceptions import NotFoundError
|
||||
|
||||
|
||||
class BaseDomainClass(object):
|
@ -5,9 +5,9 @@ from uuid import UUID
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
from sqlalchemy import func, and_, or_
|
||||
|
||||
from atst.database import db
|
||||
from atst.domain.environment_roles import EnvironmentRoles
|
||||
from atst.models import Application, ApplicationRole, ApplicationRoleStatus, Portfolio
|
||||
from atat.database import db
|
||||
from atat.domain.environment_roles import EnvironmentRoles
|
||||
from atat.models import Application, ApplicationRole, ApplicationRoleStatus, Portfolio
|
||||
from .permission_sets import PermissionSets
|
||||
from .exceptions import NotFoundError
|
||||
|
@ -4,12 +4,12 @@ from typing import List
|
||||
from uuid import UUID
|
||||
|
||||
from . import BaseDomainClass
|
||||
from atst.database import db
|
||||
from atst.domain.application_roles import ApplicationRoles
|
||||
from atst.domain.environments import Environments
|
||||
from atst.domain.exceptions import NotFoundError
|
||||
from atst.domain.invitations import ApplicationInvitations
|
||||
from atst.models import (
|
||||
from atat.database import db
|
||||
from atat.domain.application_roles import ApplicationRoles
|
||||
from atat.domain.environments import Environments
|
||||
from atat.domain.exceptions import NotFoundError
|
||||
from atat.domain.invitations import ApplicationInvitations
|
||||
from atat.models import (
|
||||
Application,
|
||||
ApplicationRole,
|
||||
ApplicationRoleStatus,
|
||||
@ -17,8 +17,8 @@ from atst.models import (
|
||||
Portfolio,
|
||||
PortfolioStateMachine,
|
||||
)
|
||||
from atst.models.mixins.state_machines import FSMStates
|
||||
from atst.utils import first_or_none, commit_or_raise_already_exists_error
|
||||
from atat.models.mixins.state_machines import FSMStates
|
||||
from atat.utils import first_or_none, commit_or_raise_already_exists_error
|
||||
|
||||
|
||||
class Applications(BaseDomainClass):
|
@ -1,6 +1,6 @@
|
||||
from atst.database import db
|
||||
from atst.domain.common import Query
|
||||
from atst.models.audit_event import AuditEvent
|
||||
from atat.database import db
|
||||
from atat.domain.common import Query
|
||||
from atat.models.audit_event import AuditEvent
|
||||
|
||||
|
||||
class AuditEventQuery(Query):
|
@ -9,18 +9,18 @@ from flask import (
|
||||
)
|
||||
from werkzeug.datastructures import ImmutableTypeConversionDict
|
||||
|
||||
from atst.domain.users import Users
|
||||
from atat.domain.users import Users
|
||||
|
||||
|
||||
UNPROTECTED_ROUTES = [
|
||||
"atst.root",
|
||||
"atat.root",
|
||||
"dev.login_dev",
|
||||
"dev.dev_new_user",
|
||||
"atst.login_redirect",
|
||||
"atst.logout",
|
||||
"atst.unauthorized",
|
||||
"atat.login_redirect",
|
||||
"atat.logout",
|
||||
"atat.unauthorized",
|
||||
"static",
|
||||
"atst.about",
|
||||
"atat.about",
|
||||
]
|
||||
|
||||
|
||||
@ -36,7 +36,7 @@ def apply_authentication(app):
|
||||
if should_redirect_to_user_profile(request, user):
|
||||
return redirect(url_for("users.user", next=request.path))
|
||||
elif not _unprotected_route(request):
|
||||
return redirect(url_for("atst.root", next=request.path))
|
||||
return redirect(url_for("atat.root", next=request.path))
|
||||
|
||||
|
||||
def should_redirect_to_user_profile(request, user):
|
@ -1,5 +1,5 @@
|
||||
from atst.domain.exceptions import UnauthenticatedError, NotFoundError
|
||||
from atst.domain.users import Users
|
||||
from atat.domain.exceptions import UnauthenticatedError, NotFoundError
|
||||
from atat.domain.users import Users
|
||||
from .utils import parse_sdn, email_from_certificate
|
||||
from .crl import CRLRevocationException, CRLInvalidException
|
||||
|
@ -1,8 +1,8 @@
|
||||
from atst.utils import first_or_none
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.domain.exceptions import UnauthorizedError
|
||||
from atst.models.portfolio_role import Status as PortfolioRoleStatus
|
||||
from atst.models.application_role import Status as ApplicationRoleStatus
|
||||
from atat.utils import first_or_none
|
||||
from atat.models.permissions import Permissions
|
||||
from atat.domain.exceptions import UnauthorizedError
|
||||
from atat.models.portfolio_role import Status as PortfolioRoleStatus
|
||||
from atat.models.application_role import Status as ApplicationRoleStatus
|
||||
|
||||
|
||||
class Authorization(object):
|
@ -3,7 +3,7 @@ from functools import wraps
|
||||
from flask import g, current_app as app, request
|
||||
|
||||
from . import user_can_access
|
||||
from atst.domain.exceptions import UnauthorizedError
|
||||
from atat.domain.exceptions import UnauthorizedError
|
||||
|
||||
|
||||
def check_access(permission, message, override, *args, **kwargs):
|
@ -1,8 +1,8 @@
|
||||
from sqlalchemy.exc import DataError
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
|
||||
from atst.domain.exceptions import NotFoundError
|
||||
from atst.database import db
|
||||
from atat.domain.exceptions import NotFoundError
|
||||
from atat.database import db
|
||||
|
||||
|
||||
class Paginator(object):
|
@ -3,7 +3,7 @@ from secrets import token_hex, token_urlsafe
|
||||
from uuid import uuid4
|
||||
from flask import current_app as app
|
||||
|
||||
from atst.utils import sha256_hex
|
||||
from atat.utils import sha256_hex
|
||||
|
||||
from .cloud_provider_interface import CloudProviderInterface
|
||||
from .exceptions import (
|
@ -10,7 +10,7 @@ from .utils import (
|
||||
generate_mail_nickname,
|
||||
generate_user_principal_name,
|
||||
)
|
||||
from atst.utils import snake_to_camel
|
||||
from atat.utils import snake_to_camel
|
||||
|
||||
|
||||
class AliasModel(BaseModel):
|
@ -2,15 +2,15 @@ from sqlalchemy.orm.exc import NoResultFound
|
||||
from sqlalchemy import func, and_, or_
|
||||
from flask import current_app as app
|
||||
|
||||
from atst.database import db
|
||||
from atst.models import (
|
||||
from atat.database import db
|
||||
from atat.models import (
|
||||
Environment,
|
||||
EnvironmentRole,
|
||||
Application,
|
||||
ApplicationRole,
|
||||
ApplicationRoleStatus,
|
||||
)
|
||||
from atst.domain.exceptions import NotFoundError
|
||||
from atat.domain.exceptions import NotFoundError
|
||||
from uuid import UUID
|
||||
from typing import List
|
||||
|
@ -3,16 +3,16 @@ from sqlalchemy.orm.exc import NoResultFound
|
||||
from typing import List
|
||||
from uuid import UUID
|
||||
|
||||
from atst.database import db
|
||||
from atst.models import (
|
||||
from atat.database import db
|
||||
from atat.models import (
|
||||
Environment,
|
||||
Application,
|
||||
Portfolio,
|
||||
TaskOrder,
|
||||
CLIN,
|
||||
)
|
||||
from atst.domain.environment_roles import EnvironmentRoles
|
||||
from atst.utils import commit_or_raise_already_exists_error
|
||||
from atat.domain.environment_roles import EnvironmentRoles
|
||||
from atat.utils import commit_or_raise_already_exists_error
|
||||
|
||||
from .exceptions import NotFoundError, DisabledError
|
||||
|
@ -1,10 +1,10 @@
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
import pendulum
|
||||
|
||||
from atst.database import db
|
||||
from atst.models import ApplicationInvitation, InvitationStatus, PortfolioInvitation
|
||||
from atst.domain.portfolio_roles import PortfolioRoles
|
||||
from atst.domain.application_roles import ApplicationRoles
|
||||
from atat.database import db
|
||||
from atat.models import ApplicationInvitation, InvitationStatus, PortfolioInvitation
|
||||
from atat.domain.portfolio_roles import PortfolioRoles
|
||||
from atat.domain.application_roles import ApplicationRoles
|
||||
|
||||
from .exceptions import NotFoundError
|
||||
|
@ -1,8 +1,8 @@
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
|
||||
from atst.database import db
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.models.permission_set import PermissionSet
|
||||
from atat.database import db
|
||||
from atat.models.permissions import Permissions
|
||||
from atat.models.permission_set import PermissionSet
|
||||
from .exceptions import NotFoundError
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
|
||||
from atst.database import db
|
||||
from atst.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
|
||||
from atst.models.user import User
|
||||
from atat.database import db
|
||||
from atat.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
|
||||
from atat.models.user import User
|
||||
|
||||
from .permission_sets import PermissionSets
|
||||
from .exceptions import NotFoundError
|
@ -2,13 +2,13 @@ from sqlalchemy import or_
|
||||
from typing import List
|
||||
from uuid import UUID
|
||||
|
||||
from atst.database import db
|
||||
from atst.domain.permission_sets import PermissionSets
|
||||
from atst.domain.authz import Authorization
|
||||
from atst.domain.portfolio_roles import PortfolioRoles
|
||||
from atat.database import db
|
||||
from atat.domain.permission_sets import PermissionSets
|
||||
from atat.domain.authz import Authorization
|
||||
from atat.domain.portfolio_roles import PortfolioRoles
|
||||
|
||||
from atst.domain.invitations import PortfolioInvitations
|
||||
from atst.models import (
|
||||
from atat.domain.invitations import PortfolioInvitations
|
||||
from atat.models import (
|
||||
Portfolio,
|
||||
PortfolioStateMachine,
|
||||
FSMStates,
|
@ -1,16 +1,16 @@
|
||||
from sqlalchemy import or_
|
||||
from atst.database import db
|
||||
from atst.domain.common import Query
|
||||
from atst.models.portfolio import Portfolio
|
||||
from atst.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
|
||||
from atst.models.application_role import (
|
||||
from atat.database import db
|
||||
from atat.domain.common import Query
|
||||
from atat.models.portfolio import Portfolio
|
||||
from atat.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
|
||||
from atat.models.application_role import (
|
||||
ApplicationRole,
|
||||
Status as ApplicationRoleStatus,
|
||||
)
|
||||
from atst.models.application import Application
|
||||
from atst.models.portfolio_state_machine import PortfolioStateMachine
|
||||
from atat.models.application import Application
|
||||
from atat.models.portfolio_state_machine import PortfolioStateMachine
|
||||
|
||||
# from atst.models.application import Application
|
||||
# from atat.models.application import Application
|
||||
|
||||
|
||||
class PortfolioStateMachinesQuery(Query):
|
@ -1,6 +1,6 @@
|
||||
from atst.domain.authz import Authorization
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.domain.applications import Applications
|
||||
from atat.domain.authz import Authorization
|
||||
from atat.models.permissions import Permissions
|
||||
from atat.domain.applications import Applications
|
||||
|
||||
|
||||
class ScopedResource(object):
|
@ -1,9 +1,9 @@
|
||||
from flask import current_app
|
||||
from atst.domain.csp.cloud.models import (
|
||||
from atat.domain.csp.cloud.models import (
|
||||
ReportingCSPPayload,
|
||||
CostManagementQueryCSPResult,
|
||||
)
|
||||
from atst.domain.csp.reports import prepare_azure_reporting_data
|
||||
from atat.domain.csp.reports import prepare_azure_reporting_data
|
||||
import pendulum
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
from sqlalchemy import or_
|
||||
import pendulum
|
||||
|
||||
from atst.database import db
|
||||
from atst.models.clin import CLIN
|
||||
from atst.models.task_order import TaskOrder, SORT_ORDERING
|
||||
from atat.database import db
|
||||
from atat.models.clin import CLIN
|
||||
from atat.models.task_order import TaskOrder, SORT_ORDERING
|
||||
from . import BaseDomainClass
|
||||
from atst.utils import commit_or_raise_already_exists_error
|
||||
from atat.utils import commit_or_raise_already_exists_error
|
||||
|
||||
|
||||
class TaskOrders(BaseDomainClass):
|
@ -2,8 +2,8 @@ from sqlalchemy.orm.exc import NoResultFound
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
import pendulum
|
||||
|
||||
from atst.database import db
|
||||
from atst.models import User
|
||||
from atat.database import db
|
||||
from atat.models import User
|
||||
|
||||
from .permission_sets import PermissionSets
|
||||
from .exceptions import NotFoundError, AlreadyExistsError, UnauthorizedError
|
@ -1,5 +1,5 @@
|
||||
import re
|
||||
from atst.utils.localization import translate
|
||||
from atat.utils.localization import translate
|
||||
from flask import render_template
|
||||
from jinja2 import contextfilter
|
||||
from jinja2.exceptions import TemplateNotFound
|
@ -1,8 +1,8 @@
|
||||
from .forms import BaseForm, remove_empty_string
|
||||
from wtforms.fields import StringField, TextAreaField, FieldList
|
||||
from wtforms.validators import Required, Optional, Length
|
||||
from atst.forms.validators import ListItemRequired, ListItemsUnique, Name, AlphaNumeric
|
||||
from atst.utils.localization import translate
|
||||
from atat.forms.validators import ListItemRequired, ListItemsUnique, Name, AlphaNumeric
|
||||
from atat.utils.localization import translate
|
||||
|
||||
|
||||
class EditEnvironmentForm(BaseForm):
|
@ -5,10 +5,10 @@ from wtforms import Form
|
||||
|
||||
from .member import NewForm as BaseNewMemberForm
|
||||
from .data import ENV_ROLES, ENV_ROLE_NO_ACCESS as NO_ACCESS
|
||||
from atst.forms.fields import SelectField
|
||||
from atst.domain.permission_sets import PermissionSets
|
||||
from atst.utils.localization import translate
|
||||
from atst.forms.validators import AlphaNumeric
|
||||
from atat.forms.fields import SelectField
|
||||
from atat.domain.permission_sets import PermissionSets
|
||||
from atat.utils.localization import translate
|
||||
from atat.forms.validators import AlphaNumeric
|
||||
from wtforms.validators import Length
|
||||
|
||||
|
@ -2,8 +2,8 @@ from flask_wtf import FlaskForm
|
||||
from wtforms.validators import Required, Length
|
||||
from wtforms.fields import StringField
|
||||
|
||||
from atst.forms.validators import Number
|
||||
from atst.utils.localization import translate
|
||||
from atat.forms.validators import Number
|
||||
from atat.utils.localization import translate
|
||||
|
||||
|
||||
class CCPOUserForm(FlaskForm):
|
@ -1,5 +1,5 @@
|
||||
from atst.models import CSPRole
|
||||
from atst.utils.localization import translate
|
||||
from atat.models import CSPRole
|
||||
from atat.utils.localization import translate
|
||||
|
||||
|
||||
SERVICE_BRANCHES = [
|
@ -7,10 +7,10 @@ from wtforms.validators import Email, DataRequired, Optional
|
||||
from .fields import SelectField
|
||||
from .forms import BaseForm
|
||||
from .data import SERVICE_BRANCHES
|
||||
from atst.models.user import User
|
||||
from atst.utils.localization import translate
|
||||
from atat.models.user import User
|
||||
from atat.utils.localization import translate
|
||||
from wtforms.validators import Length
|
||||
from atst.forms.validators import Number
|
||||
from atat.forms.validators import Number
|
||||
|
||||
from .validators import Name, DateRange, PhoneNumber
|
||||
|
@ -2,7 +2,7 @@ from flask_wtf import FlaskForm
|
||||
from flask import current_app, request as http_request
|
||||
import re
|
||||
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
from atat.utils.flash import formatted_flash as flash
|
||||
|
||||
EMPTY_LIST_FIELD = ["", None]
|
||||
|
@ -3,8 +3,8 @@ from wtforms.fields.html5 import EmailField, TelField
|
||||
from wtforms.validators import Required, Email, Length, Optional
|
||||
from wtforms.fields import StringField
|
||||
|
||||
from atst.forms.validators import Number, PhoneNumber, Name
|
||||
from atst.utils.localization import translate
|
||||
from atat.forms.validators import Number, PhoneNumber, Name
|
||||
from atat.utils.localization import translate
|
||||
|
||||
|
||||
class NewForm(FlaskForm):
|
@ -4,11 +4,11 @@ from wtforms.fields import (
|
||||
TextAreaField,
|
||||
)
|
||||
from wtforms.validators import Length, InputRequired
|
||||
from atst.forms.validators import Name
|
||||
from atat.forms.validators import Name
|
||||
from wtforms.widgets import ListWidget, CheckboxInput
|
||||
|
||||
from .forms import BaseForm
|
||||
from atst.utils.localization import translate
|
||||
from atat.utils.localization import translate
|
||||
|
||||
from .data import SERVICE_BRANCHES
|
||||
|
@ -3,9 +3,9 @@ from wtforms.fields import BooleanField, FormField
|
||||
|
||||
from .forms import BaseForm
|
||||
from .member import NewForm as BaseNewMemberForm
|
||||
from atst.domain.permission_sets import PermissionSets
|
||||
from atst.forms.fields import SelectField
|
||||
from atst.utils.localization import translate
|
||||
from atat.domain.permission_sets import PermissionSets
|
||||
from atat.forms.fields import SelectField
|
||||
from atat.utils.localization import translate
|
||||
|
||||
|
||||
class PermissionsForm(BaseForm):
|
@ -17,12 +17,12 @@ from wtforms.validators import (
|
||||
from flask_wtf import FlaskForm
|
||||
import numbers
|
||||
|
||||
from atst.forms.validators import Number, AlphaNumeric
|
||||
from atat.forms.validators import Number, AlphaNumeric
|
||||
|
||||
from .data import JEDI_CLIN_TYPES
|
||||
from .fields import SelectField
|
||||
from .forms import BaseForm, remove_empty_string
|
||||
from atst.utils.localization import translate
|
||||
from atat.utils.localization import translate
|
||||
from flask import current_app as app
|
||||
|
||||
MAX_CLIN_AMOUNT = 1_000_000_000
|
@ -5,7 +5,7 @@ from werkzeug.datastructures import FileStorage
|
||||
from wtforms.validators import ValidationError, Regexp
|
||||
import pendulum
|
||||
|
||||
from atst.utils.localization import translate
|
||||
from atat.utils.localization import translate
|
||||
|
||||
|
||||
def DateRange(lower_bound=None, upper_bound=None, message=None):
|
@ -3,28 +3,28 @@ from flask import current_app as app
|
||||
from smtplib import SMTPException
|
||||
from azure.core.exceptions import AzureError
|
||||
|
||||
from atst.database import db
|
||||
from atst.domain.application_roles import ApplicationRoles
|
||||
from atst.domain.applications import Applications
|
||||
from atst.domain.csp.cloud import CloudProviderInterface
|
||||
from atst.domain.csp.cloud.utils import generate_user_principal_name
|
||||
from atst.domain.csp.cloud.exceptions import GeneralCSPException
|
||||
from atst.domain.csp.cloud.models import (
|
||||
from atat.database import db
|
||||
from atat.domain.application_roles import ApplicationRoles
|
||||
from atat.domain.applications import Applications
|
||||
from atat.domain.csp.cloud import CloudProviderInterface
|
||||
from atat.domain.csp.cloud.utils import generate_user_principal_name
|
||||
from atat.domain.csp.cloud.exceptions import GeneralCSPException
|
||||
from atat.domain.csp.cloud.models import (
|
||||
ApplicationCSPPayload,
|
||||
BillingInstructionCSPPayload,
|
||||
EnvironmentCSPPayload,
|
||||
UserCSPPayload,
|
||||
UserRoleCSPPayload,
|
||||
)
|
||||
from atst.domain.environments import Environments
|
||||
from atst.domain.environment_roles import EnvironmentRoles
|
||||
from atst.domain.portfolios import Portfolios
|
||||
from atst.models import CSPRole, JobFailure
|
||||
from atst.models.mixins.state_machines import FSMStates
|
||||
from atst.domain.task_orders import TaskOrders
|
||||
from atst.models.utils import claim_for_update, claim_many_for_update
|
||||
from atst.queue import celery
|
||||
from atst.utils.localization import translate
|
||||
from atat.domain.environments import Environments
|
||||
from atat.domain.environment_roles import EnvironmentRoles
|
||||
from atat.domain.portfolios import Portfolios
|
||||
from atat.models import CSPRole, JobFailure
|
||||
from atat.models.mixins.state_machines import FSMStates
|
||||
from atat.domain.task_orders import TaskOrders
|
||||
from atat.models.utils import claim_for_update, claim_many_for_update
|
||||
from atat.queue import celery
|
||||
from atat.utils.localization import translate
|
||||
|
||||
|
||||
class RecordFailure(celery.Task):
|
@ -1,11 +1,11 @@
|
||||
from sqlalchemy import and_, Column, ForeignKey, String, UniqueConstraint
|
||||
from sqlalchemy.orm import relationship, synonym
|
||||
|
||||
from atst.models.base import Base
|
||||
from atst.models.application_role import ApplicationRole
|
||||
from atst.models.environment import Environment
|
||||
from atst.models import mixins
|
||||
from atst.models.types import Id
|
||||
from atat.models.base import Base
|
||||
from atat.models.application_role import ApplicationRole
|
||||
from atat.models.environment import Environment
|
||||
from atat.models import mixins
|
||||
from atat.models.types import Id
|
||||
|
||||
|
||||
class Application(
|
@ -2,8 +2,8 @@ from sqlalchemy import Column, ForeignKey
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import relationship, backref
|
||||
|
||||
from atst.models.base import Base
|
||||
import atst.models.mixins as mixins
|
||||
from atat.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
|
||||
|
||||
class ApplicationInvitation(
|
@ -4,11 +4,11 @@ from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.event import listen
|
||||
|
||||
from atst.utils import first_or_none
|
||||
from atst.models.base import Base
|
||||
import atst.models.mixins as mixins
|
||||
import atst.models.types as types
|
||||
from atst.models.mixins.auditable import record_permission_sets_updates
|
||||
from atat.utils import first_or_none
|
||||
from atat.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
import atat.models.types as types
|
||||
from atat.models.mixins.auditable import record_permission_sets_updates
|
||||
|
||||
|
||||
class Status(Enum):
|
@ -2,11 +2,11 @@ from sqlalchemy import Column, String
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
|
||||
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.domain.exceptions import NotFoundError
|
||||
from atat.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
import atat.models.types as types
|
||||
from atat.database import db
|
||||
from atat.domain.exceptions import NotFoundError
|
||||
|
||||
|
||||
class AttachmentError(Exception):
|
@ -2,9 +2,9 @@ from sqlalchemy import String, Column, ForeignKey, inspect
|
||||
from sqlalchemy.dialects.postgresql import UUID, JSONB
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from atst.models.base import Base
|
||||
import atst.models.types as types
|
||||
from atst.models.mixins.timestamps import TimestampsMixin
|
||||
from atat.models.base import Base
|
||||
import atat.models.types as types
|
||||
from atat.models.mixins.timestamps import TimestampsMixin
|
||||
|
||||
|
||||
class AuditEvent(Base, TimestampsMixin):
|
@ -11,9 +11,9 @@ from sqlalchemy import (
|
||||
from sqlalchemy.orm import relationship
|
||||
import pendulum
|
||||
|
||||
from atst.models.base import Base
|
||||
import atst.models.mixins as mixins
|
||||
import atst.models.types as types
|
||||
from atat.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
import atat.models.types as types
|
||||
|
||||
|
||||
class JEDICLINType(Enum):
|
@ -1,9 +1,9 @@
|
||||
from sqlalchemy import Column, ForeignKey, String, UniqueConstraint
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
import atst.models.mixins as mixins
|
||||
import atst.models.types as types
|
||||
from atst.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
import atat.models.types as types
|
||||
from atat.models.base import Base
|
||||
|
||||
|
||||
class Environment(
|
@ -3,9 +3,9 @@ from sqlalchemy import Index, ForeignKey, Column, String, Enum as SQLAEnum
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from atst.models.base import Base
|
||||
import atst.models.mixins as mixins
|
||||
import atst.models.types as types
|
||||
from atat.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
import atat.models.types as types
|
||||
|
||||
|
||||
class CSPRole(Enum):
|
@ -1,8 +1,8 @@
|
||||
from celery.result import AsyncResult
|
||||
from sqlalchemy import Column, String, Integer
|
||||
|
||||
from atst.models.base import Base
|
||||
import atst.models.mixins as mixins
|
||||
from atat.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
|
||||
|
||||
class JobFailure(Base, mixins.TimestampsMixin):
|
@ -1,8 +1,8 @@
|
||||
from sqlalchemy import event, inspect
|
||||
from flask import g, current_app as app
|
||||
|
||||
from atst.models.audit_event import AuditEvent
|
||||
from atst.utils import camel_to_snake, getattr_path
|
||||
from atat.models.audit_event import AuditEvent
|
||||
from atat.utils import camel_to_snake, getattr_path
|
||||
|
||||
ACTION_CREATE = "create"
|
||||
ACTION_UPDATE = "update"
|
@ -7,7 +7,7 @@ from sqlalchemy.ext.declarative import declared_attr
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from atst.models import types
|
||||
from atat.models import types
|
||||
|
||||
|
||||
class Status(Enum):
|
@ -1,8 +1,8 @@
|
||||
from sqlalchemy import String, Column
|
||||
|
||||
from atst.models.base import Base
|
||||
import atst.models.types as types
|
||||
import atst.models.mixins as mixins
|
||||
from atat.models.base import Base
|
||||
import atat.models.types as types
|
||||
import atat.models.mixins as mixins
|
||||
|
||||
|
||||
class NotificationRecipient(Base, mixins.TimestampsMixin):
|
@ -1,9 +1,9 @@
|
||||
from sqlalchemy import String, Column
|
||||
from sqlalchemy.dialects.postgresql import ARRAY
|
||||
|
||||
from atst.models.base import Base
|
||||
import atst.models.mixins as mixins
|
||||
import atst.models.types as types
|
||||
from atat.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
import atat.models.types as types
|
||||
|
||||
|
||||
class PermissionSet(Base, mixins.TimestampsMixin):
|
@ -7,14 +7,14 @@ from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.types import ARRAY
|
||||
from sqlalchemy_json import NestedMutableJson
|
||||
|
||||
from atst.database import db
|
||||
import atst.models.mixins as mixins
|
||||
import atst.models.types as types
|
||||
from atst.domain.csp.cloud.utils import generate_mail_nickname
|
||||
from atst.domain.permission_sets import PermissionSets
|
||||
from atst.models.base import Base
|
||||
from atst.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
|
||||
from atst.utils import first_or_none
|
||||
from atat.database import db
|
||||
import atat.models.mixins as mixins
|
||||
import atat.models.types as types
|
||||
from atat.domain.csp.cloud.utils import generate_mail_nickname
|
||||
from atat.domain.permission_sets import PermissionSets
|
||||
from atat.models.base import Base
|
||||
from atat.models.portfolio_role import PortfolioRole, Status as PortfolioRoleStatus
|
||||
from atat.utils import first_or_none
|
||||
|
||||
|
||||
class Portfolio(
|
@ -2,8 +2,8 @@ from sqlalchemy import Column, ForeignKey
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import relationship, backref
|
||||
|
||||
from atst.models.base import Base
|
||||
import atst.models.mixins as mixins
|
||||
from atat.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
|
||||
|
||||
class PortfolioInvitation(
|
@ -4,12 +4,12 @@ from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.event import listen
|
||||
|
||||
from atst.models.base import Base
|
||||
import atst.models.types as types
|
||||
import atst.models.mixins as mixins
|
||||
from atat.models.base import Base
|
||||
import atat.models.types as types
|
||||
import atat.models.mixins as mixins
|
||||
|
||||
from atst.utils import first_or_none
|
||||
from atst.models.mixins.auditable import record_permission_sets_updates
|
||||
from atat.utils import first_or_none
|
||||
from atat.models.mixins.auditable import record_permission_sets_updates
|
||||
|
||||
|
||||
class Status(Enum):
|
@ -10,12 +10,12 @@ from transitions.extensions.states import add_state_features, Tags
|
||||
|
||||
from flask import current_app as app
|
||||
|
||||
from atst.domain.csp.cloud.exceptions import ConnectionException, UnknownServerException
|
||||
from atst.database import db
|
||||
from atst.models.types import Id
|
||||
from atst.models.base import Base
|
||||
import atst.models.mixins as mixins
|
||||
from atst.models.mixins.state_machines import (
|
||||
from atat.domain.csp.cloud.exceptions import ConnectionException, UnknownServerException
|
||||
from atat.database import db
|
||||
from atat.models.types import Id
|
||||
from atat.models.base import Base
|
||||
import atat.models.mixins as mixins
|
||||
from atat.models.mixins.state_machines import (
|
||||
FSMStates,
|
||||
AzureStages,
|
||||
StageStates,
|
||||
@ -49,7 +49,7 @@ def get_stage_csp_class(stage, class_type):
|
||||
cls_name = f"{_stage_to_classname(stage)}CSP{class_type.capitalize()}"
|
||||
try:
|
||||
return getattr(
|
||||
importlib.import_module("atst.domain.csp.cloud.models"), cls_name
|
||||
importlib.import_module("atat.domain.csp.cloud.models"), cls_name
|
||||
)
|
||||
except AttributeError:
|
||||
raise StateMachineMisconfiguredError(
|
@ -3,11 +3,11 @@ from enum import Enum
|
||||
from sqlalchemy import Column, DateTime, ForeignKey, String
|
||||
from sqlalchemy.ext.hybrid import hybrid_property
|
||||
from sqlalchemy.orm import relationship
|
||||
from atst.models.clin import CLIN
|
||||
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 atat.models.clin import CLIN
|
||||
from atat.models.base import Base
|
||||
import atat.models.types as types
|
||||
import atat.models.mixins as mixins
|
||||
from atat.models.attachment import Attachment
|
||||
from pendulum import today
|
||||
from sqlalchemy import func
|
||||
|
@ -3,12 +3,12 @@ from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.event import listen
|
||||
|
||||
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.application_invitation import ApplicationInvitation
|
||||
from atst.models.mixins.auditable import (
|
||||
from atat.models.base import Base
|
||||
import atat.models.types as types
|
||||
import atat.models.mixins as mixins
|
||||
from atat.models.portfolio_invitation import PortfolioInvitation
|
||||
from atat.models.application_invitation import ApplicationInvitation
|
||||
from atat.models.mixins.auditable import (
|
||||
AuditableMixin,
|
||||
ACTION_UPDATE,
|
||||
record_permission_sets_updates,
|
@ -3,8 +3,8 @@ from typing import List
|
||||
from sqlalchemy import func, sql, Interval, and_, or_
|
||||
from contextlib import contextmanager
|
||||
|
||||
from atst.database import db
|
||||
from atst.domain.exceptions import ClaimFailedException
|
||||
from atat.database import db
|
||||
from atat.domain.exceptions import ClaimFailedException
|
||||
|
||||
|
||||
@contextmanager
|
@ -8,31 +8,31 @@ def update_celery(celery, app):
|
||||
celery.conf.update(app.config)
|
||||
celery.conf.CELERYBEAT_SCHEDULE = {
|
||||
"beat-dispatch_provision_portfolio": {
|
||||
"task": "atst.jobs.dispatch_provision_portfolio",
|
||||
"task": "atat.jobs.dispatch_provision_portfolio",
|
||||
"schedule": 60,
|
||||
},
|
||||
"beat-dispatch_create_application": {
|
||||
"task": "atst.jobs.dispatch_create_application",
|
||||
"task": "atat.jobs.dispatch_create_application",
|
||||
"schedule": 60,
|
||||
},
|
||||
"beat-dispatch_create_environment": {
|
||||
"task": "atst.jobs.dispatch_create_environment",
|
||||
"task": "atat.jobs.dispatch_create_environment",
|
||||
"schedule": 60,
|
||||
},
|
||||
"beat-dispatch_create_user": {
|
||||
"task": "atst.jobs.dispatch_create_user",
|
||||
"task": "atat.jobs.dispatch_create_user",
|
||||
"schedule": 60,
|
||||
},
|
||||
"beat-dispatch_create_environment_role": {
|
||||
"task": "atst.jobs.dispatch_create_environment_role",
|
||||
"task": "atat.jobs.dispatch_create_environment_role",
|
||||
"schedule": 60,
|
||||
},
|
||||
"beat-send_task_order_files": {
|
||||
"task": "atst.jobs.send_task_order_files",
|
||||
"task": "atat.jobs.send_task_order_files",
|
||||
"schedule": 60,
|
||||
},
|
||||
"beat-create_billing_instruction": {
|
||||
"task": "atst.jobs.create_billing_instruction",
|
||||
"task": "atat.jobs.create_billing_instruction",
|
||||
"schedule": 60,
|
||||
},
|
||||
}
|
@ -18,14 +18,14 @@ from werkzeug.exceptions import NotFound, MethodNotAllowed
|
||||
from werkzeug.routing import RequestRedirect
|
||||
|
||||
|
||||
from atst.domain.users import Users
|
||||
from atst.domain.authnid import AuthenticationContext
|
||||
from atst.domain.auth import logout as _logout
|
||||
from atst.domain.exceptions import UnauthenticatedError
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
from atat.domain.users import Users
|
||||
from atat.domain.authnid import AuthenticationContext
|
||||
from atat.domain.auth import logout as _logout
|
||||
from atat.domain.exceptions import UnauthenticatedError
|
||||
from atat.utils.flash import formatted_flash as flash
|
||||
|
||||
|
||||
bp = Blueprint("atst", __name__)
|
||||
bp = Blueprint("atat", __name__)
|
||||
|
||||
|
||||
@bp.route("/")
|
||||
@ -70,7 +70,7 @@ def redirect_after_login_url():
|
||||
returl += "?" + url.urlencode({app.form_cache.PARAM_NAME: param_name})
|
||||
return returl
|
||||
else:
|
||||
return url_for("atst.home")
|
||||
return url_for("atat.home")
|
||||
|
||||
|
||||
def match_url_pattern(url, method="GET"):
|
@ -5,10 +5,10 @@ from . import new
|
||||
from . import settings
|
||||
from . import invitations
|
||||
from .blueprint import applications_bp
|
||||
from atst.domain.environment_roles import EnvironmentRoles
|
||||
from atst.domain.exceptions import UnauthorizedError
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.models.permissions import Permissions
|
||||
from atat.domain.environment_roles import EnvironmentRoles
|
||||
from atat.domain.exceptions import UnauthorizedError
|
||||
from atat.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atat.models.permissions import Permissions
|
||||
|
||||
|
||||
def wrap_environment_role_lookup(user, environment_id=None, **kwargs):
|
@ -1,6 +1,6 @@
|
||||
from flask import Blueprint
|
||||
|
||||
from atst.utils.context_processors import portfolio as portfolio_context_processor
|
||||
from atat.utils.context_processors import portfolio as portfolio_context_processor
|
||||
|
||||
applications_bp = Blueprint("applications", __name__)
|
||||
applications_bp.context_processor(portfolio_context_processor)
|
@ -1,9 +1,9 @@
|
||||
from flask import render_template, g
|
||||
|
||||
from .blueprint import applications_bp
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.domain.environment_roles import EnvironmentRoles
|
||||
from atst.models.permissions import Permissions
|
||||
from atat.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atat.domain.environment_roles import EnvironmentRoles
|
||||
from atat.models.permissions import Permissions
|
||||
|
||||
|
||||
def has_portfolio_applications(_user, portfolio=None, **_kwargs):
|
@ -1,7 +1,7 @@
|
||||
from flask import redirect, url_for, g
|
||||
|
||||
from .blueprint import applications_bp
|
||||
from atst.domain.invitations import ApplicationInvitations
|
||||
from atat.domain.invitations import ApplicationInvitations
|
||||
|
||||
|
||||
@applications_bp.route("/applications/invitations/<token>", methods=["GET"])
|
@ -1,12 +1,12 @@
|
||||
from flask import redirect, render_template, request as http_request, url_for
|
||||
|
||||
from .blueprint import applications_bp
|
||||
from atst.domain.applications import Applications
|
||||
from atst.forms.application import NameAndDescriptionForm, EnvironmentsForm
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
from atst.routes.applications.settings import (
|
||||
from atat.domain.applications import Applications
|
||||
from atat.forms.application import NameAndDescriptionForm, EnvironmentsForm
|
||||
from atat.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atat.models.permissions import Permissions
|
||||
from atat.utils.flash import formatted_flash as flash
|
||||
from atat.routes.applications.settings import (
|
||||
get_members_data,
|
||||
get_new_member_form,
|
||||
handle_create_member,
|
@ -9,29 +9,29 @@ from flask import (
|
||||
from secrets import token_urlsafe
|
||||
|
||||
from .blueprint import applications_bp
|
||||
from atst.domain.exceptions import AlreadyExistsError
|
||||
from atst.domain.environments import Environments
|
||||
from atst.domain.applications import Applications
|
||||
from atst.domain.application_roles import ApplicationRoles
|
||||
from atst.domain.audit_log import AuditLog
|
||||
from atst.domain.csp.cloud.exceptions import GeneralCSPException
|
||||
from atat.domain.exceptions import AlreadyExistsError
|
||||
from atat.domain.environments import Environments
|
||||
from atat.domain.applications import Applications
|
||||
from atat.domain.application_roles import ApplicationRoles
|
||||
from atat.domain.audit_log import AuditLog
|
||||
from atat.domain.csp.cloud.exceptions import GeneralCSPException
|
||||
|
||||
from atst.domain.csp.cloud.models import SubscriptionCreationCSPPayload
|
||||
from atst.domain.common import Paginator
|
||||
from atst.domain.environment_roles import EnvironmentRoles
|
||||
from atst.domain.invitations import ApplicationInvitations
|
||||
from atst.domain.portfolios import Portfolios
|
||||
from atst.forms.application_member import NewForm as NewMemberForm, UpdateMemberForm
|
||||
from atst.forms.application import NameAndDescriptionForm, EditEnvironmentForm
|
||||
from atst.forms.data import ENV_ROLE_NO_ACCESS as NO_ACCESS
|
||||
from atst.forms.member import NewForm as MemberForm
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.domain.permission_sets import PermissionSets
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
from atst.utils.localization import translate
|
||||
from atst.jobs import send_mail
|
||||
from atst.routes.errors import log_error
|
||||
from atat.domain.csp.cloud.models import SubscriptionCreationCSPPayload
|
||||
from atat.domain.common import Paginator
|
||||
from atat.domain.environment_roles import EnvironmentRoles
|
||||
from atat.domain.invitations import ApplicationInvitations
|
||||
from atat.domain.portfolios import Portfolios
|
||||
from atat.forms.application_member import NewForm as NewMemberForm, UpdateMemberForm
|
||||
from atat.forms.application import NameAndDescriptionForm, EditEnvironmentForm
|
||||
from atat.forms.data import ENV_ROLE_NO_ACCESS as NO_ACCESS
|
||||
from atat.forms.member import NewForm as MemberForm
|
||||
from atat.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atat.models.permissions import Permissions
|
||||
from atat.domain.permission_sets import PermissionSets
|
||||
from atat.utils.flash import formatted_flash as flash
|
||||
from atat.utils.localization import translate
|
||||
from atat.jobs import send_mail
|
||||
from atat.routes.errors import log_error
|
||||
|
||||
|
||||
def get_environments_obj_for_app(application):
|
@ -6,15 +6,15 @@ from flask import (
|
||||
request,
|
||||
current_app as app,
|
||||
)
|
||||
from atst.domain.users import Users
|
||||
from atst.domain.audit_log import AuditLog
|
||||
from atst.domain.common import Paginator
|
||||
from atst.domain.exceptions import NotFoundError
|
||||
from atst.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atst.forms.ccpo_user import CCPOUserForm
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.utils.context_processors import atat as atat_context_processor
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
from atat.domain.users import Users
|
||||
from atat.domain.audit_log import AuditLog
|
||||
from atat.domain.common import Paginator
|
||||
from atat.domain.exceptions import NotFoundError
|
||||
from atat.domain.authz.decorator import user_can_access_decorator as user_can
|
||||
from atat.forms.ccpo_user import CCPOUserForm
|
||||
from atat.models.permissions import Permissions
|
||||
from atat.utils.context_processors import atat as atat_context_processor
|
||||
from atat.utils.flash import formatted_flash as flash
|
||||
|
||||
|
||||
bp = Blueprint("ccpo", __name__)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user