def ask_super_admin() -> PrincipalService: return PrincipalService( User(userId=settings.SUPER_ADMIN_USER_ID, name=settings.SUPER_ADMIN_USER_NAME, nickname=settings.SUPER_ADMIN_USER_NICKNAME, isActive=True, groupIds=[], tenantId=settings.SUPER_ADMIN_TENANT_ID, role=UserRole.SUPER_ADMIN))
def fake_to_tenant(principal_service: PrincipalService, tenant_id: TenantId) -> PrincipalService: if principal_service.is_super_admin(): # fake principal as tenant admin return PrincipalService( User(userId=principal_service.get_user_id(), tenantId=tenant_id, name=principal_service.get_user_name(), role=UserRole.ADMIN)) else: return principal_service
def ask_principal_service(principal_service: PrincipalService, tenant_id: Optional[TenantId]) -> PrincipalService: if principal_service.is_tenant_admin(): if is_blank(tenant_id): return principal_service elif tenant_id != principal_service.get_tenant_id(): raise_400( f'Tenant id[{tenant_id}] does not match current principal.') else: return principal_service elif principal_service.is_super_admin(): if is_blank(tenant_id): raise_400('Tenant id is required.') tenant_service = get_tenant_service(principal_service) tenant: Optional[Tenant] = tenant_service.find_by_id(tenant_id) if tenant is None: raise_404(f'Tenant[id={tenant_id}] not found.') return PrincipalService( User(tenantId=tenant_id, userId=principal_service.get_user_id(), name=principal_service.get_user_name(), role=UserRole.ADMIN))
async def fetch_pipeline_logs( criteria: PipelineMonitorLogCriteria, principal_service: PrincipalService = Depends(get_any_admin_principal) ) -> PipelineMonitorLogDataPage: if principal_service.is_super_admin(): if is_blank(criteria.tenantId): raise_400('Tenant id is required.') # fake principal as tenant admin principal_service = PrincipalService(User( userId=principal_service.get_user_id(), tenantId=criteria.tenantId, name=principal_service.get_user_name(), role=UserRole.ADMIN)) else: criteria.tenantId = principal_service.get_tenant_id() page = PipelineMonitorLogDataService(principal_service).page(criteria) # translate dataId to string def translate_data_id_to_str(log: PipelineMonitorLog) -> None: log.dataId = str(log.dataId) page.data = ArrayHelper(page.data).each(translate_data_id_to_str).to_list() # noinspection PyTypeChecker return page
def distribute_single_unit( pipeline: Pipeline, stage: PipelineStage, unit: PipelineUnit, user: User, pipeline_variables: PipelineVariables ) -> DistributedUnitLoopItemResult: principal_service = PrincipalService(user) compiled_unit = CompiledSingleUnit(pipeline=pipeline, stage=stage, unit=unit, principal_service=principal_service) stage_monitor_log = MonitorLogStage(units=[]) triggered: List[Tuple[TopicId, TopicTrigger]] = [] def new_pipeline(schema: TopicSchema, trigger: TopicTrigger) -> None: triggered.append((schema.get_topic().topicId, trigger)) success = compiled_unit.run( variables=pipeline_variables, new_pipeline=new_pipeline, stage_monitor_log=stage_monitor_log, storages=RuntimeTopicStorages(principal_service), principal_service=principal_service) return DistributedUnitLoopItemResult(log=stage_monitor_log.units[0], triggered=triggered, success=success)
def create_fake_principal_service() -> PrincipalService: return PrincipalService( User(userId='1', tenantId='1', name='imma-admin', role=UserRole.ADMIN))