Example #1
0
async def load_user_by_id(
    user_id: Optional[UserId] = None,
    principal_service: PrincipalService = Depends(get_any_principal)
) -> User:
    if is_blank(user_id):
        raise_400('User id is required.')
    if not principal_service.is_admin():
        # console user cannot visit other users
        if user_id != principal_service.get_user_id():
            raise_403()

    user_service = get_user_service(principal_service)

    def action() -> User:
        # noinspection PyTypeChecker
        user: User = user_service.find_by_id(user_id)
        if user is None:
            raise_404()
        # check tenant id
        if not principal_service.is_super_admin():
            # tenant id must match current principal's, except current is super admin
            if user.tenantId != principal_service.get_tenant_id():
                raise_404()
        # remove password
        clear_pwd(user)
        return user

    return trans_readonly(user_service, action)
async def load_enum_by_id(
    enum_id: Optional[EnumId] = None,
    principal_service: PrincipalService = Depends(get_console_principal)
) -> Enum:
    if is_blank(enum_id):
        raise_400('Enumeration id is required.')

    enum_service = get_enum_service(principal_service)

    def action() -> Enum:
        # noinspection PyTypeChecker
        an_enum: Enum = enum_service.find_by_id(enum_id)
        if an_enum is None:
            raise_404()
        # tenant id must match current principal's
        if an_enum.tenantId != principal_service.get_tenant_id():
            raise_404()
        enum_item_service = get_enum_item_service(enum_service)
        enum_list: List[EnumItem] = enum_item_service.find_by_enum_id(enum_id)
        if ArrayHelper(enum_list).some(
                lambda x: x.tenantId != principal_service.get_tenant_id()):
            raise_500(
                None,
                f'Items of enumeration[enumId={an_enum.enumId}] has incorrect data, '
                'check and correct it at meta storage manually.')
        if enum_list is None:
            an_enum.items = []
        else:
            an_enum.items = enum_list
        return an_enum

    return trans_readonly(enum_service, action)
Example #3
0
async def find_available_spaces(principal_service: PrincipalService = Depends(get_console_principal)) -> List[Space]:
	space_service = get_space_service(principal_service)

	def action() -> List[Space]:
		tenant_id: TenantId = principal_service.get_tenant_id()
		user_id = principal_service.get_user_id()
		# noinspection PyTypeChecker
		user: User = get_user_service(space_service).find_by_id(user_id)
		user_group_ids = user.groupIds
		if user_group_ids is None or len(user_group_ids) == 0:
			return []
		user_group_ids = ArrayHelper(user_group_ids).filter(lambda x: is_not_blank(x)).to_list()
		if len(user_group_ids) == 0:
			return []
		user_group_service = get_user_group_service(space_service)
		user_groups = user_group_service.find_by_ids(user_group_ids, tenant_id)

		def gather_space_ids(distinct_space_ids: List[SpaceId], user_group: UserGroup) -> List[SpaceId]:
			given_space_ids = user_group.spaceIds
			if given_space_ids is None or len(given_space_ids) == 0:
				return distinct_space_ids
			given_space_ids = ArrayHelper(given_space_ids).filter(lambda x: is_not_blank(x)).to_list()
			for space_id in given_space_ids:
				if space_id not in distinct_space_ids:
					distinct_space_ids.append(space_id)
			return distinct_space_ids

		space_ids = ArrayHelper(user_groups).reduce(gather_space_ids, [])
		return space_service.find_by_ids(space_ids, tenant_id)

	return trans_readonly(space_service, action)
async def find_updated_topics(
    lastModified: LastModified,
    principal_service: PrincipalService = Depends(get_admin_principal)
) -> List[Topic]:
    if lastModified is None or is_blank(lastModified.at):
        return []
    parsed, last_modified_at = is_date(lastModified.at, ask_all_date_formats())
    if not parsed:
        return []
    if not isinstance(last_modified_at, datetime):
        last_modified_at = datetime(year=last_modified_at.year,
                                    month=last_modified_at.month,
                                    day=last_modified_at.day,
                                    hour=0,
                                    minute=0,
                                    second=0,
                                    microsecond=0,
                                    tzinfo=None)

    topic_service = get_topic_service(principal_service)

    def action() -> List[Topic]:
        return topic_service.find_modified_after(
            last_modified_at, principal_service.get_tenant_id())

    return trans_readonly(topic_service, action)
async def fetch_topic_by_name(
    query_name: Optional[str] = None,
    tenant_id: Optional[TenantId] = None,
    principal_service: PrincipalService = Depends(get_any_admin_principal)
) -> List[Topic]:
    if is_blank(query_name):
        raise_400('Name criteria is required.')

    if principal_service.is_tenant_admin():
        if is_not_blank(
                tenant_id) and tenant_id != principal_service.get_tenant_id():
            raise_400('Tenant id is incorrect.')
        else:
            tenant_id = principal_service.get_tenant_id()

    if principal_service.is_super_admin() and is_blank(tenant_id):
        raise_400('Tenant id is required.')

    topic_service = get_topic_service(principal_service)

    def action() -> List[Topic]:
        topic_index_service = get_topic_index_service(topic_service)
        factor_index_list = topic_index_service.find(query_name, tenant_id)
        if len(factor_index_list) == 0:
            return []

        topic_ids: List[TopicId] = []
        for factor_index in factor_index_list:
            if factor_index.topicId not in topic_ids:
                topic_ids.append(factor_index.topicId)
        return topic_service.find_by_ids(topic_ids, tenant_id)

    return trans_readonly(topic_service, action)
Example #6
0
async def find_spaces_for_export(principal_service: PrincipalService = Depends(get_admin_principal)):
	space_service = get_space_service(principal_service)

	def action() -> List[Space]:
		tenant_id: TenantId = principal_service.get_tenant_id()
		return space_service.find_all(tenant_id)

	return trans_readonly(space_service, action)
Example #7
0
async def find_all_pipelines(principal_service: PrincipalService = Depends(
    get_admin_principal)) -> List[Pipeline]:
    pipeline_service = get_pipeline_service(principal_service)

    def action() -> List[Pipeline]:
        tenant_id = principal_service.get_tenant_id()
        return pipeline_service.find_all(tenant_id)

    return trans_readonly(pipeline_service, action)
async def find_all_topics(principal_service: PrincipalService = Depends(
    get_console_principal)) -> List[Topic]:
    tenant_id = principal_service.get_tenant_id()

    topic_service = get_topic_service(principal_service)

    def action() -> List[Topic]:
        return topic_service.find_all(tenant_id)

    return trans_readonly(topic_service, action)
Example #9
0
async def load_subject_by_name(
    name: str,
    principal_service: PrincipalService = Depends(get_console_principal)
) -> Subject:
    subject_service = get_subject_service(principal_service)

    def action() -> Subject:
        return subject_service.find_by_name(name)

    return trans_readonly(subject_service, action)
async def find_all_data_sources(principal_service: PrincipalService = Depends(
    get_any_admin_principal)) -> List[DataSource]:
    data_source_service = get_data_source_service(principal_service)

    def action() -> List[DataSource]:
        tenant_id = None
        if principal_service.is_tenant_admin():
            tenant_id = principal_service.get_tenant_id()
        return data_source_service.find_all(tenant_id)

    return trans_readonly(data_source_service, action)
Example #11
0
async def find_my_dashboards(
		principal_service: PrincipalService = Depends(get_console_principal)
) -> List[Dashboard]:
	dashboard_service = get_dashboard_service(principal_service)

	def action() -> List[Dashboard]:
		# noinspection PyTypeChecker
		return dashboard_service.find_all_by_user_id(
			principal_service.get_user_id(), principal_service.get_tenant_id())

	return trans_readonly(dashboard_service, action)
async def find_all_enums(principal_service: PrincipalService = Depends(
    get_admin_principal)) -> List[Enum]:
    """
	no enumeration items included, only enumeration itself
	"""
    enum_service = get_enum_service(principal_service)

    def action() -> List[Enum]:
        tenant_id = principal_service.get_tenant_id()
        return enum_service.find_all(tenant_id)

    return trans_readonly(enum_service, action)
Example #13
0
async def find_schedulers_page_by_topic_and_frequency(
        criteria: TopicSnapshotSchedulerCriteria = Body(...),
        principal_service: PrincipalService = Depends(get_admin_principal)
) -> QueryTopicSnapshotSchedulerDataPage:
    scheduler_service = get_topic_snapshot_scheduler_service(principal_service)

    def action() -> QueryTopicSnapshotSchedulerDataPage:
        tenant_id: TenantId = principal_service.get_tenant_id()
        # noinspection PyTypeChecker
        return scheduler_service.find_page_by_topic_and_frequency(
            criteria.topicId, criteria.frequency, tenant_id, criteria)

    return trans_readonly(scheduler_service, action)
Example #14
0
async def find_spaces_by_ids(
		space_ids: List[SpaceId], principal_service: PrincipalService = Depends(get_console_principal)
) -> List[Space]:
	if len(space_ids) == 0:
		return []

	space_service = get_space_service(principal_service)

	def action() -> List[Space]:
		tenant_id: TenantId = principal_service.get_tenant_id()
		return space_service.find_by_ids(space_ids, tenant_id)

	return trans_readonly(space_service, action)
Example #15
0
async def find_all_external_writers(
        principal_service: PrincipalService = Depends(get_any_admin_principal)
) -> List[ExternalWriter]:
    tenant_id = None
    if principal_service.is_tenant_admin():
        tenant_id = principal_service.get_tenant_id()

    external_writer_service = get_external_writer_service(principal_service)

    def action() -> List[ExternalWriter]:
        return external_writer_service.find_all(tenant_id)

    return trans_readonly(external_writer_service, action)
async def find_user_groups_by_ids(
    user_group_ids: List[UserGroupId],
    principal_service: PrincipalService = Depends(get_admin_principal)
) -> List[UserGroup]:
    if len(user_group_ids) == 0:
        return []

    user_group_service = get_user_group_service(principal_service)

    def action() -> List[UserGroup]:
        tenant_id: TenantId = principal_service.get_tenant_id()
        return user_group_service.find_by_ids(user_group_ids, tenant_id)

    return trans_readonly(user_group_service, action)
async def find_topics_by_ids(
    topic_ids: List[TopicId],
    principal_service: PrincipalService = Depends(get_console_principal)
) -> List[Topic]:
    if len(topic_ids) == 0:
        return []

    topic_service = get_topic_service(principal_service)

    def action() -> List[Topic]:
        tenant_id: TenantId = principal_service.get_tenant_id()
        return topic_service.find_by_ids(topic_ids, tenant_id)

    return trans_readonly(topic_service, action)
Example #18
0
async def find_my_connected_space_graphics(
        principal_service: PrincipalService = Depends(get_console_principal)
) -> List[ConnectedSpaceGraphic]:
    """
	get my all connected space graphics
	"""
    connected_space_graphic_service = get_connected_space_graphic_service(
        principal_service)

    def action() -> List[ConnectedSpaceGraphic]:
        # noinspection PyTypeChecker
        return connected_space_graphic_service.find_all_by_user_id(
            principal_service.get_user_id(), principal_service.get_tenant_id())

    return trans_readonly(connected_space_graphic_service, action)
Example #19
0
async def find_spaces_by_name(
		query_name: Optional[str], principal_service: PrincipalService = Depends(get_console_principal)
) -> List[Space]:
	space_service = get_space_service(principal_service)

	def action() -> List[Space]:
		tenant_id: TenantId = principal_service.get_tenant_id()
		if is_blank(query_name):
			# noinspection PyTypeChecker
			return space_service.find_by_name(None, tenant_id)
		else:
			# noinspection PyTypeChecker
			return space_service.find_by_name(query_name, tenant_id)

	return trans_readonly(space_service, action)
Example #20
0
async def find_tenants_by_name(
    query_name: Optional[str] = None,
    pageable: Pageable = Body(...),
    principal_service: PrincipalService = Depends(get_super_admin_principal)
) -> QueryTenantDataPage:
    tenant_service = get_tenant_service(principal_service)

    def action() -> QueryTenantDataPage:
        if is_blank(query_name):
            # noinspection PyTypeChecker
            return tenant_service.find_by_text(None, pageable)
        else:
            # noinspection PyTypeChecker
            return tenant_service.find_by_text(query_name, pageable)

    return trans_readonly(tenant_service, action)
async def find_user_groups_by_name(
    query_name: Optional[str],
    principal_service: PrincipalService = Depends(get_admin_principal)
) -> List[UserGroup]:
    user_group_service = get_user_group_service(principal_service)

    def action() -> List[UserGroup]:
        tenant_id: TenantId = principal_service.get_tenant_id()
        if is_blank(query_name):
            # noinspection PyTypeChecker
            return user_group_service.find_by_name(None, tenant_id)
        else:
            # noinspection PyTypeChecker
            return user_group_service.find_by_name(query_name, tenant_id)

    return trans_readonly(user_group_service, action)
Example #22
0
async def find_spaces_page_by_name(
		query_name: Optional[str], pageable: Pageable = Body(...),
		principal_service: PrincipalService = Depends(get_console_principal)
) -> QuerySpaceDataPage:
	space_service = get_space_service(principal_service)

	def action() -> QuerySpaceDataPage:
		tenant_id: TenantId = principal_service.get_tenant_id()
		if is_blank(query_name):
			# noinspection PyTypeChecker
			return space_service.find_page_by_text(None, tenant_id, pageable)
		else:
			# noinspection PyTypeChecker
			return space_service.find_page_by_text(query_name, tenant_id, pageable)

	return trans_readonly(space_service, action)
Example #23
0
async def find_template_connected_spaces_for_export(
        principal_service: PrincipalService = Depends(get_admin_principal)
) -> List[ConnectedSpaceWithSubjects]:
    connected_space_service = get_connected_space_service(principal_service)

    def action() -> List[ConnectedSpaceWithSubjects]:
        # noinspection PyTypeChecker
        connected_spaces: List[ConnectedSpace] = \
         connected_space_service.find_templates_by_tenant_id(principal_service.get_tenant_id())
        if len(connected_spaces) == 0:
            return []
        else:
            return ArrayHelper(connected_spaces) \
             .map(lambda x: load_subjects_and_reports(x, connected_space_service, False)) \
             .to_list()

    return trans_readonly(connected_space_service, action)
Example #24
0
async def load_shared_dashboard(dashboard_id: Optional[DashboardId], token: Optional[str]) -> StandaloneDashboard:
	"""
	load shared dashboard
	"""
	if is_blank(dashboard_id):
		raise_400('Dashboard id is required.')
	if is_blank(token):
		raise_400('Token is required.')

	principal_service: PrincipalService = get_principal_by_jwt(
		retrieve_authentication_manager(), token, [UserRole.CONSOLE, UserRole.ADMIN])
	dashboard_service = get_dashboard_service(principal_service)

	def action() -> StandaloneDashboard:
		return load_standalone_dashboard(dashboard_id, dashboard_service, principal_service)

	return trans_readonly(dashboard_service, action)
Example #25
0
async def find_users_by_name(
    query_name: Optional[str],
    principal_service: PrincipalService = Depends(get_admin_principal)
) -> List[User]:
    user_service = get_user_service(principal_service)

    def action() -> List[User]:
        tenant_id: TenantId = principal_service.get_tenant_id()
        if is_blank(query_name):
            users = user_service.find_by_name(None, tenant_id)
        else:
            users = user_service.find_by_name(query_name, tenant_id)

        ArrayHelper(users).each(clear_pwd)
        # noinspection PyTypeChecker
        return users

    return trans_readonly(user_service, action)
Example #26
0
async def find_users_by_ids(
    user_ids: List[UserId],
    principal_service: PrincipalService = Depends(get_any_admin_principal)
) -> List[User]:
    if len(user_ids) == 0:
        return []

    user_service = get_user_service(principal_service)

    def action() -> List[User]:
        tenant_id: Optional[TenantId] = None
        if principal_service.is_tenant_admin():
            tenant_id = principal_service.get_tenant_id()
        users = user_service.find_by_ids(user_ids, tenant_id)
        ArrayHelper(users).each(clear_pwd)
        return users

    return trans_readonly(user_service, action)
Example #27
0
async def load_space_by_id(
		space_id: Optional[SpaceId] = None, principal_service: PrincipalService = Depends(get_console_principal)
) -> Space:
	if is_blank(space_id):
		raise_400('Space id is required.')

	space_service = get_space_service(principal_service)

	def action() -> Space:
		# noinspection PyTypeChecker
		space: Space = space_service.find_by_id(space_id)
		if space is None:
			raise_404()
		# tenant id must match current principal's
		if space.tenantId != principal_service.get_tenant_id():
			raise_404()
		return space

	return trans_readonly(space_service, action)
async def find_user_groups_page_by_name(
    query_name: Optional[str],
    pageable: Pageable = Body(...),
    principal_service: PrincipalService = Depends(get_admin_principal)
) -> QueryUserGroupDataPage:
    user_group_service = get_user_group_service(principal_service)

    def action() -> QueryUserGroupDataPage:
        tenant_id: TenantId = principal_service.get_tenant_id()
        if is_blank(query_name):
            # noinspection PyTypeChecker
            return user_group_service.find_page_by_text(
                None, tenant_id, pageable)
        else:
            # noinspection PyTypeChecker
            return user_group_service.find_page_by_text(
                query_name, tenant_id, pageable)

    return trans_readonly(user_group_service, action)
async def load_topic_by_id(
    topic_id: Optional[TopicId] = None,
    principal_service: PrincipalService = Depends(get_console_principal)
) -> Topic:
    if is_blank(topic_id):
        raise_400('Topic id is required.')

    topic_service = get_topic_service(principal_service)

    def action() -> Topic:
        # noinspection PyTypeChecker
        topic: Topic = topic_service.find_by_id(topic_id)
        if topic is None:
            raise_404()
        # tenant id must match current principal's
        if topic.tenantId != principal_service.get_tenant_id():
            raise_404()
        return topic

    return trans_readonly(topic_service, action)
Example #30
0
async def load_pipeline_by_id(
    pipeline_id: Optional[PipelineId],
    principal_service: PrincipalService = Depends(get_admin_principal)
) -> Pipeline:
    if is_blank(pipeline_id):
        raise_400('Pipeline id is required.')

    pipeline_service = get_pipeline_service(principal_service)

    def action() -> Pipeline:
        # noinspection PyTypeChecker
        pipeline: Pipeline = pipeline_service.find_by_id(pipeline_id)
        if pipeline is None:
            raise_404()
        # tenant id must match current principal's
        if pipeline.tenantId != principal_service.get_tenant_id():
            raise_404()
        return pipeline

    return trans_readonly(pipeline_service, action)