Пример #1
0
def test_in_query(es_data, engine):
    """ """
    builder = Q_(resource="Organization", engine=engine)
    builder = builder.where(T_("Organization.active") == V_("true")).where(
        in_(
            "Organization.meta.lastUpdated",
            (
                "2010-05-28T05:35:56+00:00",
                "2001-05-28T05:35:56+00:00",
                "2018-05-28T05:35:56+00:00",
            ),
        ))
    result = builder().fetchall()
    assert result.header.total == 1

    # Test NOT IN
    builder = Q_(resource="Organization", engine=engine)
    builder = builder.where(T_("Organization.active") == V_("true")).where(
        not_in_(
            "Organization.meta.lastUpdated",
            (
                "2010-05-28T05:35:56+00:00",
                "2001-05-28T05:35:56+00:00",
                "2018-05-28T05:35:56+00:00",
            ),
        ))
    result = builder().fetchall()
    assert result.header.total == 0
Пример #2
0
    def test_fetchall(self):
        """ """
        self.load_contents()

        engine = self.get_engine()
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(
            T_("Organization.meta.profile",
               "http://hl7.org/fhir/Organization")).sort(
                   sort_("Organization.meta.lastUpdated", SortOrderType.DESC))
        result = builder(async_result=False, unrestricted=True).fetchall()

        self.assertEqual(result.header.total, 2)

        # Test
        builder = Q_(resource="Task", engine=engine)
        builder = builder.where(T_("Task.status", "ready"))
        result = builder(async_result=False, unrestricted=True).fetchall()
        self.assertEqual(result.header.total, 2)

        # Search with part-of
        # should be two sub tasks
        builder = Q_(resource="Task", engine=engine)
        builder = builder.where(
            T_("Task.partOf.reference",
               "Task/5df31190-0ed4-45ba-8b16-3c689fc2e686"))
        result = builder(async_result=False, unrestricted=True).fetchall()
        self.assertEqual(result.header.total, 2)
Пример #3
0
async def test_first_query(es_requester):
    """ """
    async with es_requester as requester:
        container, request, txn, tm = await setup_txn_on_container(requester
                                                                   )  # noqa
        # init primary data
        await init_data(requester)
        await load_organizations_data(requester, 5)
        engine = query_utility(IElasticsearchEngineFactory).get()

        index_name = await engine.get_index_name(container)

        conn = engine.connection.raw_connection
        await conn.indices.refresh(index=index_name)

        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active", "true"))

        result = await builder(async_result=True).first()

        assert result[0]["resourceType"] == builder._from[0][0]

        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active", "false"))

        result = await builder(async_result=True).first()
        assert result is None
Пример #4
0
def test_result_count(es_data, engine):
    """ """
    conn, meta_info = es_data
    load_organizations_data(conn, 5)
    builder = Q_(resource="Organization", engine=engine)
    builder = builder.where(T_("Organization.active") == V_("true"))
    assert builder().count() == 6

    builder = Q_(resource="Organization", engine=engine)
    builder = builder.where(T_("Organization.active") == V_("false"))
    assert builder().count() == 0
Пример #5
0
async def test_async_fetch_all(es_data, async_engine):
    """ """
    conn, meta_info = es_data
    load_organizations_data(conn, 152)

    builder = Q_(resource="Organization", engine=async_engine)
    builder = (builder.where(T_("Organization.active") == V_("true")).where(
        T_("Organization.meta.lastUpdated", "2010-05-28T05:35:56+00:00")).sort(
            sort_("Organization.meta.lastUpdated",
                  SortOrderType.DESC)).limit(20, 2))
    async for resource in builder():
        assert resource.__class__.__name__ == "Organization"
        # test fetch all
    result = await builder().fetchall()
    assert result.__class__.__name__ == "EngineResult"
Пример #6
0
async def test_async_first_query(es_data, async_engine):
    """ """
    conn, meta_info = es_data
    load_organizations_data(conn, 5)

    builder = Q_(resource="Organization", engine=async_engine)
    builder = builder.where(T_("Organization.active", "true"))

    result = await builder().first()
    assert isinstance(result, EngineResultRow)

    builder = Q_(resource="Organization", engine=async_engine)
    builder = builder.where(T_("Organization.active", "false"))

    result = await builder().first()
    assert result is None
Пример #7
0
async def test_async_single_query(es_data, async_engine):
    """ """
    builder = Q_(resource="ChargeItem", engine=async_engine)
    builder = builder.where(exists_("ChargeItem.enteredDate"))

    result = await builder().single()
    assert result is not None
    assert isinstance(result, EngineResultRow)
    # test empty result
    builder = Q_(resource="ChargeItem", engine=async_engine)
    builder = builder.where(not_(exists_("ChargeItem.enteredDate")))

    result = await builder().single()
    assert result is None

    # Test Multiple Result error
    conn, meta_info = es_data
    load_organizations_data(conn, 2)

    builder = Q_(resource="Organization", engine=async_engine)
    builder = builder.where(T_("Organization.active", "true"))

    with pytest.raises(MultipleResultsFound) as excinfo:
        await builder().single()
    assert excinfo.type == MultipleResultsFound
Пример #8
0
async def test_single_query(es_requester):
    """ """
    async with es_requester as requester:
        container, request, txn, tm = await setup_txn_on_container(requester
                                                                   )  # noqa
        # init primary data
        await init_data(requester)
        await load_organizations_data(requester, 2)
        engine = query_utility(IElasticsearchEngineFactory).get()

        index_name = await engine.get_index_name(container)

        conn = engine.connection.raw_connection
        await conn.indices.refresh(index=index_name)

        builder = Q_(resource="ChargeItem", engine=engine)
        builder = builder.where(exists_("ChargeItem.enteredDate"))

        result = await builder(async_result=True).single()
        assert result is not None
        assert result[0]["resourceType"] == builder._from[0][0]
        # test empty result
        builder = Q_(resource="ChargeItem", engine=engine)
        builder = builder.where(not_(exists_("ChargeItem.enteredDate")))

        result = await builder(async_result=True).single()
        assert result is None

        # Test Multiple Result error
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active", "true"))

        with pytest.raises(MultipleResultsFound) as excinfo:
            await builder(async_result=True).single()
        assert excinfo.type == MultipleResultsFound
Пример #9
0
async def test_async_result_empty(es_data, async_engine):
    """ """
    conn, meta_info = es_data
    load_organizations_data(conn, 5)
    builder = Q_(resource="Organization", engine=async_engine)
    builder = builder.where(T_("Organization.active") == V_("false"))
    empty = await builder().empty()
    assert empty is True
Пример #10
0
async def test_async_select_muiltipaths(es_data, async_engine):
    """ """
    builder = Q_(resource="Organization",
                 engine=async_engine).select("Organization.name",
                                             "Organization.address")
    builder = builder.where(T_("Organization.active") == V_("true"))
    result = await builder().fetchall()

    # FIXME looks like we changed how things are built here
    assert len(result.body[0]) == 2
Пример #11
0
def test_query_with_non_fhir_select(es_data, engine):
    """ """
    builder = Q_(resource="Patient", engine=engine)
    el_path1 = ElementPath("creation_date", non_fhir=True)
    el_path2 = ElementPath("title", non_fhir=True)
    builder = builder.select(
        el_path1, el_path2).where(T_("Patient.gender") == V_("male"))

    result = builder().fetchall()

    assert len(result.header.selects) == 2
    assert "creation_date" in result.header.selects
Пример #12
0
    def test_first_query(self):
        """ """
        self.load_contents()

        engine = self.get_engine()
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(
            T_("Organization.meta.profile",
               "http://hl7.org/fhir/Organization"))
        result_query = builder(async_result=False, unrestricted=True)
        result = result_query.first()
        self.assertEqual(result[0]["resourceType"],
                         result_query._query.get_from()[0][0])
Пример #13
0
    def test_single_query(self):
        """ """
        self.load_contents()

        engine = self.get_engine()
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.id", "f001"))
        result_query = builder(async_result=False, unrestricted=True)
        self.assertIsNotNone(result_query.single())

        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(
            T_("Organization.meta.profile",
               "http://hl7.org/fhir/Organization"))
        result_query = builder(async_result=False, unrestricted=True)
        try:
            result_query.single()
            raise AssertionError(
                "Code should not come here, as multiple resources should in result"
            )
        except MultipleResultsFound:
            pass
Пример #14
0
async def test_in_query(es_requester):
    """ """
    async with es_requester as requester:
        container, request, txn, tm = await setup_txn_on_container(requester
                                                                   )  # noqa
        # init primary data
        await init_data(requester)
        engine = query_utility(IElasticsearchEngineFactory).get()

        index_name = await engine.get_index_name(container)

        conn = engine.connection.raw_connection
        await conn.indices.refresh(index=index_name)

        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active") == V_("true")).where(
            in_(
                "Organization.meta.lastUpdated",
                (
                    "2010-05-28T05:35:56+00:00",
                    "2001-05-28T05:35:56+00:00",
                    "2018-05-28T05:35:56+00:00",
                ),
            ))
        result = await builder(async_result=True).fetchall()
        assert result.header.total == 1

        # Test NOT IN
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(T_("Organization.active") == V_("true")).where(
            not_in_(
                "Organization.meta.lastUpdated",
                ("2010-05-28T05:35:56+00:00", "2001-05-28T05:35:56+00:00",
                 "2018-05-28T05:35:56+00:00", "2015-05-28T05:35:56+00:00",
                 "2019-10-03T05:35:56+00:00"),
            ))
        result = await builder(async_result=True).fetchall()
        assert result.header.total == 0
Пример #15
0
def test_result_with_path_contains_index(es_data, engine):
    """ """
    conn, meta_info = es_data
    load_organizations_data(conn, 5)
    builder = Q_(resource="Organization", engine=engine)
    builder = builder.select("Organization.name.count()",
                             "Organization.address[1]").where(
                                 T_("Organization.active") == V_("true"))
    result = builder().fetchall()
    expected_length = "Burgers University Medical Center"
    expected_postal_code = "9100 AA"

    assert result.body[0][0] == len(expected_length)
    assert result.body[0][1]["postalCode"] == expected_postal_code
Пример #16
0
    def build_security_query(self, query):
        # The users who has plone.AccessContent permission by prinperm
        # The roles who has plone.AccessContent permission by roleperm
        show_inactive = False  # we will take care later
        user = _getAuthenticatedUser(self.es_catalog.catalogtool)
        users_roles = [
            FhirString(ur) for ur in
            self.es_catalog.catalogtool._listAllowedRolesAndUsers(user)
        ]
        filters = list()
        term = T_(
            "allowedRolesAndUsers",
            value=PrimitiveTypeCollection(*users_roles),
            non_fhir=True,
        )

        filters.append(term)

        if not show_inactive and not _checkPermission(  # noqa: P001
                AccessInactivePortalContent, self.es_catalog.catalogtool):
            value = FhirDateTime(FhirDateTime(DateTime().ISO8601()))
            terms = list()
            term = T_("effectiveRange.effectiveRange1", non_fhir=True) <= value
            alsoProvides(term, IIgnoreNestedCheck)
            terms.append(term)

            term = T_("effectiveRange.effectiveRange2", non_fhir=True) >= value
            alsoProvides(term, IIgnoreNestedCheck)
            terms.append(term)

            filters.extend(terms)

        # Let's finalize
        for f in filters:
            f.finalize(self)

        query._where.extend(filters)
Пример #17
0
async def test_raw_result(es_requester):
    """ """
    async with es_requester as requester:
        container, request, txn, tm = await setup_txn_on_container(requester
                                                                   )  # noqa
        # init primary data
        await init_data(requester)
        await load_organizations_data(requester, 161)
        engine = query_utility(IElasticsearchEngineFactory).get()

        index_name = await engine.get_index_name(container)

        conn = engine.connection.raw_connection
        await conn.indices.refresh(index=index_name)

        query = Q_(resource="Organization", engine=engine)

        result_query = query.where(T_("Organization.active") == "true")(
            async_result=True, unrestricted=True)
        # Test scrol api! although default size is 100 but engine should collect all
        # by chunking based
        result = await result_query._engine.execute(result_query._query,
                                                    result_query._unrestricted)
        assert result.header.total > 0
        assert result.header.total == len(result.body)

        # Test limit works
        result_query = query.where(
            T_("Organization.active") == "true").limit(20)(async_result=True)
        result = await result_query._engine.execute(result_query._query,
                                                    result_query._unrestricted)

        assert 20 == len(result.body)
        # Test with bundle wrapper
        bundle = engine.wrapped_with_bundle(result)

        assert bundle.total == result.header.total
Пример #18
0
def test_result_path_contains_function(es_data, engine):
    """ """
    builder = Q_(resource="Patient", engine=engine)
    builder = builder.select(
        "Patient.name.first().given.Skip(0).Take(0)",
        "Patient.identifier.last().assigner.display",
    ).where(T_("Patient.gender") == V_("male"))
    result = builder().fetchall()

    assert result.body[0][0] == "Patient"
    assert result.body[0][1] == "Zitelab ApS"

    # Test Some exception
    with pytest.raises(NotImplementedError):
        builder = Q_(resource="Patient", engine=engine)
        builder = builder.select("Patient.language.Skip(0)").where(
            T_("Patient.gender") == V_("male"))
        result = builder().first()

    with pytest.raises(ValidationError):
        builder = Q_(resource="Patient", engine=engine)
        builder = builder.select("Patient.address[0].Skip(0)").where(
            T_("Patient.gender") == V_("male"))
        result = builder().first()
Пример #19
0
    def test_negetive_query(self):
        """ """
        self.load_contents()

        engine = self.get_engine()

        builder = Q_(resource="Task", engine=engine)
        builder = builder.where(
            not_(
                T_(
                    "Task.owner.reference",
                    "Practitioner/fake-ac0-821d-46d9-9d40-a61f2578cadf",
                )))

        result = builder(async_result=False, unrestricted=True).fetchall()
        self.assertEqual(result.header.total, 3)
Пример #20
0
    def test_iter_result(self):
        """ """
        self.load_contents()
        engine = self.get_engine()
        builder = Q_(resource="Organization", engine=engine)
        builder = builder.where(
            T_("Organization.meta.profile",
               "http://hl7.org/fhir/Organization")).sort(
                   sort_("Organization.meta.lastUpdated", SortOrderType.DESC))
        count = 0

        for resource in builder(async_result=False, unrestricted=True):
            count += 1

            assert resource.__class__.__name__ == "Organization"

        self.assertEqual(count, 2)