diff --git a/.coveragerc b/.coveragerc index 58ca2cf6..c7eae9a7 100644 --- a/.coveragerc +++ b/.coveragerc @@ -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] diff --git a/Dockerfile b/Dockerfile index 6dd7629a..6ed6c121 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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/ diff --git a/PortfolioProvision.md b/PortfolioProvision.md index 6ea8d3cc..cef2351a 100644 --- a/PortfolioProvision.md +++ b/PortfolioProvision.md @@ -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` - - - - - - - - - - diff --git a/README.md b/README.md index d89db625..0bd592b4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ATST +# ATAT [![Build Status](https://circleci.com/gh/dod-ccpo/atst.svg?style=svg)](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. - diff --git a/alembic/env.py b/alembic/env.py index 5ea815e3..0e4e7889 100644 --- a/alembic/env.py +++ b/alembic/env.py @@ -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 diff --git a/app.py b/app.py index cd8fccfc..1ce04899 100755 --- a/app.py +++ b/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) diff --git a/atst/__init__.py b/atat/__init__.py similarity index 100% rename from atst/__init__.py rename to atat/__init__.py diff --git a/atst/app.py b/atat/app.py similarity index 90% rename from atst/app.py rename to atat/app.py index d510ff82..a21a7b21 100644 --- a/atst/app.py +++ b/atat/app.py @@ -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") diff --git a/atst/assets.py b/atat/assets.py similarity index 100% rename from atst/assets.py rename to atat/assets.py diff --git a/atst/database.py b/atat/database.py similarity index 100% rename from atst/database.py rename to atat/database.py diff --git a/atst/domain/__init__.py b/atat/domain/__init__.py similarity index 89% rename from atst/domain/__init__.py rename to atat/domain/__init__.py index 9b574efc..204e2cbf 100644 --- a/atst/domain/__init__.py +++ b/atat/domain/__init__.py @@ -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): diff --git a/atst/domain/application_roles.py b/atat/domain/application_roles.py similarity index 96% rename from atst/domain/application_roles.py rename to atat/domain/application_roles.py index 819f0758..b0875371 100644 --- a/atst/domain/application_roles.py +++ b/atat/domain/application_roles.py @@ -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 diff --git a/atst/domain/applications.py b/atat/domain/applications.py similarity index 91% rename from atst/domain/applications.py rename to atat/domain/applications.py index 8b873b02..0c3cef82 100644 --- a/atst/domain/applications.py +++ b/atat/domain/applications.py @@ -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): diff --git a/atst/domain/audit_log.py b/atat/domain/audit_log.py similarity index 95% rename from atst/domain/audit_log.py rename to atat/domain/audit_log.py index 42a996d3..dc912f85 100644 --- a/atst/domain/audit_log.py +++ b/atat/domain/audit_log.py @@ -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): diff --git a/atst/domain/auth.py b/atat/domain/auth.py similarity index 90% rename from atst/domain/auth.py rename to atat/domain/auth.py index 77c22438..d2679452 100644 --- a/atst/domain/auth.py +++ b/atat/domain/auth.py @@ -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): diff --git a/atst/domain/authnid/__init__.py b/atat/domain/authnid/__init__.py similarity index 94% rename from atst/domain/authnid/__init__.py rename to atat/domain/authnid/__init__.py index 6e43a9f7..a73c683c 100644 --- a/atst/domain/authnid/__init__.py +++ b/atat/domain/authnid/__init__.py @@ -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 diff --git a/atst/domain/authnid/crl/__init__.py b/atat/domain/authnid/crl/__init__.py similarity index 100% rename from atst/domain/authnid/crl/__init__.py rename to atat/domain/authnid/crl/__init__.py diff --git a/atst/domain/authnid/crl/util.py b/atat/domain/authnid/crl/util.py similarity index 100% rename from atst/domain/authnid/crl/util.py rename to atat/domain/authnid/crl/util.py diff --git a/atst/domain/authnid/utils.py b/atat/domain/authnid/utils.py similarity index 100% rename from atst/domain/authnid/utils.py rename to atat/domain/authnid/utils.py diff --git a/atst/domain/authz/__init__.py b/atat/domain/authz/__init__.py similarity index 89% rename from atst/domain/authz/__init__.py rename to atat/domain/authz/__init__.py index 86b12646..3a1b418a 100644 --- a/atst/domain/authz/__init__.py +++ b/atat/domain/authz/__init__.py @@ -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): diff --git a/atst/domain/authz/decorator.py b/atat/domain/authz/decorator.py similarity index 96% rename from atst/domain/authz/decorator.py rename to atat/domain/authz/decorator.py index 4cc61aa6..bc9b1e2c 100644 --- a/atst/domain/authz/decorator.py +++ b/atat/domain/authz/decorator.py @@ -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): diff --git a/atst/domain/common/__init__.py b/atat/domain/common/__init__.py similarity index 100% rename from atst/domain/common/__init__.py rename to atat/domain/common/__init__.py diff --git a/atst/domain/common/query.py b/atat/domain/common/query.py similarity index 96% rename from atst/domain/common/query.py rename to atat/domain/common/query.py index 0846387c..65cdf22b 100644 --- a/atst/domain/common/query.py +++ b/atat/domain/common/query.py @@ -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): diff --git a/atst/domain/csp/__init__.py b/atat/domain/csp/__init__.py similarity index 100% rename from atst/domain/csp/__init__.py rename to atat/domain/csp/__init__.py diff --git a/atst/domain/csp/cloud/__init__.py b/atat/domain/csp/cloud/__init__.py similarity index 100% rename from atst/domain/csp/cloud/__init__.py rename to atat/domain/csp/cloud/__init__.py diff --git a/atst/domain/csp/cloud/azure_cloud_provider.py b/atat/domain/csp/cloud/azure_cloud_provider.py similarity index 99% rename from atst/domain/csp/cloud/azure_cloud_provider.py rename to atat/domain/csp/cloud/azure_cloud_provider.py index 1ab619b2..d6b6d7ec 100644 --- a/atst/domain/csp/cloud/azure_cloud_provider.py +++ b/atat/domain/csp/cloud/azure_cloud_provider.py @@ -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 ( diff --git a/atst/domain/csp/cloud/cloud_provider_interface.py b/atat/domain/csp/cloud/cloud_provider_interface.py similarity index 100% rename from atst/domain/csp/cloud/cloud_provider_interface.py rename to atat/domain/csp/cloud/cloud_provider_interface.py diff --git a/atst/domain/csp/cloud/exceptions.py b/atat/domain/csp/cloud/exceptions.py similarity index 100% rename from atst/domain/csp/cloud/exceptions.py rename to atat/domain/csp/cloud/exceptions.py diff --git a/atst/domain/csp/cloud/mock_cloud_provider.py b/atat/domain/csp/cloud/mock_cloud_provider.py similarity index 100% rename from atst/domain/csp/cloud/mock_cloud_provider.py rename to atat/domain/csp/cloud/mock_cloud_provider.py diff --git a/atst/domain/csp/cloud/models.py b/atat/domain/csp/cloud/models.py similarity index 99% rename from atst/domain/csp/cloud/models.py rename to atat/domain/csp/cloud/models.py index 4a80084b..21c70f43 100644 --- a/atst/domain/csp/cloud/models.py +++ b/atat/domain/csp/cloud/models.py @@ -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): diff --git a/atst/domain/csp/cloud/policy.py b/atat/domain/csp/cloud/policy.py similarity index 100% rename from atst/domain/csp/cloud/policy.py rename to atat/domain/csp/cloud/policy.py diff --git a/atst/domain/csp/cloud/utils.py b/atat/domain/csp/cloud/utils.py similarity index 100% rename from atst/domain/csp/cloud/utils.py rename to atat/domain/csp/cloud/utils.py diff --git a/atst/domain/csp/files.py b/atat/domain/csp/files.py similarity index 100% rename from atst/domain/csp/files.py rename to atat/domain/csp/files.py diff --git a/atst/domain/csp/reports.py b/atat/domain/csp/reports.py similarity index 100% rename from atst/domain/csp/reports.py rename to atat/domain/csp/reports.py diff --git a/atst/domain/environment_roles.py b/atat/domain/environment_roles.py similarity index 97% rename from atst/domain/environment_roles.py rename to atat/domain/environment_roles.py index d89b4d78..c5ba6188 100644 --- a/atst/domain/environment_roles.py +++ b/atat/domain/environment_roles.py @@ -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 diff --git a/atst/domain/environments.py b/atat/domain/environments.py similarity index 95% rename from atst/domain/environments.py rename to atat/domain/environments.py index 42e5815c..3741b38a 100644 --- a/atst/domain/environments.py +++ b/atat/domain/environments.py @@ -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 diff --git a/atst/domain/exceptions.py b/atat/domain/exceptions.py similarity index 100% rename from atst/domain/exceptions.py rename to atat/domain/exceptions.py diff --git a/atst/domain/invitations.py b/atat/domain/invitations.py similarity index 95% rename from atst/domain/invitations.py rename to atat/domain/invitations.py index f6bfeacb..fdc9e46c 100644 --- a/atst/domain/invitations.py +++ b/atat/domain/invitations.py @@ -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 diff --git a/atst/domain/permission_sets.py b/atat/domain/permission_sets.py similarity index 98% rename from atst/domain/permission_sets.py rename to atat/domain/permission_sets.py index 8d110dc3..5e282875 100644 --- a/atst/domain/permission_sets.py +++ b/atat/domain/permission_sets.py @@ -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 diff --git a/atst/domain/portfolio_roles.py b/atat/domain/portfolio_roles.py similarity index 97% rename from atst/domain/portfolio_roles.py rename to atat/domain/portfolio_roles.py index 5c9cccbc..0f29bcb3 100644 --- a/atst/domain/portfolio_roles.py +++ b/atat/domain/portfolio_roles.py @@ -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 diff --git a/atst/domain/portfolios/__init__.py b/atat/domain/portfolios/__init__.py similarity index 100% rename from atst/domain/portfolios/__init__.py rename to atat/domain/portfolios/__init__.py diff --git a/atst/domain/portfolios/portfolios.py b/atat/domain/portfolios/portfolios.py similarity index 94% rename from atst/domain/portfolios/portfolios.py rename to atat/domain/portfolios/portfolios.py index b8663730..4ce40127 100644 --- a/atst/domain/portfolios/portfolios.py +++ b/atat/domain/portfolios/portfolios.py @@ -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, diff --git a/atst/domain/portfolios/query.py b/atat/domain/portfolios/query.py similarity index 84% rename from atst/domain/portfolios/query.py rename to atat/domain/portfolios/query.py index 0fa8f5ac..808400b8 100644 --- a/atst/domain/portfolios/query.py +++ b/atat/domain/portfolios/query.py @@ -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): diff --git a/atst/domain/portfolios/scopes.py b/atat/domain/portfolios/scopes.py similarity index 88% rename from atst/domain/portfolios/scopes.py rename to atat/domain/portfolios/scopes.py index 2d5ebd17..9fb45eb1 100644 --- a/atst/domain/portfolios/scopes.py +++ b/atat/domain/portfolios/scopes.py @@ -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): diff --git a/atst/domain/reports.py b/atat/domain/reports.py similarity index 90% rename from atst/domain/reports.py rename to atat/domain/reports.py index fc619649..9d00e1af 100644 --- a/atst/domain/reports.py +++ b/atat/domain/reports.py @@ -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 diff --git a/atst/domain/task_orders.py b/atat/domain/task_orders.py similarity index 94% rename from atst/domain/task_orders.py rename to atat/domain/task_orders.py index 7a538c2d..4b0c36b0 100644 --- a/atst/domain/task_orders.py +++ b/atat/domain/task_orders.py @@ -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): diff --git a/atst/domain/users.py b/atat/domain/users.py similarity index 98% rename from atst/domain/users.py rename to atat/domain/users.py index 6ad61cde..1e12b8ad 100644 --- a/atst/domain/users.py +++ b/atat/domain/users.py @@ -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 diff --git a/atst/filters.py b/atat/filters.py similarity index 98% rename from atst/filters.py rename to atat/filters.py index 0eb93d2b..29f70f33 100644 --- a/atst/filters.py +++ b/atat/filters.py @@ -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 diff --git a/atst/forms/application.py b/atat/forms/application.py similarity index 93% rename from atst/forms/application.py rename to atat/forms/application.py index 3fda8f8f..61e837ed 100644 --- a/atst/forms/application.py +++ b/atat/forms/application.py @@ -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): diff --git a/atst/forms/application_member.py b/atat/forms/application_member.py similarity index 91% rename from atst/forms/application_member.py rename to atat/forms/application_member.py index a1a4f704..b8d2e6ea 100644 --- a/atst/forms/application_member.py +++ b/atat/forms/application_member.py @@ -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 diff --git a/atst/forms/ccpo_user.py b/atat/forms/ccpo_user.py similarity index 77% rename from atst/forms/ccpo_user.py rename to atat/forms/ccpo_user.py index 7fafb88c..b4ad336c 100644 --- a/atst/forms/ccpo_user.py +++ b/atat/forms/ccpo_user.py @@ -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): diff --git a/atst/forms/data.py b/atat/forms/data.py similarity index 93% rename from atst/forms/data.py rename to atat/forms/data.py index ea2c1c8a..32e7c619 100644 --- a/atst/forms/data.py +++ b/atat/forms/data.py @@ -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 = [ diff --git a/atst/forms/edit_user.py b/atat/forms/edit_user.py similarity index 96% rename from atst/forms/edit_user.py rename to atat/forms/edit_user.py index 9d2a8ffc..36945463 100644 --- a/atst/forms/edit_user.py +++ b/atat/forms/edit_user.py @@ -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 diff --git a/atst/forms/fields.py b/atat/forms/fields.py similarity index 100% rename from atst/forms/fields.py rename to atat/forms/fields.py diff --git a/atst/forms/forms.py b/atat/forms/forms.py similarity index 96% rename from atst/forms/forms.py rename to atat/forms/forms.py index cd63b278..3b5f8cad 100644 --- a/atst/forms/forms.py +++ b/atat/forms/forms.py @@ -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] diff --git a/atst/forms/member.py b/atat/forms/member.py similarity index 90% rename from atst/forms/member.py rename to atat/forms/member.py index 4bfb2269..a6c21b9f 100644 --- a/atst/forms/member.py +++ b/atat/forms/member.py @@ -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): diff --git a/atst/forms/portfolio.py b/atat/forms/portfolio.py similarity index 93% rename from atst/forms/portfolio.py rename to atat/forms/portfolio.py index 74f5330d..beae4cfc 100644 --- a/atst/forms/portfolio.py +++ b/atat/forms/portfolio.py @@ -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 diff --git a/atst/forms/portfolio_member.py b/atat/forms/portfolio_member.py similarity index 92% rename from atst/forms/portfolio_member.py rename to atat/forms/portfolio_member.py index 9fff59c1..94ae1547 100644 --- a/atst/forms/portfolio_member.py +++ b/atat/forms/portfolio_member.py @@ -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): diff --git a/atst/forms/task_order.py b/atat/forms/task_order.py similarity index 97% rename from atst/forms/task_order.py rename to atat/forms/task_order.py index 1bd12f5a..95a797d1 100644 --- a/atst/forms/task_order.py +++ b/atat/forms/task_order.py @@ -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 diff --git a/atst/forms/validators.py b/atat/forms/validators.py similarity index 98% rename from atst/forms/validators.py rename to atat/forms/validators.py index 1bbcd645..d5baeade 100644 --- a/atst/forms/validators.py +++ b/atat/forms/validators.py @@ -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): diff --git a/atst/jobs.py b/atat/jobs.py similarity index 93% rename from atst/jobs.py rename to atat/jobs.py index 6febf2d4..392f65ed 100644 --- a/atst/jobs.py +++ b/atat/jobs.py @@ -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): diff --git a/atst/models/__init__.py b/atat/models/__init__.py similarity index 100% rename from atst/models/__init__.py rename to atat/models/__init__.py diff --git a/atst/models/application.py b/atat/models/application.py similarity index 89% rename from atst/models/application.py rename to atat/models/application.py index c8e8caf0..44e7f7f8 100644 --- a/atst/models/application.py +++ b/atat/models/application.py @@ -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( diff --git a/atst/models/application_invitation.py b/atat/models/application_invitation.py similarity index 94% rename from atst/models/application_invitation.py rename to atat/models/application_invitation.py index 02be5e14..e3346496 100644 --- a/atst/models/application_invitation.py +++ b/atat/models/application_invitation.py @@ -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( diff --git a/atst/models/application_role.py b/atat/models/application_role.py similarity index 95% rename from atst/models/application_role.py rename to atat/models/application_role.py index 68ed8512..c9e2c87a 100644 --- a/atst/models/application_role.py +++ b/atat/models/application_role.py @@ -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): diff --git a/atst/models/attachment.py b/atat/models/attachment.py similarity index 90% rename from atst/models/attachment.py rename to atat/models/attachment.py index ca0fe103..f095ef51 100644 --- a/atst/models/attachment.py +++ b/atat/models/attachment.py @@ -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): diff --git a/atst/models/audit_event.py b/atat/models/audit_event.py similarity index 93% rename from atst/models/audit_event.py rename to atat/models/audit_event.py index bd069550..69f8292f 100644 --- a/atst/models/audit_event.py +++ b/atat/models/audit_event.py @@ -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): diff --git a/atst/models/base.py b/atat/models/base.py similarity index 100% rename from atst/models/base.py rename to atat/models/base.py diff --git a/atst/models/clin.py b/atat/models/clin.py similarity index 95% rename from atst/models/clin.py rename to atat/models/clin.py index 11e07401..573b7565 100644 --- a/atst/models/clin.py +++ b/atat/models/clin.py @@ -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): diff --git a/atst/models/environment.py b/atat/models/environment.py similarity index 95% rename from atst/models/environment.py rename to atat/models/environment.py index cc2d235f..6b53a958 100644 --- a/atst/models/environment.py +++ b/atat/models/environment.py @@ -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( diff --git a/atst/models/environment_role.py b/atat/models/environment_role.py similarity index 96% rename from atst/models/environment_role.py rename to atat/models/environment_role.py index 61338286..5fc9177a 100644 --- a/atst/models/environment_role.py +++ b/atat/models/environment_role.py @@ -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): diff --git a/atst/models/job_failure.py b/atat/models/job_failure.py similarity index 87% rename from atst/models/job_failure.py rename to atat/models/job_failure.py index 5f9eee6c..cdfecfaa 100644 --- a/atst/models/job_failure.py +++ b/atat/models/job_failure.py @@ -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): diff --git a/atst/models/mixins/__init__.py b/atat/models/mixins/__init__.py similarity index 100% rename from atst/models/mixins/__init__.py rename to atat/models/mixins/__init__.py diff --git a/atst/models/mixins/auditable.py b/atat/models/mixins/auditable.py similarity index 97% rename from atst/models/mixins/auditable.py rename to atat/models/mixins/auditable.py index 30567547..7d33f69a 100644 --- a/atst/models/mixins/auditable.py +++ b/atat/models/mixins/auditable.py @@ -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" diff --git a/atst/models/mixins/claimable.py b/atat/models/mixins/claimable.py similarity index 100% rename from atst/models/mixins/claimable.py rename to atat/models/mixins/claimable.py diff --git a/atst/models/mixins/deletable.py b/atat/models/mixins/deletable.py similarity index 100% rename from atst/models/mixins/deletable.py rename to atat/models/mixins/deletable.py diff --git a/atst/models/mixins/invites.py b/atat/models/mixins/invites.py similarity index 99% rename from atst/models/mixins/invites.py rename to atat/models/mixins/invites.py index c87917ba..93567827 100644 --- a/atst/models/mixins/invites.py +++ b/atat/models/mixins/invites.py @@ -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): diff --git a/atst/models/mixins/permissions.py b/atat/models/mixins/permissions.py similarity index 100% rename from atst/models/mixins/permissions.py rename to atat/models/mixins/permissions.py diff --git a/atst/models/mixins/state_machines.py b/atat/models/mixins/state_machines.py similarity index 100% rename from atst/models/mixins/state_machines.py rename to atat/models/mixins/state_machines.py diff --git a/atst/models/mixins/timestamps.py b/atat/models/mixins/timestamps.py similarity index 100% rename from atst/models/mixins/timestamps.py rename to atat/models/mixins/timestamps.py diff --git a/atst/models/notification_recipient.py b/atat/models/notification_recipient.py similarity index 66% rename from atst/models/notification_recipient.py rename to atat/models/notification_recipient.py index ab5a2d66..bc27c080 100644 --- a/atst/models/notification_recipient.py +++ b/atat/models/notification_recipient.py @@ -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): diff --git a/atst/models/permission_set.py b/atat/models/permission_set.py similarity index 86% rename from atst/models/permission_set.py rename to atat/models/permission_set.py index 9d07e645..6da696a5 100644 --- a/atst/models/permission_set.py +++ b/atat/models/permission_set.py @@ -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): diff --git a/atst/models/permissions.py b/atat/models/permissions.py similarity index 100% rename from atst/models/permissions.py rename to atat/models/permissions.py diff --git a/atst/models/portfolio.py b/atat/models/portfolio.py similarity index 95% rename from atst/models/portfolio.py rename to atat/models/portfolio.py index 8131d939..a83fd45c 100644 --- a/atst/models/portfolio.py +++ b/atat/models/portfolio.py @@ -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( diff --git a/atst/models/portfolio_invitation.py b/atat/models/portfolio_invitation.py similarity index 92% rename from atst/models/portfolio_invitation.py rename to atat/models/portfolio_invitation.py index 4ab9088d..cf46b037 100644 --- a/atst/models/portfolio_invitation.py +++ b/atat/models/portfolio_invitation.py @@ -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( diff --git a/atst/models/portfolio_role.py b/atat/models/portfolio_role.py similarity index 95% rename from atst/models/portfolio_role.py rename to atat/models/portfolio_role.py index 6d34dd97..228fe9d2 100644 --- a/atst/models/portfolio_role.py +++ b/atat/models/portfolio_role.py @@ -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): diff --git a/atst/models/portfolio_state_machine.py b/atat/models/portfolio_state_machine.py similarity index 96% rename from atst/models/portfolio_state_machine.py rename to atat/models/portfolio_state_machine.py index 848d2b03..511bd058 100644 --- a/atst/models/portfolio_state_machine.py +++ b/atat/models/portfolio_state_machine.py @@ -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( diff --git a/atst/models/task_order.py b/atat/models/task_order.py similarity index 96% rename from atst/models/task_order.py rename to atat/models/task_order.py index a931df9b..2656fcc5 100644 --- a/atst/models/task_order.py +++ b/atat/models/task_order.py @@ -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 diff --git a/atst/models/types.py b/atat/models/types.py similarity index 100% rename from atst/models/types.py rename to atat/models/types.py diff --git a/atst/models/user.py b/atat/models/user.py similarity index 92% rename from atst/models/user.py rename to atat/models/user.py index a45760d0..82a03a9a 100644 --- a/atst/models/user.py +++ b/atat/models/user.py @@ -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, diff --git a/atst/models/utils.py b/atat/models/utils.py similarity index 97% rename from atst/models/utils.py rename to atat/models/utils.py index 7fba3206..b0bf8a30 100644 --- a/atst/models/utils.py +++ b/atat/models/utils.py @@ -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 diff --git a/atst/queue.py b/atat/queue.py similarity index 70% rename from atst/queue.py rename to atat/queue.py index dcd123d1..7f5f5129 100644 --- a/atst/queue.py +++ b/atat/queue.py @@ -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, }, } diff --git a/atst/routes/__init__.py b/atat/routes/__init__.py similarity index 91% rename from atst/routes/__init__.py rename to atat/routes/__init__.py index 5fb7e22f..25fa3ca5 100644 --- a/atst/routes/__init__.py +++ b/atat/routes/__init__.py @@ -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"): diff --git a/atst/routes/applications/__init__.py b/atat/routes/applications/__init__.py similarity index 76% rename from atst/routes/applications/__init__.py rename to atat/routes/applications/__init__.py index c8668479..267ac97d 100644 --- a/atst/routes/applications/__init__.py +++ b/atat/routes/applications/__init__.py @@ -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): diff --git a/atst/routes/applications/blueprint.py b/atat/routes/applications/blueprint.py similarity index 72% rename from atst/routes/applications/blueprint.py rename to atat/routes/applications/blueprint.py index 24e189f5..998b2d07 100644 --- a/atst/routes/applications/blueprint.py +++ b/atat/routes/applications/blueprint.py @@ -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) diff --git a/atst/routes/applications/index.py b/atat/routes/applications/index.py similarity index 85% rename from atst/routes/applications/index.py rename to atat/routes/applications/index.py index 8b249faa..516f287b 100644 --- a/atst/routes/applications/index.py +++ b/atat/routes/applications/index.py @@ -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): diff --git a/atst/routes/applications/invitations.py b/atat/routes/applications/invitations.py similarity index 87% rename from atst/routes/applications/invitations.py rename to atat/routes/applications/invitations.py index 1fd69c12..543597ba 100644 --- a/atst/routes/applications/invitations.py +++ b/atat/routes/applications/invitations.py @@ -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/", methods=["GET"]) diff --git a/atst/routes/applications/new.py b/atat/routes/applications/new.py similarity index 94% rename from atst/routes/applications/new.py rename to atat/routes/applications/new.py index 9d673b04..a526d3d7 100644 --- a/atst/routes/applications/new.py +++ b/atat/routes/applications/new.py @@ -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, diff --git a/atst/routes/applications/settings.py b/atat/routes/applications/settings.py similarity index 93% rename from atst/routes/applications/settings.py rename to atat/routes/applications/settings.py index 524fa93a..d0569c02 100644 --- a/atst/routes/applications/settings.py +++ b/atat/routes/applications/settings.py @@ -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): diff --git a/atst/routes/ccpo.py b/atat/routes/ccpo.py similarity index 83% rename from atst/routes/ccpo.py rename to atat/routes/ccpo.py index 9e8dc155..98baa974 100644 --- a/atst/routes/ccpo.py +++ b/atat/routes/ccpo.py @@ -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__) diff --git a/atst/routes/dev.py b/atat/routes/dev.py similarity index 95% rename from atst/routes/dev.py rename to atat/routes/dev.py index 65163342..4625b14a 100644 --- a/atst/routes/dev.py +++ b/atat/routes/dev.py @@ -11,12 +11,12 @@ from flask import ( import pendulum from . import redirect_after_login_url, current_user_setup -from atst.domain.exceptions import AlreadyExistsError, NotFoundError -from atst.domain.users import Users -from atst.domain.permission_sets import PermissionSets -from atst.forms.data import SERVICE_BRANCHES -from atst.jobs import send_mail -from atst.utils import pick +from atat.domain.exceptions import AlreadyExistsError, NotFoundError +from atat.domain.users import Users +from atat.domain.permission_sets import PermissionSets +from atat.forms.data import SERVICE_BRANCHES +from atat.jobs import send_mail +from atat.utils import pick bp = Blueprint("dev", __name__) diff --git a/atst/routes/errors.py b/atat/routes/errors.py similarity index 87% rename from atst/routes/errors.py rename to atat/routes/errors.py index a4f92baf..3c506d8b 100644 --- a/atst/routes/errors.py +++ b/atat/routes/errors.py @@ -2,16 +2,16 @@ from flask import render_template, current_app, url_for, redirect, request from flask_wtf.csrf import CSRFError import werkzeug.exceptions as werkzeug_exceptions -import atst.domain.exceptions as exceptions -from atst.domain.invitations import ( +import atat.domain.exceptions as exceptions +from atat.domain.invitations import ( InvitationError, ExpiredError as InvitationExpiredError, WrongUserError as InvitationWrongUserError, ) -from atst.domain.authnid.crl import CRLInvalidException -from atst.domain.portfolios import PortfolioError -from atst.utils.flash import formatted_flash as flash -from atst.utils.localization import translate +from atat.domain.authnid.crl import CRLInvalidException +from atat.domain.portfolios import PortfolioError +from atat.utils.flash import formatted_flash as flash +from atat.utils.localization import translate NO_NOTIFY_STATUS_CODES = set([404, 401]) @@ -60,7 +60,7 @@ def make_error_pages(app): flash("session_expired") if request.method == "POST": url_args[app.form_cache.PARAM_NAME] = app.form_cache.write(request.form) - return redirect(url_for("atst.root", **url_args)) + return redirect(url_for("atat.root", **url_args)) @app.errorhandler(Exception) # pylint: disable=unused-variable diff --git a/atst/routes/portfolios/__init__.py b/atat/routes/portfolios/__init__.py similarity index 100% rename from atst/routes/portfolios/__init__.py rename to atat/routes/portfolios/__init__.py diff --git a/atst/routes/portfolios/admin.py b/atat/routes/portfolios/admin.py similarity index 90% rename from atst/routes/portfolios/admin.py rename to atat/routes/portfolios/admin.py index 4318a47c..6e53f137 100644 --- a/atst/routes/portfolios/admin.py +++ b/atat/routes/portfolios/admin.py @@ -1,20 +1,20 @@ from flask import render_template, request as http_request, g, redirect, url_for from .blueprint import portfolios_bp -from atst.domain.portfolios import Portfolios -from atst.domain.portfolio_roles import PortfolioRoles -from atst.models.portfolio_role import Status as PortfolioRoleStatus -from atst.domain.invitations import PortfolioInvitations -from atst.domain.permission_sets import PermissionSets -from atst.domain.audit_log import AuditLog -from atst.domain.common import Paginator -from atst.forms.portfolio import PortfolioForm -import atst.forms.portfolio_member as member_forms -from atst.models.permissions import Permissions -from atst.domain.authz.decorator import user_can_access_decorator as user_can -from atst.utils import first_or_none -from atst.utils.flash import formatted_flash as flash -from atst.domain.exceptions import UnauthorizedError +from atat.domain.portfolios import Portfolios +from atat.domain.portfolio_roles import PortfolioRoles +from atat.models.portfolio_role import Status as PortfolioRoleStatus +from atat.domain.invitations import PortfolioInvitations +from atat.domain.permission_sets import PermissionSets +from atat.domain.audit_log import AuditLog +from atat.domain.common import Paginator +from atat.forms.portfolio import PortfolioForm +import atat.forms.portfolio_member as member_forms +from atat.models.permissions import Permissions +from atat.domain.authz.decorator import user_can_access_decorator as user_can +from atat.utils import first_or_none +from atat.utils.flash import formatted_flash as flash +from atat.domain.exceptions import UnauthorizedError def filter_perm_sets_data(member): diff --git a/atst/routes/portfolios/blueprint.py b/atat/routes/portfolios/blueprint.py similarity index 71% rename from atst/routes/portfolios/blueprint.py rename to atat/routes/portfolios/blueprint.py index 703a2515..5bbfbd52 100644 --- a/atst/routes/portfolios/blueprint.py +++ b/atat/routes/portfolios/blueprint.py @@ -1,5 +1,5 @@ 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 portfolios_bp = Blueprint("portfolios", __name__) portfolios_bp.context_processor(portfolio_context_processor) diff --git a/atst/routes/portfolios/index.py b/atat/routes/portfolios/index.py similarity index 85% rename from atst/routes/portfolios/index.py rename to atat/routes/portfolios/index.py index 02805480..5a46b3de 100644 --- a/atst/routes/portfolios/index.py +++ b/atat/routes/portfolios/index.py @@ -2,12 +2,12 @@ import pendulum from flask import redirect, render_template, url_for, request as http_request, g from .blueprint import portfolios_bp -from atst.forms.portfolio import PortfolioCreationForm -from atst.domain.reports import Reports -from atst.domain.portfolios import Portfolios -from atst.models.permissions import Permissions -from atst.domain.authz.decorator import user_can_access_decorator as user_can -from atst.utils.flash import formatted_flash as flash +from atat.forms.portfolio import PortfolioCreationForm +from atat.domain.reports import Reports +from atat.domain.portfolios import Portfolios +from atat.models.permissions import Permissions +from atat.domain.authz.decorator import user_can_access_decorator as user_can +from atat.utils.flash import formatted_flash as flash @portfolios_bp.route("/portfolios/new") diff --git a/atst/routes/portfolios/invitations.py b/atat/routes/portfolios/invitations.py similarity index 89% rename from atst/routes/portfolios/invitations.py rename to atat/routes/portfolios/invitations.py index 80375e75..03dccf2b 100644 --- a/atst/routes/portfolios/invitations.py +++ b/atat/routes/portfolios/invitations.py @@ -1,15 +1,15 @@ from flask import g, redirect, url_for, render_template, request as http_request from .blueprint import portfolios_bp -from atst.domain.authz.decorator import user_can_access_decorator as user_can -from atst.domain.exceptions import AlreadyExistsError -from atst.domain.invitations import PortfolioInvitations -from atst.domain.portfolios import Portfolios -from atst.models import Permissions -from atst.jobs import send_mail -from atst.utils.flash import formatted_flash as flash -from atst.utils.localization import translate -import atst.forms.portfolio_member as member_forms +from atat.domain.authz.decorator import user_can_access_decorator as user_can +from atat.domain.exceptions import AlreadyExistsError +from atat.domain.invitations import PortfolioInvitations +from atat.domain.portfolios import Portfolios +from atat.models import Permissions +from atat.jobs import send_mail +from atat.utils.flash import formatted_flash as flash +from atat.utils.localization import translate +import atat.forms.portfolio_member as member_forms def send_portfolio_invitation(invitee_email, inviter_name, token): diff --git a/atst/routes/task_orders/__init__.py b/atat/routes/task_orders/__init__.py similarity index 100% rename from atst/routes/task_orders/__init__.py rename to atat/routes/task_orders/__init__.py diff --git a/atst/routes/task_orders/blueprint.py b/atat/routes/task_orders/blueprint.py similarity index 71% rename from atst/routes/task_orders/blueprint.py rename to atat/routes/task_orders/blueprint.py index 4222befd..4f8aac1f 100644 --- a/atst/routes/task_orders/blueprint.py +++ b/atat/routes/task_orders/blueprint.py @@ -1,5 +1,5 @@ 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 task_orders_bp = Blueprint("task_orders", __name__) task_orders_bp.context_processor(portfolio_context_processor) diff --git a/atst/routes/task_orders/downloads.py b/atat/routes/task_orders/downloads.py similarity index 77% rename from atst/routes/task_orders/downloads.py rename to atat/routes/task_orders/downloads.py index 8add1db2..5d1a997f 100644 --- a/atst/routes/task_orders/downloads.py +++ b/atat/routes/task_orders/downloads.py @@ -1,10 +1,10 @@ from flask import Response, current_app as app from .blueprint import task_orders_bp -from atst.domain.task_orders import TaskOrders -from atst.domain.exceptions import NotFoundError -from atst.domain.authz.decorator import user_can_access_decorator as user_can -from atst.models.permissions import Permissions +from atat.domain.task_orders import TaskOrders +from atat.domain.exceptions import NotFoundError +from atat.domain.authz.decorator import user_can_access_decorator as user_can +from atat.models.permissions import Permissions def send_file(attachment): diff --git a/atst/routes/task_orders/index.py b/atat/routes/task_orders/index.py similarity index 82% rename from atst/routes/task_orders/index.py rename to atat/routes/task_orders/index.py index 04f1baaa..00fadfde 100644 --- a/atst/routes/task_orders/index.py +++ b/atat/routes/task_orders/index.py @@ -1,11 +1,11 @@ from flask import g, render_template, url_for, redirect from .blueprint import task_orders_bp -from atst.domain.authz.decorator import user_can_access_decorator as user_can -from atst.domain.portfolios import Portfolios -from atst.domain.task_orders import TaskOrders -from atst.forms.task_order import SignatureForm -from atst.models import Permissions +from atat.domain.authz.decorator import user_can_access_decorator as user_can +from atat.domain.portfolios import Portfolios +from atat.domain.task_orders import TaskOrders +from atat.forms.task_order import SignatureForm +from atat.models import Permissions @task_orders_bp.route("/task_orders/") diff --git a/atst/routes/task_orders/new.py b/atat/routes/task_orders/new.py similarity index 96% rename from atst/routes/task_orders/new.py rename to atat/routes/task_orders/new.py index 588492b4..618acfa2 100644 --- a/atst/routes/task_orders/new.py +++ b/atat/routes/task_orders/new.py @@ -9,12 +9,12 @@ from flask import ( ) from .blueprint import task_orders_bp -from atst.domain.authz.decorator import user_can_access_decorator as user_can -from atst.domain.exceptions import NoAccessError, AlreadyExistsError -from atst.domain.task_orders import TaskOrders -from atst.forms.task_order import TaskOrderForm, SignatureForm -from atst.models.permissions import Permissions -from atst.utils.flash import formatted_flash as flash +from atat.domain.authz.decorator import user_can_access_decorator as user_can +from atat.domain.exceptions import NoAccessError, AlreadyExistsError +from atat.domain.task_orders import TaskOrders +from atat.forms.task_order import TaskOrderForm, SignatureForm +from atat.models.permissions import Permissions +from atat.utils.flash import formatted_flash as flash def render_task_orders_edit( diff --git a/atst/routes/users.py b/atat/routes/users.py similarity index 86% rename from atst/routes/users.py rename to atat/routes/users.py index b055bcb6..6b9124db 100644 --- a/atst/routes/users.py +++ b/atat/routes/users.py @@ -1,9 +1,9 @@ import pendulum from flask import Blueprint, render_template, g, request as http_request, redirect -from atst.forms.edit_user import EditUserForm -from atst.domain.users import Users -from atst.utils.flash import formatted_flash as flash -from atst.routes import match_url_pattern +from atat.forms.edit_user import EditUserForm +from atat.domain.users import Users +from atat.utils.flash import formatted_flash as flash +from atat.routes import match_url_pattern bp = Blueprint("users", __name__) diff --git a/atst/utils/__init__.py b/atat/utils/__init__.py similarity index 92% rename from atst/utils/__init__.py rename to atat/utils/__init__.py index 79d5362a..c869849d 100644 --- a/atst/utils/__init__.py +++ b/atat/utils/__init__.py @@ -3,8 +3,8 @@ import re from sqlalchemy.exc import IntegrityError -from atst.database import db -from atst.domain.exceptions import AlreadyExistsError +from atat.database import db +from atat.domain.exceptions import AlreadyExistsError def first_or_none(predicate, lst): diff --git a/atst/utils/context_processors.py b/atat/utils/context_processors.py similarity index 94% rename from atst/utils/context_processors.py rename to atat/utils/context_processors.py index 5bb4771d..036b81a4 100644 --- a/atst/utils/context_processors.py +++ b/atat/utils/context_processors.py @@ -1,11 +1,11 @@ from flask import g from sqlalchemy.orm.exc import NoResultFound -from atst.database import db -from atst.domain.authz import Authorization -from atst.domain.exceptions import NotFoundError -from atst.domain.portfolios.scopes import ScopedPortfolio -from atst.models import ( +from atat.database import db +from atat.domain.authz import Authorization +from atat.domain.exceptions import NotFoundError +from atat.domain.portfolios.scopes import ScopedPortfolio +from atat.models import ( Application, Environment, Permissions, diff --git a/atst/utils/flash.py b/atat/utils/flash.py similarity index 99% rename from atst/utils/flash.py rename to atat/utils/flash.py index b7ca0cb9..c5ec2168 100644 --- a/atst/utils/flash.py +++ b/atat/utils/flash.py @@ -1,5 +1,5 @@ from flask import flash -from atst.utils.localization import translate +from atat.utils.localization import translate MESSAGES = { diff --git a/atst/utils/form_cache.py b/atat/utils/form_cache.py similarity index 100% rename from atst/utils/form_cache.py rename to atat/utils/form_cache.py diff --git a/atst/utils/json.py b/atat/utils/json.py similarity index 93% rename from atst/utils/json.py rename to atat/utils/json.py index 9e34e10e..ff70075d 100644 --- a/atst/utils/json.py +++ b/atat/utils/json.py @@ -4,7 +4,7 @@ from werkzeug.datastructures import FileStorage from datetime import date from enum import Enum -from atst.models.attachment import Attachment +from atat.models.attachment import Attachment class CustomJSONEncoder(JSONEncoder): diff --git a/atst/utils/localization.py b/atat/utils/localization.py similarity index 97% rename from atst/utils/localization.py rename to atat/utils/localization.py index 9cca0b09..797563e5 100644 --- a/atst/utils/localization.py +++ b/atat/utils/localization.py @@ -1,7 +1,7 @@ import yaml from functools import lru_cache from flask import current_app as app -from atst.utils import getattr_path +from atat.utils import getattr_path class LocalizationInvalidKeyError(Exception): diff --git a/atst/utils/logging.py b/atat/utils/logging.py similarity index 97% rename from atst/utils/logging.py rename to atat/utils/logging.py index f0b16dff..ca461265 100644 --- a/atst/utils/logging.py +++ b/atat/utils/logging.py @@ -42,7 +42,7 @@ class JsonFormatter(logging.Formatter): ("audit_event", lambda r: r.__dict__.get("audit_event")), ] - def __init__(self, *args, source="atst", **kwargs): + def __init__(self, *args, source="atat", **kwargs): self.source = source super().__init__(self) diff --git a/atst/utils/mailer.py b/atat/utils/mailer.py similarity index 100% rename from atst/utils/mailer.py rename to atat/utils/mailer.py diff --git a/atst/utils/notification_sender.py b/atat/utils/notification_sender.py similarity index 68% rename from atst/utils/notification_sender.py rename to atat/utils/notification_sender.py index 430f4b1c..86edf326 100644 --- a/atst/utils/notification_sender.py +++ b/atat/utils/notification_sender.py @@ -1,12 +1,12 @@ from sqlalchemy import select -from atst.jobs import send_notification_mail -from atst.database import db -from atst.models.notification_recipient import NotificationRecipient +from atat.jobs import send_notification_mail +from atat.database import db +from atat.models.notification_recipient import NotificationRecipient class NotificationSender(object): - EMAIL_SUBJECT = "ATST notification" + EMAIL_SUBJECT = "ATAT notification" def send(self, body, type_=None): recipients = self._get_recipients(type_) diff --git a/atst/utils/session_limiter.py b/atat/utils/session_limiter.py similarity index 94% rename from atst/utils/session_limiter.py rename to atat/utils/session_limiter.py index e0c02e0d..4dfa3b83 100644 --- a/atst/utils/session_limiter.py +++ b/atat/utils/session_limiter.py @@ -1,4 +1,4 @@ -from atst.domain.users import Users +from atat.domain.users import Users class SessionLimiter(object): diff --git a/celery_worker.py b/celery_worker.py index d2a99b3a..a3a3bfbd 100644 --- a/celery_worker.py +++ b/celery_worker.py @@ -1,10 +1,10 @@ #!/usr/bin/env python import logging -from atst.app import celery, make_app, make_config +from atat.app import celery, make_app, make_config from celery.signals import after_setup_task_logger -from atst.utils.logging import JsonFormatter +from atat.utils.logging import JsonFormatter config = make_config() app = make_app(config) diff --git a/ipython_setup.py b/ipython_setup.py index ce44a907..70c73483 100644 --- a/ipython_setup.py +++ b/ipython_setup.py @@ -1,11 +1,11 @@ -from atst.app import make_config, make_app -from atst.database import db -from atst.models import * +from atat.app import make_config, make_app +from atat.database import db +from atat.models import * app = make_app(make_config()) ctx = app.app_context() ctx.push() print( - "\nWelcome to atst. This shell has all models in scope, and a SQLAlchemy session called db." + "\nWelcome to atat. This shell has all models in scope, and a SQLAlchemy session called db." ) diff --git a/package.json b/package.json index f7aee1d1..295d5126 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "atst", + "name": "atat", "version": "1.0.0", - "description": "ATST Stateless Services", + "description": "ATAT Stateless Services", "main": "index.js", "scripts": { "watch": "parcel watch js/index.js -d static/assets --public-url /static/assets -o index.js --no-autoinstall", diff --git a/pytest.ini b/pytest.ini index ecd625dd..ac1fd1bb 100644 --- a/pytest.ini +++ b/pytest.ini @@ -2,4 +2,4 @@ norecursedirs = .venv .git node_modules env = D:FLASK_ENV=test -addopts = --ignore=tests/acceptance/ --cov=atst --cov-report term-missing --cov-fail-under 90 +addopts = --ignore=tests/acceptance/ --cov=atat --cov-report term-missing --cov-fail-under 90 diff --git a/script/add_ccpo_user.py b/script/add_ccpo_user.py index 379dd9eb..59d85a7c 100644 --- a/script/add_ccpo_user.py +++ b/script/add_ccpo_user.py @@ -4,10 +4,10 @@ import sys parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) sys.path.append(parent_dir) -from atst.app import make_config, make_app +from atat.app import make_config, make_app -from atst.domain.exceptions import NotFoundError -from atst.domain.users import Users +from atat.domain.exceptions import NotFoundError +from atat.domain.users import Users def grant_ccpo_perms(dod_id): diff --git a/script/cibuild b/script/cibuild index f0011051..8e903a17 100755 --- a/script/cibuild +++ b/script/cibuild @@ -9,7 +9,7 @@ source "$(dirname "${0}")"/../script/include/global_header.inc.sh export FLASK_ENV=ci # Define all relevant python files and directories for this app -PYTHON_FILES="./app.py ./atst/** ./config" +PYTHON_FILES="./app.py ./atat/** ./config" # Enable Python testing RUN_PYTHON_TESTS="true" diff --git a/script/create_database.py b/script/create_database.py index f21a857e..d45bd528 100644 --- a/script/create_database.py +++ b/script/create_database.py @@ -7,7 +7,7 @@ sys.path.append(parent_dir) import sqlalchemy -from atst.app import make_config +from atat.app import make_config def _root_connection(config, root_db): diff --git a/script/database_setup.py b/script/database_setup.py index e4964516..2d237dec 100644 --- a/script/database_setup.py +++ b/script/database_setup.py @@ -8,10 +8,10 @@ sys.path.append(parent_dir) import sqlalchemy import yaml -from atst.app import make_config, make_app -from atst.database import db -from atst.domain.users import Users -from atst.models import User +from atat.app import make_config, make_app +from atat.database import db +from atat.domain.users import Users +from atat.models import User from reset_database import reset_database diff --git a/script/dev_queue b/script/dev_queue index ef0d5ccc..4d271dd0 100755 --- a/script/dev_queue +++ b/script/dev_queue @@ -7,7 +7,7 @@ set -e WORKER="pipenv run celery -A celery_worker.celery worker --loglevel=info -B -c 1" if [[ `command -v entr` ]]; then - find atst | entr -r $WORKER + find atat | entr -r $WORKER else $WORKER fi diff --git a/script/find_unused_translations.py b/script/find_unused_translations.py index f1a6ecfb..775b1bf4 100755 --- a/script/find_unused_translations.py +++ b/script/find_unused_translations.py @@ -8,7 +8,7 @@ from subprocess import check_output parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) sys.path.append(parent_dir) -from atst.utils.localization import all_keys +from atat.utils.localization import all_keys for key in all_keys(): try: diff --git a/script/format b/script/format index 376531d4..263a91e1 100755 --- a/script/format +++ b/script/format @@ -1,6 +1,6 @@ #!/bin/bash -FILES_TO_FORMAT="atst/ tests/ app.py script/" +FILES_TO_FORMAT="atat/ tests/ app.py script/" if [ "$1" == "check" ]; then pipenv run black --check ${FILES_TO_FORMAT} diff --git a/script/include/test_functions.inc.sh b/script/include/test_functions.inc.sh index bfd4d343..aaa90441 100644 --- a/script/include/test_functions.inc.sh +++ b/script/include/test_functions.inc.sh @@ -8,7 +8,7 @@ run_python_lint() { } run_python_typecheck() { - run_command "mypy --ignore-missing-imports --follow-imports=skip atst/domain/csp/cloud/__init__.py" + run_command "mypy --ignore-missing-imports --follow-imports=skip atat/domain/csp/cloud/__init__.py" return $? } diff --git a/script/reset_database.py b/script/reset_database.py index dda1c1ba..6a1f07d7 100644 --- a/script/reset_database.py +++ b/script/reset_database.py @@ -9,8 +9,8 @@ import sqlalchemy from alembic import config as alembic_config from seed_roles import seed_roles -from atst.database import db -from atst.app import make_config, make_app +from atat.database import db +from atat.app import make_config, make_app def reset_database(): diff --git a/script/seed_roles.py b/script/seed_roles.py index 9bf6ae3f..edf7404a 100755 --- a/script/seed_roles.py +++ b/script/seed_roles.py @@ -7,10 +7,10 @@ parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) sys.path.append(parent_dir) from sqlalchemy.orm.exc import NoResultFound -from atst.app import make_config, make_app -from atst.database import db -from atst.models import PermissionSet -from atst.domain.permission_sets import ( +from atat.app import make_config, make_app +from atat.database import db +from atat.models import PermissionSet +from atat.domain.permission_sets import ( ATAT_PERMISSION_SETS, PORTFOLIO_PERMISSION_SETS, APPLICATION_PERMISSION_SETS, diff --git a/script/seed_sample.py b/script/seed_sample.py index bc8d13ba..51f66f26 100644 --- a/script/seed_sample.py +++ b/script/seed_sample.py @@ -10,28 +10,28 @@ from uuid import uuid4 parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) sys.path.append(parent_dir) -from atst.app import make_config, make_app -from atst.database import db +from atat.app import make_config, make_app +from atat.database import db -from atst.models.application import Application -from atst.models.clin import JEDICLINType -from atst.models.environment_role import CSPRole +from atat.models.application import Application +from atat.models.clin import JEDICLINType +from atat.models.environment_role import CSPRole -from atst.domain.application_roles import ApplicationRoles -from atst.domain.applications import Applications -from atst.domain.csp.reports import MockReportingProvider -from atst.domain.environments import Environments -from atst.domain.environment_roles import EnvironmentRoles -from atst.domain.exceptions import AlreadyExistsError, NotFoundError -from atst.domain.invitations import ApplicationInvitations -from atst.domain.permission_sets import PermissionSets, APPLICATION_PERMISSION_SETS -from atst.domain.portfolio_roles import PortfolioRoles -from atst.domain.portfolios import Portfolios -from atst.domain.users import Users +from atat.domain.application_roles import ApplicationRoles +from atat.domain.applications import Applications +from atat.domain.csp.reports import MockReportingProvider +from atat.domain.environments import Environments +from atat.domain.environment_roles import EnvironmentRoles +from atat.domain.exceptions import AlreadyExistsError, NotFoundError +from atat.domain.invitations import ApplicationInvitations +from atat.domain.permission_sets import PermissionSets, APPLICATION_PERMISSION_SETS +from atat.domain.portfolio_roles import PortfolioRoles +from atat.domain.portfolios import Portfolios +from atat.domain.users import Users -from atst.routes.dev import _DEV_USERS as DEV_USERS +from atat.routes.dev import _DEV_USERS as DEV_USERS -from atst.utils import pick +from atat.utils import pick from tests.factories import ( random_defense_component, diff --git a/script/sync-crls b/script/sync-crls index f610680b..44aa0116 100755 --- a/script/sync-crls +++ b/script/sync-crls @@ -5,7 +5,7 @@ set -e cd "$(dirname "$0")/.." mkdir -p crl-tmp crls -./.venv/bin/python ./atst/domain/authnid/crl/util.py crl-tmp crls +./.venv/bin/python ./atat/domain/authnid/crl/util.py crl-tmp crls if [ "$(ls -A crl-tmp)" ]; then cp -r crl-tmp/* crls/ fi diff --git a/script/test b/script/test index fc9a3c85..a40421af 100755 --- a/script/test +++ b/script/test @@ -10,7 +10,7 @@ export FLASK_ENV=test RESET_DB="true" # Define all relevant python files and directories for this app -PYTHON_FILES="./app.py ./atst/** ./config" +PYTHON_FILES="./app.py ./atat/** ./config" # Enable Python testing RUN_PYTHON_TESTS="true" diff --git a/templates/navigation/topbar.html b/templates/navigation/topbar.html index 005ef6d6..da204ba8 100644 --- a/templates/navigation/topbar.html +++ b/templates/navigation/topbar.html @@ -2,7 +2,7 @@