import configparser import asyncio from supabase import AsyncClient # Read the properties file config = configparser.ConfigParser() config.read('local_config.properties') # Extract values from the properties file SUPABASE_URL = config.get('DEFAULT', 'SUPABASE_URL') SUPABASE_KEY = config.get('DEFAULT', 'SUPABASE_KEY') # Initialize Supabase client supabase = AsyncClient(SUPABASE_URL, SUPABASE_KEY) # Test data to insert and update test_url = "https://apnews.com/article/trump-air-force-one-boeing-plane-355ed87b00d7d82a061297f68c4ed89b" test_headline = "Trump says he’s considering buying used planes to serve as Air Force One amid Boeing delays" test_content = "WASHINGTON (AP) — President Donald Trump said Wednesday he is considering buying used Boeing aircraft — perhaps from an overseas seller — to use as Air Force One when he’s aboard, as he fumes over the U.S. plane-maker’s delays in producing two specially modified ones for presidential use." # Full test data with all fields test_data = { "url": test_url, "headline": test_headline, "content": test_content, "sentiment": "Neutral", "bias": "Strongly Left", "bias_score": -1.0, "bias_percentage": 100.0, "flagged_phrases": [], "media_score": { "media_unmasked_score": 49.6, "rating": "Misleading", "details": { "headline_analysis": { "headline_vs_content_score": 38.5, "contradictory_phrases": [] }, "sentiment_analysis": { "sentiment": "Neutral", "manipulation_score": 0.0, "flagged_phrases": [] }, "bias_analysis": { "bias": "Strongly Left", "bias_score": -1.0, "bias_percentage": 100.0 }, "evidence_analysis": { "evidence_based_score": 60.0 } } } } # 1. Insert data into the 'article_analysis' table async def insert_data(): try: # Use upsert with conflict on the 'url' field response = await supabase.table('article_analysis').upsert(test_data, on_conflict=['url']).execute() print("Data inserted or updated successfully") print(f"Response data: {response.data}") except Exception as e: print(f"Error inserting or updating data: {str(e)}") # 2. Update data (e.g., changing the sentiment) async def update_data(): try: updated_sentiment = "Positive" # Ensure that we are not leaving any required fields as null response = await supabase.table('article_analysis').upsert({ 'url': test_url, 'sentiment': updated_sentiment, 'headline': test_headline, 'content': test_content, 'bias': 'Neutral', 'bias_score': 0.0, 'bias_percentage': 0.0, 'flagged_phrases': [], 'media_score': { 'media_unmasked_score': 75.0, 'rating': 'Neutral', 'details': { 'headline_analysis': {'headline_vs_content_score': 50}, 'sentiment_analysis': {'sentiment': 'Neutral'}, 'bias_analysis': {'bias': 'Neutral'}, 'evidence_analysis': {'evidence_based_score': 80.0} } } }, on_conflict=['url']).execute() # Use on_conflict to handle the conflict by updating the existing URL row print("Data updated successfully") print(f"Response data: {response.data}") except Exception as e: print(f"Error updating data: {str(e)}") # 3. Retrieve data by URL async def retrieve_data(): try: result = await supabase.table('article_analysis').select('*').eq('url', test_url).execute() if result.data: print(f"Retrieved data: {result.data}") else: print("No data found for the given URL") except Exception as e: print(f"Error retrieving data: {str(e)}") # Run the tests: Insert, Update, and Retrieve data async def run_tests(): await insert_data() await update_data() await retrieve_data() # Execute the async function using asyncio if __name__ == "__main__": asyncio.run(run_tests())