Implement dispatch_delete_user job

This commit is contained in:
richard-dds
2019-10-04 16:22:45 -04:00
parent 00f76ae5af
commit 2ad30b5fa4
4 changed files with 75 additions and 1 deletions

View File

@@ -9,6 +9,7 @@ import redis
from unipath import Path
from flask_wtf.csrf import CSRFProtect
import json
from enum import Enum
from atst.database import db
from atst.assets import environment as assets_environment
@@ -150,7 +151,7 @@ def set_default_headers(app): # pragma: no cover
def map_config(config):
def sqlalchemy_dumps(dct):
def _default(self, obj):
def _default(obj):
if isinstance(obj, Enum):
return obj.name
else:

View File

@@ -87,3 +87,17 @@ class EnvironmentRoles(object):
.all()
)
return [id_ for id_, in results]
@classmethod
def get_environment_roles_pending_deletion(cls) -> List[UUID]:
results = (
db.session.query(EnvironmentRole.id)
.join(Environment)
.join(ApplicationRole)
.filter(Environment.deleted == False)
.filter(Environment.baseline_info != None)
.filter(EnvironmentRole.status == EnvironmentRole.Status.PENDING_DELETE)
.filter(ApplicationRole.status == ApplicationRoleStatus.ACTIVE)
.all()
)
return [id_ for id_, in results]

View File

@@ -169,6 +169,13 @@ def provision_user(self, environment_role_id=None):
)
@celery.task(bind=True)
def delete_user(self, environment_role_id=None):
do_work(
do_delete_user, self, app.csp.cloud, environment_role_id=environment_role_id
)
@celery.task(bind=True)
def dispatch_create_environment(self):
for environment_id in Environments.get_environments_pending_creation(
@@ -199,3 +206,11 @@ def dispatch_provision_user(self):
environment_role_id
) in EnvironmentRoles.get_environment_roles_pending_creation():
provision_user.delay(environment_role_id=environment_role_id)
@celery.task(bind=True)
def dispatch_delete_user(self):
for (
environment_role_id
) in EnvironmentRoles.get_environment_roles_pending_deletion():
delete_user.delay(environment_role_id=environment_role_id)