Skip to content

Commit 38fbce8

Browse files
committed
Codes 4 Week13
1 parent 9e776ca commit 38fbce8

File tree

4 files changed

+624
-0
lines changed

4 files changed

+624
-0
lines changed

Week13/course.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from db import Firebase
2+
from professor import Professor
3+
4+
5+
class Course:
6+
def __init__(self, user_id: str, f: Firebase) -> None:
7+
self.course_id = ""
8+
self.user_id = user_id
9+
self.title = ""
10+
self.description = ""
11+
self.ref = f.ref.child("courses")
12+
self.professor = Professor(user_id, f)
13+
14+
def create(self):
15+
self.course_id = self.ref.push(
16+
{
17+
"title": self.title,
18+
"description": self.description,
19+
"user_id": self.user_id,
20+
}
21+
).key
22+
return self
23+
24+
def save(self):
25+
self.ref.child(self.course_id).set(
26+
{
27+
"title": self.title,
28+
"description": self.description,
29+
"user_id": self.user_id,
30+
}
31+
)
32+
return self
33+
34+
def update(self, updates: dict = {}):
35+
if updates:
36+
self.title = updates.get("title", self.title)
37+
self.description = updates.get("description", self.description)
38+
self.user_id = updates.get("user_id", self.user_id)
39+
self.save()
40+
return self
41+
42+
def get(self):
43+
course = self.ref.child(self.course_id).get()
44+
if not course:
45+
return self
46+
self.title = course["title"]
47+
self.description = course["description"]
48+
self.user_id = course["user_id"]
49+
return self
50+
51+
def delete(self):
52+
self.ref.child(self.course_id).delete()
53+
self.title = ""
54+
self.description = ""
55+
self.user_id = ""
56+
return self
57+
58+
def __str__(self):
59+
return f"{self.title} - {self.description} by {self.professor.title} {self.professor.fullname}"
60+
61+
62+
if __name__ == "__main__":
63+
f = Firebase()
64+
f.login("prof@university.edu", "password")
65+
course = Course(f.get_user_id(), f)
66+
course.title = "Python Programming"
67+
course.description = (
68+
"Basic Concepts of Python Programming for Undergraduate Students"
69+
)
70+
course.create()
71+
print(course.course_id)
72+
print(course)
73+
course.title = "Advanced Python Programming"
74+
course.update()
75+
print(course)
76+
course.delete()
77+
print(course)

Week13/db.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import firebase_admin # pip install firebase-admin
2+
from firebase_admin import credentials, db
3+
import pyrebase # pip install pyrebase4
4+
5+
6+
class Firebase:
7+
def __init__(self):
8+
#####################################################################
9+
# Use your own information for your Firebase project below. #
10+
#####################################################################
11+
# You need to download the credentials file from your Firebase #
12+
# project settings. Click on the "Generate new private key" button #
13+
# and save the file as "credentials.json" in the same directory. #
14+
CREDENTIALS_FILE = "credentials.json"
15+
# You can find your database URL in your Firebase project settings. #
16+
# The format is "https://<project_id>.firebasedatabase.app/". #
17+
DATABASE_URL = ""
18+
# You can find your API key in your Firebase project settings. #
19+
# The format is "AIza...". #
20+
# If you can't find your API key, create a new web app in your #
21+
# Firebase project, then you will see the API key. #
22+
API_KEY = ""
23+
# You can find your project ID in your Firebase project settings. #
24+
PROJECT_ID = ""
25+
#####################################################################
26+
# You can find these information in your Firebase project settings. #
27+
# You don't need to change the following code. #
28+
#####################################################################
29+
self.cred = credentials.Certificate(CREDENTIALS_FILE)
30+
firebase_admin.initialize_app(
31+
self.cred,
32+
{
33+
"databaseURL": DATABASE_URL,
34+
},
35+
)
36+
self.ref = db.reference("/")
37+
self.config = {
38+
"apiKey": API_KEY,
39+
"authDomain": f"{PROJECT_ID}.firebaseapp.com",
40+
"databaseURL": DATABASE_URL,
41+
"storageBucket": f"{PROJECT_ID}.appspot.com",
42+
}
43+
self.firebase = pyrebase.initialize_app(self.config)
44+
self.auth = self.firebase.auth()
45+
46+
def login(self, email, password):
47+
user = self.auth.sign_in_with_email_and_password(email, password)
48+
return user
49+
50+
def register(self, email, password):
51+
user = self.auth.create_user_with_email_and_password(email, password)
52+
return user
53+
54+
def get_current_user(self):
55+
return self.auth.current_user
56+
57+
def get_user_id(self):
58+
return self.auth.current_user["localId"]
59+
60+
def get_user_email(self):
61+
return self.auth.current_user["email"]
62+
63+
def logout(self):
64+
self.auth.current_user = None
65+
66+
67+
if __name__ == "__main__":
68+
f = Firebase()
69+
print(f.ref.get())
70+
f.ref.set({"name": "Bora Canbula"})
71+
print(f.ref.get())
72+
try:
73+
f.login("prof@university.edu", "password")
74+
except Exception as e:
75+
f.register("prof@university.edu", "password")
76+
print(f.get_current_user())

Week13/professor.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
from db import Firebase
2+
3+
4+
class Professor:
5+
def __init__(self, user_id: str, f: Firebase) -> None:
6+
self.user_id = user_id
7+
self.title = ""
8+
self.fullname = ""
9+
self.department = ""
10+
self.university = ""
11+
self.courses = []
12+
self.f = f
13+
self.ref = f.ref.child("professors").child(self.user_id)
14+
if self.ref.get():
15+
self.get()
16+
17+
def save(self):
18+
self.ref.set(
19+
{
20+
"title": self.title,
21+
"fullname": self.fullname,
22+
"department": self.department,
23+
"university": self.university,
24+
}
25+
)
26+
return self
27+
28+
def update(self, updates: dict = {}):
29+
if updates:
30+
self.title = updates.get("title", self.title)
31+
self.fullname = updates.get("fullname", self.fullname)
32+
self.department = updates.get("department", self.department)
33+
self.university = updates.get("university", self.university)
34+
self.save()
35+
return self
36+
37+
def get(self):
38+
professor = self.ref.get()
39+
if not professor:
40+
return self
41+
self.title = professor["title"]
42+
self.fullname = professor["fullname"]
43+
self.department = professor["department"]
44+
self.university = professor["university"]
45+
courses = self.f.ref.child("courses").get()
46+
if courses:
47+
for course_id in courses:
48+
course = courses[course_id]
49+
if course["user_id"] == self.user_id:
50+
self.courses.append(course)
51+
return self
52+
53+
def delete(self):
54+
self.ref.delete()
55+
self.title = ""
56+
self.fullname = ""
57+
self.department = ""
58+
self.university = ""
59+
return self
60+
61+
def __str__(self):
62+
return f"{self.title} {self.fullname} @ {self.department}, {self.university}"
63+
64+
65+
if __name__ == "__main__":
66+
f = Firebase()
67+
f.login("prof@university.edu", "password")
68+
professor = Professor(f.get_user_id(), f)
69+
professor.title = "Assoc. Prof. Dr."
70+
professor.fullname = "Bora Canbula"
71+
professor.department = "Computer Engineering"
72+
professor.university = "Manisa Celal Bayar University"
73+
professor.save()
74+
print(professor)
75+
print(professor.courses)
76+
professor.update(
77+
{
78+
"title": "Prof. Dr.",
79+
"department": "Department of Computer Engineering",
80+
}
81+
)
82+
print(professor)
83+
professor.delete()

0 commit comments

Comments
 (0)