Justin Christopherson
CYSE – 250
This program will prompt the user to enter the details for a comic book and then add them to a database on my datastax.com server.
from astrapy import DataAPIClient
import datetime
def add_comic(collection):
print(“Add a new comic to your collection:”)
title = input(“Title: “)
issue_number = input(“Issue Number: “)
publisher = input(“Publisher: “)
publication_date = input(“Publication Date (YYYY-MM-DD): “)
# Validate publication date format
try:
publication_date = datetime.datetime.strptime(publication_date, '%Y-%m-%d').date()
except ValueError:
print("Invalid date format. Please use YYYY-MM-DD.")
return
comic = {
"title": title,
"issue_number": issue_number,
"publisher": publisher,
"publication_date": publication_date.strftime('%Y-%m-%d')
}
# Save comic to AstraDB
db.comics.insert_one(comic)
collection.append(comic)
print("Comic added successfully!\n")
def edit_comic(collection):
if not collection:
print(“No comics in collection. Add comics first.”)
return
print("\nEdit a comic in your collection:")
view_collection(collection)
comic_index = int(input("Enter the index of the comic you want to edit: ")) - 1
if comic_index < 0 or comic_index >= len(collection):
print("Invalid comic index.")
return
comic = collection[comic_index]
print("Enter new details (leave blank to keep existing):")
title = input(f"Title ({comic['title']}): ") or comic['title']
issue_number = input(f"Issue Number ({comic['issue_number']}): ") or comic['issue_number']
publisher = input(f"Publisher ({comic['publisher']}): ") or comic['publisher']
publication_date = input(f"Publication Date ({comic['publication_date']}): ") or comic['publication_date']
# Validate publication date format
try:
publication_date = datetime.datetime.strptime(publication_date, '%Y-%m-%d').date()
except ValueError:
print("Invalid date format. Please use YYYY-MM-DD.")
return
updated_comic = {
"title": title,
"issue_number": issue_number,
"publisher": publisher,
"publication_date": publication_date.strftime('%Y-%m-%d')
}
# Update comic in AstraDB
db.comics.update_one({"_id": comic["_id"]}, {"$set": updated_comic})
collection[comic_index] = updated_comic
print("Comic edited successfully!\n")
def delete_comic(collection):
if not collection:
print(“No comics in collection. Add comics first.”)
return
print("\nDelete a comic from your collection:")
view_collection(collection)
comic_index = int(input("Enter the index of the comic you want to delete: ")) - 1
if comic_index < 0 or comic_index >= len(collection):
print("Invalid comic index.")
return
deleted_comic = collection.pop(comic_index)
# Delete comic from AstraDB
db.comics.delete_one({"_id": deleted_comic["_id"]})
print(f"Deleted comic: {deleted_comic.get('title', 'N/A')} - Issue #{deleted_comic.get('issue_number', 'N/A')}")
print("Comic deleted successfully!\n")
def view_collection(collection):
comics = db.comics.find({})
print(“\nYour Comic Collection:”)
for index, comic in enumerate(comics, start=1):
title = comic.get(‘title’, ‘N/A’)
issue_number = comic.get(‘issue_number’, ‘N/A’)
publisher = comic.get(‘publisher’, ‘N/A’)
publication_date = comic.get(‘publication_date’, ‘N/A’)
print(f”{index}. {title} – Issue #{issue_number} ({publisher}, {publication_date})”)
print()
def search_comic(collection):
search_query = input(“Enter the title, issue number, or publisher of the comic you want to search for: “)
found_comics = []
for comic in collection:
if search_query.lower() in comic.get(‘title’, ”).lower() or \
search_query.lower() in str(comic.get(‘issue_number’, ”)).lower() or \
search_query.lower() in comic.get(‘publisher’, ”).lower():
found_comics.append(comic)
if found_comics:
print(f"\nFound {len(found_comics)} matching comic(s):")
for index, comic in enumerate(found_comics, start=1):
title = comic.get('title', 'N/A')
issue_number = comic.get('issue_number', 'N/A')
publisher = comic.get('publisher', 'N/A')
publication_date = comic.get('publication_date', 'N/A')
print(f"{index}. {title} - Issue #{issue_number} ({publisher}, {publication_date})")
else:
print("No matching comics found.")
def load_collection_from_astrapy():
# Initialize the DataAPIClient with your token
client = DataAPIClient(“AstraCS:BZNarYEaGJmjqzFztwRotkgj:5472c1a0b3c6d1e6c11f6651b0a7c8a0f183b278535c6766f69d48203b3b7599”)
# Get the database by API endpoint
db = client.get_database_by_api_endpoint("https://b3b75450-24a9-4865-8f6b-22c18fca27e5-us-east1.apps.astra.datastax.com")
print(f"Connected to Astra DB: {db.list_collection_names()}")
return db
def main():
global db
db = load_collection_from_astrapy()
comic_collection = []
while True:
print("1. Add a new comic")
print("2. View comic collection")
print("3. Search for a comic")
print("4. Edit a comic")
print("5. Delete a comic")
print("6. Exit")
choice = input("Enter your choice: ")
if choice == '1':
add_comic(comic_collection)
elif choice == '2':
view_collection(comic_collection)
elif choice == '3':
search_comic(comic_collection)
elif choice == '4':
edit_comic(comic_collection)
elif choice == '5':
delete_comic(comic_collection)
elif choice == '6':
print("Exiting...")
break
else:
print("Invalid choice. Please try again.\n")
if name == “main“:
main()