Final-Project

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()

Leave a Reply

Your email address will not be published. Required fields are marked *