Example #1
0
    def get(self):
        if self.config.search_auth_key_required and not (
                self.auth and self.auth.search_permission):
            return self.error(403, 'Missing or invalid authorization key\n')

        pfif_version = pfif.PFIF_VERSIONS.get(self.params.version or '1.2')

        # Retrieve parameters and do some sanity checks on them.
        query_string = self.request.get("q")
        subdomain = self.request.get("subdomain")
        max_results = min(self.params.max_results or 100, HARD_MAX_RESULTS)

        if not query_string:
            return self.error(400, 'Missing q parameter')
        if not subdomain:
            return self.error(400, 'Missing subdomain parameter')

        # Perform the search.
        results = indexing.search(Person.all_in_subdomain(subdomain),
                                  TextQuery(query_string), max_results)

        records = [pfif_version.person_to_dict(result) for result in results]
        utils.optionally_filter_sensitive_fields(records, self.auth)

        # Define the function to retrieve notes for a person.
        def get_notes_for_person(person):
            notes = model.Note.get_by_person_record_id(
                self.subdomain, person['person_record_id'])
            records = map(pfif_version.note_to_dict, notes)
            utils.optionally_filter_sensitive_fields(records, self.auth)
            return records

        self.response.headers['Content-Type'] = 'application/xml'
        pfif_version.write_file(self.response.out, records,
                                get_notes_for_person)
Example #2
0
    def get(self):
        if self.config.search_auth_key_required and not (self.auth and self.auth.search_permission):
            return self.error(403, "Missing or invalid authorization key\n")

        pfif_version = pfif.PFIF_VERSIONS.get(self.params.version or "1.2")

        # Retrieve parameters and do some sanity checks on them.
        query_string = self.request.get("q")
        subdomain = self.request.get("subdomain")
        max_results = min(self.params.max_results or 100, HARD_MAX_RESULTS)

        if not query_string:
            return self.error(400, "Missing q parameter")
        if not subdomain:
            return self.error(400, "Missing subdomain parameter")

        # Perform the search.
        results = indexing.search(Person.all_in_subdomain(subdomain), TextQuery(query_string), max_results)

        records = [pfif_version.person_to_dict(result) for result in results]
        utils.optionally_filter_sensitive_fields(records, self.auth)

        # Define the function to retrieve notes for a person.
        def get_notes_for_person(person):
            notes = model.Note.get_by_person_record_id(self.subdomain, person["person_record_id"])
            records = map(pfif_version.note_to_dict, notes)
            utils.optionally_filter_sensitive_fields(records, self.auth)
            return records

        self.response.headers["Content-Type"] = "application/xml"
        pfif_version.write_file(self.response.out, records, get_notes_for_person)