Merge pull request #586 from dod-ccpo/fix-remove-sample-data-script

Update script to remove sample data
This commit is contained in:
patricksmithdds 2019-01-29 16:25:18 -05:00 committed by GitHub
commit f3adbe7a85
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,7 +7,7 @@ sys.path.append(parent_dir)
import ctypes import ctypes
import sqlalchemy import sqlalchemy
from sqlalchemy import or_, event as sqlalchemy_event from sqlalchemy import event as sqlalchemy_event
from atst.database import db from atst.database import db
from atst.app import make_config, make_app from atst.app import make_config, make_app
@ -16,9 +16,6 @@ from atst.models.audit_event import AuditEvent
from atst.models.environment import Environment from atst.models.environment import Environment
from atst.models.environment_role import EnvironmentRole from atst.models.environment_role import EnvironmentRole
from atst.models.application import Application from atst.models.application import Application
from atst.models.request import Request
from atst.models.request_revision import RequestRevision
from atst.models.request_status_event import RequestStatus, RequestStatusEvent
from atst.models.role import Role from atst.models.role import Role
from atst.models.user import User from atst.models.user import User
from atst.models.portfolio_role import PortfolioRole from atst.models.portfolio_role import PortfolioRole
@ -28,10 +25,8 @@ from atst.models.mixins import AuditableMixin
from atst.domain.environments import Environments from atst.domain.environments import Environments
from atst.domain.exceptions import NotFoundError from atst.domain.exceptions import NotFoundError
from atst.domain.csp.reports import MockReportingProvider from atst.domain.csp.reports import MockReportingProvider
from atst.domain.requests import Requests from atst.domain.portfolios import Portfolios
from atst.domain.users import Users from atst.domain.users import Users
from atst.domain.portfolios import portfolios
from tests.factories import RequestFactory, LegacyTaskOrderFactory
dod_ids = [ dod_ids = [
@ -50,26 +45,18 @@ dod_ids = [
def create_demo_portfolio(name, data): def create_demo_portfolio(name, data):
try: try:
portfolio_owner = Users.get_by_dod_id("678678678") # Other portfolio_owner = Users.get_or_create_by_dod_id("2345678901") # Amanda
auditor = Users.get_by_dod_id("3453453453") # Sally # auditor = Users.get_by_dod_id("3453453453") # Sally
except NotFoundError: except NotFoundError:
print( print(
"Could not find demo users; will not create demo portfolio {}".format(name) "Could not find demo users; will not create demo portfolio {}".format(name)
) )
return return
request = RequestFactory.build(creator=portfolio_owner) portfolio = Portfolios.create(portfolio_owner, name=name)
request.legacy_task_order = LegacyTaskOrderFactory.build()
request = Requests.update(
request.id, {"financial_verification": RequestFactory.mock_financial_data()}
)
approved_request = Requests.set_status(request, RequestStatus.APPROVED)
portfolio = Requests.approve_and_create_portfolio(request)
portfolios.update(portfolio, {"name": name})
for mock_application in data["applications"]: for mock_application in data["applications"]:
application = application( application = Application(
portfolio=portfolio, name=mock_application.name, description="" portfolio=portfolio, name=mock_application.name, description=""
) )
env_names = [env.name for env in mock_application.environments] env_names = [env.name for env in mock_application.environments]
@ -95,25 +82,16 @@ def remove_sample_data(all_users=False):
sqlalchemy_event.remove(model, identifier, AuditableMixin.audit_delete) sqlalchemy_event.remove(model, identifier, AuditableMixin.audit_delete)
for user in users: for user in users:
requests = ( all_portfolios = Portfolios.for_user(user)
db.session.query(Request) portfolios = [p for p in all_portfolios if p.owner == user]
.filter(Request.id.in_([r.id for r in user.owned_requests]))
.all()
)
request_audit = (
db.session.query(AuditEvent)
.filter(AuditEvent.request_id.in_([r.id for r in requests]))
.all()
)
events = [ev for r in requests for ev in r.status_events]
revisions = [rev for r in requests for rev in r.revisions]
portfolios = [r.portfolio for r in requests if r.portfolio]
ws_audit = ( ws_audit = (
db.session.query(AuditEvent) db.session.query(AuditEvent)
.filter(AuditEvent.portfolio_id.in_([w.id for w in portfolios])) .filter(AuditEvent.portfolio_id.in_([w.id for w in portfolios]))
.all() .all()
) )
portfolio_roles = [role for portfolio in portfolios for role in portfolio.roles] portfolio_roles = [role for portfolio in portfolios for role in portfolio.roles]
task_orders = [to for portfolio in portfolios for to in portfolio.task_orders]
invites = [invite for role in portfolio_roles for invite in role.invitations] invites = [invite for role in portfolio_roles for invite in role.invitations]
applications = [p for portfolio in portfolios for p in portfolio.applications] applications = [p for portfolio in portfolios for p in portfolio.applications]
environments = ( environments = (
@ -128,11 +106,9 @@ def remove_sample_data(all_users=False):
environments, environments,
applications, applications,
invites, invites,
task_orders,
portfolio_roles, portfolio_roles,
ws_audit, ws_audit,
events,
revisions,
request_audit,
]: ]:
for thing in set_of_things: for thing in set_of_things:
db.session.delete(thing) db.session.delete(thing)
@ -143,12 +119,6 @@ def remove_sample_data(all_users=False):
db.session.connection().execute( db.session.connection().execute(
sqlalchemy.text(query), ids=[w.id for w in portfolios] sqlalchemy.text(query), ids=[w.id for w in portfolios]
) )
query = "DELETE FROM requests WHERE requests.id = ANY(:ids);"
db.session.connection().execute(
sqlalchemy.text(query), ids=[r.id for r in requests]
)
db.session.commit() db.session.commit()