micro-learn / data /content.py
ldrissi's picture
finish the idea of micro learning part 4
a71f11a
# Modified data/content.py for Hugging Face Spaces
import os
import json
from transformers import pipeline
# Mock content database for demo purposes
class ContentManager:
def __init__(self):
# Initialize with sample content
self.content_db = {
"content1": {
"title": "Introduction to Machine Learning",
"text": "Machine learning is a branch of artificial intelligence that focuses on building applications that learn from data and improve their accuracy over time without being programmed to do so.",
"tags": ["AI", "beginner"]
},
"content2": {
"title": "Python for Data Science",
"text": "Python has become the most popular programming language for data science due to its simplicity and the vast ecosystem of data-oriented libraries.",
"tags": ["programming", "intermediate"]
}
}
# Try to initialize Firebase if credentials exist
try:
self._init_firebase()
except Exception as e:
print(f"Firebase initialization failed: {e}")
print("Using mock content database instead")
def _init_firebase(self):
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
# Check if already initialized
if not firebase_admin._apps:
# Try to get credentials from environment variable
if 'FIREBASE_CONFIG' in os.environ:
config_json = os.environ.get('FIREBASE_CONFIG')
cred = credentials.Certificate(json.loads(config_json))
firebase_admin.initialize_app(cred)
self.db = firestore.client()
self.collection = self.db.collection('content')
self.use_firebase = True
else:
raise ValueError("Firebase credentials not found")
def get_by_id(self, content_id):
"""Retrieve content by ID"""
# Try mock database first
if content_id in self.content_db:
return self.content_db[content_id]
# If not in mock DB and Firebase is initialized, try Firebase
if hasattr(self, 'use_firebase') and self.use_firebase:
doc = self.collection.document(content_id).get()
return doc.to_dict() if doc.exists else None
return None
def save_content(self, content_data):
"""Save new content"""
# Generate a simple ID for mock database
if not hasattr(self, 'use_firebase') or not self.use_firebase:
content_id = f"content{len(self.content_db) + 1}"
self.content_db[content_id] = content_data
return content_id
# Otherwise use Firebase
doc_ref = self.collection.document()
doc_ref.set(content_data)
return doc_ref.id
def update_content(self, content_id, updates):
"""Update existing content"""
if content_id in self.content_db:
self.content_db[content_id].update(updates)
return True
if hasattr(self, 'use_firebase') and self.use_firebase:
self.collection.document(content_id).update(updates)
return True
return False