from ibmcloudant.cloudant_v1 import CloudantV1, Document | |
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator | |
def cloudant_retrieve_documents( | |
client: CloudantV1, | |
db_name: str, | |
selectors: dict, | |
fields, | |
sort: dict = None, | |
limit: int = 100, | |
): | |
"""Retrieve documents from the cloudant database.""" | |
cloudant = client | |
sort_by = sort or { | |
"sort": [ | |
{"_id": "desc"}, | |
] | |
} | |
fields_to_retrieve = ( | |
{"fields": fields} if isinstance(fields, list) else fields | |
) | |
if not isinstance(fields, (list, dict)): | |
raise ValueError("fields must be a list of strings or a dict") | |
retrieved_docs = cloudant.post_find( | |
db=db_name, | |
selector=selectors, | |
fields=fields_to_retrieve["fields"], | |
sort=sort, | |
limit=limit, | |
).get_result() | |
return retrieved_docs | |
def ensure_database_exists(client: CloudantV1, db_name: str) -> bool: | |
""" | |
Check if database exists and create it if it doesn't. | |
Args: | |
client (CloudantV1): Initialized Cloudant client | |
db_name (str): Database name to check/create | |
Returns: | |
bool: True if database exists or was created successfully | |
""" | |
try: | |
# Try to get database info - will raise error if doesn't exist | |
client.get_database_information(db=db_name) | |
return True | |
except Exception: | |
try: | |
# Database doesn't exist, try to create it | |
client.put_database(db=db_name) | |
return True | |
except Exception as e: | |
print(f"Failed to create database {db_name}: {str(e)}") | |
raise |