Beispiel #1
0
def execute_query(filters=list(), projection=None):
    """

    :param filters:
    :param projection:
    :return:
    """
    # query = {
    #     "$and": []
    # }

    results_id = {xml_data["_id"] for xml_data in XMLdata.objects()}
    results = []

    # Parsing filters if present
    for _filter in filters:
        if _is_advanced_filter(_filter):
            json_filter = json.loads(_filter)
            # Get matching document
            #   list possible values of the right hand side
            #   match resulted documents
            documents_field = json_filter["documents"].values()[0]

            values = get_filter_values(documents_field)
            matching_documents = get_matching_document(
                json_filter["documents"].keys()[0], values,
                json_filter["query"])

            # Extract correct documents
            filter_result = []

            for doc in matching_documents:
                doc_cross_query = {
                    json_filter["documents"].values()[0]: get_projection(doc)
                }
                filter_result += XMLdata.executeQueryFullResult(
                    doc_cross_query, json.loads(projection))
        else:
            filter_result = XMLdata.executeQueryFullResult(
                json.loads(_filter), json.loads(projection))

        filter_id = {document["_id"] for document in filter_result}
        results_id = results_id.intersection(filter_id)

        results = [doc for doc in filter_result if doc["_id"] in results_id]

    return results
Beispiel #2
0
 def dump_xmldata(self):
     self.assertEquals(len(XMLdata.objects()), 0)
     self.dump_template()
     self.restoreDump(join(DUMP_TEST_PATH, 'xmldata.bson'), 'xmldata')
     self.assertTrue(len(XMLdata.objects()) > 0)
 def dump_xmldata(self):
     self.assertEquals(len(XMLdata.objects()), 0)
     self.dump_template()
     self.restoreDump(join(DUMP_TEST_PATH, 'xmldata.bson'), 'xmldata')
     self.assertTrue(len(XMLdata.objects()) > 0)