From 9ac522ba4d819fff220cf29d5a0fab6d1439ae89 Mon Sep 17 00:00:00 2001 From: OlegAndrus12 Date: Mon, 25 Oct 2021 19:01:53 +0300 Subject: [PATCH 1/7] init --- publisher.py | 17 +++++++++++++++++ subscriber.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 publisher.py create mode 100644 subscriber.py diff --git a/publisher.py b/publisher.py new file mode 100644 index 0000000..b016775 --- /dev/null +++ b/publisher.py @@ -0,0 +1,17 @@ + +import os +from google.cloud import pubsub_v1 + +os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/lohyna-user-service-584c234c30e6.json" + +project_id = "lohyna-user-service" +topic_id = "create_user" + +publisher = pubsub_v1.PublisherClient() +topic_path = publisher.topic_path(project_id, topic_id) + +data = "Hello Google".encode('utf-8') + +res = publisher.publish(topic_path, data) + +print(f"published message: {res.result()}") \ No newline at end of file diff --git a/subscriber.py b/subscriber.py new file mode 100644 index 0000000..d67f640 --- /dev/null +++ b/subscriber.py @@ -0,0 +1,29 @@ +import os +from google.cloud import pubsub_v1 + +os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/lohyna-user-service-584c234c30e6.json" + +timeout = 2.0 #secs + +subscriber = pubsub_v1.SubscriberClient() + +subscription_path = 'projects/lohyna-user-service/subscriptions/create_user-sub' + +print(f"Listening messages on {subscription_path}") + + +def callback(message): + print(f"Received message : {message}") + print(f"Data : {message.data}") + print(type(message)) + message.ack() + +user_pull = subscriber.subscribe(subscription_path, callback = callback) + +with subscriber: + try: + user_pull.result() + except: + user_pull.cancel() + user_pull.result() + \ No newline at end of file From d8ea7d36509df82dc937b276cbb193e4743f653c Mon Sep 17 00:00:00 2001 From: OlegAndrus12 Date: Sun, 7 Nov 2021 14:42:25 +0200 Subject: [PATCH 2/7] CRUD interface for user service databse is implemented --- .gitignore | 2 ++ data.json | 30 ++++++++++++++++++++ database_connector.py | 65 +++++++++++++++++++++++++++++++++++++++++++ publisher.py | 10 +++++-- 4 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100644 data.json create mode 100644 database_connector.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..145e219 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/firebase.json +/google_cloud.json \ No newline at end of file diff --git a/data.json b/data.json new file mode 100644 index 0000000..9d15079 --- /dev/null +++ b/data.json @@ -0,0 +1,30 @@ +{ "users": [{ + "name" : "oleh", + "username" : "andrus", + "pass" : "admin123", + "email" : "oleh@example.com", + "phone" : "123" + }, + { + "name" : "vova", + "username" : "pannuish", + "pass" : "admin123", + "email" : "vova@example.com", + "phone" : "345" + }, + { + "name" : "roman", + "username" : "levkovych", + "pass" : "admin123", + "email" : "roman@example.com", + "phone" : "12" + }, + { + "name" : "nikita", + "username" : "zhavoronkov", + "pass" : "admin123", + "email" : "nikita@example.com", + "phone" : "1331" + } + ] +} \ No newline at end of file diff --git a/database_connector.py b/database_connector.py new file mode 100644 index 0000000..d8955e1 --- /dev/null +++ b/database_connector.py @@ -0,0 +1,65 @@ +import json +import firebase_admin +from firebase_admin import credentials +from firebase_admin import db + +#implements CRUD operations interface +class DatabaseAdmin: + + def __init__(self,databaseURL, credentials_path): + cred = credentials.Certificate(credentials_path) + firebase_admin.initialize_app(cred, + { + 'databaseURL' : databaseURL, + }) + self.__users_ref = db.reference("users") + + + def get_all_users(self): + return self.__users_ref.get() + + + def get_user_by_email(self, email): + for user_id in self.get_user_ids(): + if email == self.__users_ref.child(user_id).child("email").get(): + return self.__users_ref.child(user_id).get() + + + def get_user_ids(self): + ids = [i for i in self.__users_ref.get()] + return ids + + + def save_user(self, user_info): + self.__users_ref.push(user_info) + + + def update_user(self, user_id, user_info): + self.__users_ref.child(user_id).set(user_info) + + def delete_user_by_id(self, user_id): + self.__users_ref.child(user_id).delete() + + + def delete_user_by_email(self, email): + for i in self.__users_ref.get_user_ids(): + if email == self.__users_ref.child(i).child("email").get(): + self.delete_user_by_id(i) + + + def drop_users(self): + for user_id in self.get_user_ids(): + self.__users_ref.child(user_id).delete() + + +databaseURL = "https://lohyna-user-service-default-rtdb.firebaseio.com" +credentials_path = "firebase.json" +database_manager = DatabaseAdmin(databaseURL, credentials_path) + +with open("data.json", "r") as f: + users = json.load(f)['users'] + for i in users: + database_manager.save_user(i) + f.close() + +print(database_manager.get_all_records()) \ No newline at end of file diff --git a/publisher.py b/publisher.py index b016775..2755ddd 100644 --- a/publisher.py +++ b/publisher.py @@ -1,5 +1,5 @@ - import os +import json from google.cloud import pubsub_v1 os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/lohyna-user-service-584c234c30e6.json" @@ -10,8 +10,12 @@ publisher = pubsub_v1.PublisherClient() topic_path = publisher.topic_path(project_id, topic_id) -data = "Hello Google".encode('utf-8') +data = { + 1: "Data for the first method", + 2: "Data for the second method", +} +message = json.dumps(data).encode("utf-8") -res = publisher.publish(topic_path, data) +res = publisher.publish(topic_path, message) print(f"published message: {res.result()}") \ No newline at end of file From 1350b803ac0d3c35792f046da87311ddc3ae7b27 Mon Sep 17 00:00:00 2001 From: OlegAndrus12 Date: Wed, 10 Nov 2021 15:44:06 +0200 Subject: [PATCH 3/7] Docerizing user service --- .gitignore | 4 ++-- services/user_service/Dockerfile | 11 +++++++++++ data.json => services/user_service/data.json | 0 .../user_service/database_connector.py | 3 +-- services/user_service/main.py | 5 +++++ publisher.py => services/user_service/publisher.py | 3 ++- services/user_service/requirements.txt | 2 ++ subscriber.py => services/user_service/subscriber.py | 3 +-- 8 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 services/user_service/Dockerfile rename data.json => services/user_service/data.json (100%) rename database_connector.py => services/user_service/database_connector.py (97%) create mode 100644 services/user_service/main.py rename publisher.py => services/user_service/publisher.py (80%) create mode 100644 services/user_service/requirements.txt rename subscriber.py => services/user_service/subscriber.py (85%) diff --git a/.gitignore b/.gitignore index 145e219..12eda14 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/firebase.json -/google_cloud.json \ No newline at end of file +*firebase.json +*google_cloud.json \ No newline at end of file diff --git a/services/user_service/Dockerfile b/services/user_service/Dockerfile new file mode 100644 index 0000000..4e3fa15 --- /dev/null +++ b/services/user_service/Dockerfile @@ -0,0 +1,11 @@ +FROM python:3.8 + +WORKDIR /user_service + +COPY requirements.txt . + +RUN pip3 install -r requirements.txt + +COPY . . + +CMD ["python3", "main.py"] \ No newline at end of file diff --git a/data.json b/services/user_service/data.json similarity index 100% rename from data.json rename to services/user_service/data.json diff --git a/database_connector.py b/services/user_service/database_connector.py similarity index 97% rename from database_connector.py rename to services/user_service/database_connector.py index d8955e1..77da222 100644 --- a/database_connector.py +++ b/services/user_service/database_connector.py @@ -50,7 +50,6 @@ def delete_user_by_email(self, email): def drop_users(self): for user_id in self.get_user_ids(): self.__users_ref.child(user_id).delete() - databaseURL = "https://lohyna-user-service-default-rtdb.firebaseio.com" credentials_path = "firebase.json" @@ -62,4 +61,4 @@ def drop_users(self): database_manager.save_user(i) f.close() -print(database_manager.get_all_records()) \ No newline at end of file +print(database_manager.get_all_records()) diff --git a/services/user_service/main.py b/services/user_service/main.py new file mode 100644 index 0000000..539bf80 --- /dev/null +++ b/services/user_service/main.py @@ -0,0 +1,5 @@ +import subscriber +import publisher +import database_connector + +print("User Service entry point") \ No newline at end of file diff --git a/publisher.py b/services/user_service/publisher.py similarity index 80% rename from publisher.py rename to services/user_service/publisher.py index 2755ddd..fe52c0f 100644 --- a/publisher.py +++ b/services/user_service/publisher.py @@ -2,7 +2,8 @@ import json from google.cloud import pubsub_v1 -os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/lohyna-user-service-584c234c30e6.json" +os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/firebase.json" + project_id = "lohyna-user-service" topic_id = "create_user" diff --git a/services/user_service/requirements.txt b/services/user_service/requirements.txt new file mode 100644 index 0000000..c63238b --- /dev/null +++ b/services/user_service/requirements.txt @@ -0,0 +1,2 @@ +firebase_admin==5.0.3 +google-cloud-pubsub \ No newline at end of file diff --git a/subscriber.py b/services/user_service/subscriber.py similarity index 85% rename from subscriber.py rename to services/user_service/subscriber.py index d67f640..7c49d6a 100644 --- a/subscriber.py +++ b/services/user_service/subscriber.py @@ -1,8 +1,7 @@ import os from google.cloud import pubsub_v1 -os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/lohyna-user-service-584c234c30e6.json" - +os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/firebase.json" timeout = 2.0 #secs subscriber = pubsub_v1.SubscriberClient() From 8d67e66f379adddc5bce242f8a433b7f1d6dfd08 Mon Sep 17 00:00:00 2001 From: OlegAndrus12 Date: Mon, 15 Nov 2021 11:21:11 +0200 Subject: [PATCH 4/7] New lines are added, mocker object created --- .gitignore | 2 +- services/user_service/Dockerfile | 2 +- services/user_service/database_connector.py | 2 +- services/user_service/main.py | 2 +- services/user_service/publisher.py | 2 +- services/user_service/requirements.txt | 4 ++- services/user_service/subscriber.py | 1 - services/user_service/tests/mocker.py | 31 +++++++++++++++++++++ 8 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 services/user_service/tests/mocker.py diff --git a/.gitignore b/.gitignore index 12eda14..8c0c0f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ *firebase.json -*google_cloud.json \ No newline at end of file +*google_cloud.json diff --git a/services/user_service/Dockerfile b/services/user_service/Dockerfile index 4e3fa15..b242f9c 100644 --- a/services/user_service/Dockerfile +++ b/services/user_service/Dockerfile @@ -8,4 +8,4 @@ RUN pip3 install -r requirements.txt COPY . . -CMD ["python3", "main.py"] \ No newline at end of file +CMD ["python3", "main.py"] diff --git a/services/user_service/database_connector.py b/services/user_service/database_connector.py index 77da222..dd9ae19 100644 --- a/services/user_service/database_connector.py +++ b/services/user_service/database_connector.py @@ -3,7 +3,7 @@ from firebase_admin import credentials from firebase_admin import db -#implements CRUD operations interface + class DatabaseAdmin: def __init__(self,databaseURL, credentials_path): diff --git a/services/user_service/main.py b/services/user_service/main.py index 539bf80..1a18ae7 100644 --- a/services/user_service/main.py +++ b/services/user_service/main.py @@ -2,4 +2,4 @@ import publisher import database_connector -print("User Service entry point") \ No newline at end of file +print("User Service entry point") diff --git a/services/user_service/publisher.py b/services/user_service/publisher.py index fe52c0f..0265226 100644 --- a/services/user_service/publisher.py +++ b/services/user_service/publisher.py @@ -19,4 +19,4 @@ res = publisher.publish(topic_path, message) -print(f"published message: {res.result()}") \ No newline at end of file +print(f"published message: {res.result()}") diff --git a/services/user_service/requirements.txt b/services/user_service/requirements.txt index c63238b..d3dde28 100644 --- a/services/user_service/requirements.txt +++ b/services/user_service/requirements.txt @@ -1,2 +1,4 @@ firebase_admin==5.0.3 -google-cloud-pubsub \ No newline at end of file +google-cloud-pubsub +pytest +faker \ No newline at end of file diff --git a/services/user_service/subscriber.py b/services/user_service/subscriber.py index 7c49d6a..f0ba4c3 100644 --- a/services/user_service/subscriber.py +++ b/services/user_service/subscriber.py @@ -25,4 +25,3 @@ def callback(message): except: user_pull.cancel() user_pull.result() - \ No newline at end of file diff --git a/services/user_service/tests/mocker.py b/services/user_service/tests/mocker.py new file mode 100644 index 0000000..ae6bf87 --- /dev/null +++ b/services/user_service/tests/mocker.py @@ -0,0 +1,31 @@ +import random +from faker import Faker + +images = [ + "https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.vectorstock.com%2Froyalty-free-vector%2Fflat-business-man-user-profile-avatar-icon-vector-4333097&psig=AOvVaw0WMass4DSBWEHhXOqpRWN5&ust=1637053775349000&source=images&cd=vfe&ved=0CAsQjRxqFwoTCNi7qNuCmvQCFQAAAAAdAAAAABAP", + "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSHL-ELbysJgVyYIJvfLMMbCZFxuLkqKe_iYBtHcvFw1VJX2RjlLA1xXina7Mn75Puo5Yw&usqp=CAU", + "https://www.seekpng.com/png/full/356-3562377_personal-user.png", + "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSx7FfWrqJ5ro7SdxlBsnmCo_mwrnRly5mHUg&usqp=CAU" +] + +def get_mocked_users(N = 1): + fake = Faker() + Faker.seed(0) + users = list() + for i in range(N): + users.append( + { + "name" : fake.first_name(), + "surname" : fake.last_name(), + "password" : fake.password(), + "email" : fake.email(), + "phone" : fake.phone_number(), + "photo" : random.choice(images), + "age" : random.randint(1, 100), + "description" : fake.text(), + "interests" : fake.words(), + } + ) + return users + +print(get_mocked_users(10)) \ No newline at end of file From a1623545cfdb26eaa3423d107e7c224207c9a363 Mon Sep 17 00:00:00 2001 From: Oleh Andrus Date: Wed, 17 Nov 2021 12:56:52 +0200 Subject: [PATCH 5/7] adding tests --- .gitignore | 3 + services/user_service/data.json | 30 -------- services/user_service/database_connector.py | 27 +++---- services/user_service/{tests => }/mocker.py | 3 - services/user_service/test_user_service.py | 81 +++++++++++++++++++++ 5 files changed, 96 insertions(+), 48 deletions(-) delete mode 100644 services/user_service/data.json rename services/user_service/{tests => }/mocker.py (96%) create mode 100644 services/user_service/test_user_service.py diff --git a/.gitignore b/.gitignore index 8c0c0f2..4d37bb0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ *firebase.json +*firebase_test.json *google_cloud.json +services/user_service/env/ +services/user_service/__pycache__/ diff --git a/services/user_service/data.json b/services/user_service/data.json deleted file mode 100644 index 9d15079..0000000 --- a/services/user_service/data.json +++ /dev/null @@ -1,30 +0,0 @@ -{ "users": [{ - "name" : "oleh", - "username" : "andrus", - "pass" : "admin123", - "email" : "oleh@example.com", - "phone" : "123" - }, - { - "name" : "vova", - "username" : "pannuish", - "pass" : "admin123", - "email" : "vova@example.com", - "phone" : "345" - }, - { - "name" : "roman", - "username" : "levkovych", - "pass" : "admin123", - "email" : "roman@example.com", - "phone" : "12" - }, - { - "name" : "nikita", - "username" : "zhavoronkov", - "pass" : "admin123", - "email" : "nikita@example.com", - "phone" : "1331" - } - ] -} \ No newline at end of file diff --git a/services/user_service/database_connector.py b/services/user_service/database_connector.py index dd9ae19..a53b539 100644 --- a/services/user_service/database_connector.py +++ b/services/user_service/database_connector.py @@ -14,11 +14,18 @@ def __init__(self,databaseURL, credentials_path): }) self.__users_ref = db.reference("users") - def get_all_users(self): + if self.__users_ref.get() is None: + return list() return self.__users_ref.get() + def get_user_by_id(self, id): + if self.__users_ref.child(id).get() is None: + return list() + return self.__users_ref.child(id).get() + + def get_user_by_email(self, email): for user_id in self.get_user_ids(): if email == self.__users_ref.child(user_id).child("email").get(): @@ -26,12 +33,14 @@ def get_user_by_email(self, email): def get_user_ids(self): + if self.__users_ref.get() is None: + return list() ids = [i for i in self.__users_ref.get()] return ids def save_user(self, user_info): - self.__users_ref.push(user_info) + return self.__users_ref.push(user_info).key def update_user(self, user_id, user_info): @@ -42,7 +51,7 @@ def delete_user_by_id(self, user_id): def delete_user_by_email(self, email): - for i in self.__users_ref.get_user_ids(): + for i in self.get_user_ids(): if email == self.__users_ref.child(i).child("email").get(): self.delete_user_by_id(i) @@ -50,15 +59,3 @@ def delete_user_by_email(self, email): def drop_users(self): for user_id in self.get_user_ids(): self.__users_ref.child(user_id).delete() - -databaseURL = "https://lohyna-user-service-default-rtdb.firebaseio.com" -credentials_path = "firebase.json" -database_manager = DatabaseAdmin(databaseURL, credentials_path) - -with open("data.json", "r") as f: - users = json.load(f)['users'] - for i in users: - database_manager.save_user(i) - f.close() - -print(database_manager.get_all_records()) diff --git a/services/user_service/tests/mocker.py b/services/user_service/mocker.py similarity index 96% rename from services/user_service/tests/mocker.py rename to services/user_service/mocker.py index ae6bf87..97f8dd6 100644 --- a/services/user_service/tests/mocker.py +++ b/services/user_service/mocker.py @@ -10,7 +10,6 @@ def get_mocked_users(N = 1): fake = Faker() - Faker.seed(0) users = list() for i in range(N): users.append( @@ -27,5 +26,3 @@ def get_mocked_users(N = 1): } ) return users - -print(get_mocked_users(10)) \ No newline at end of file diff --git a/services/user_service/test_user_service.py b/services/user_service/test_user_service.py new file mode 100644 index 0000000..bfb7a5b --- /dev/null +++ b/services/user_service/test_user_service.py @@ -0,0 +1,81 @@ + +from database_connector import DatabaseAdmin +import mocker + + +databaseURL = "https://lohyna-user-service-default-rtdb.firebaseio.com/" +credentials_path = "firebase_test.json" +database_manager = DatabaseAdmin(databaseURL, credentials_path) + + +def test_get_all_users(): + print("Running test test_get_all_users") + database_manager.drop_users() + count_of_users = 3 + for i in mocker.get_mocked_users(count_of_users): + database_manager.save_user(i) + print(f"STEP 1: count of the users after clearing table should be equal to COUNT_OF_USERS = {count_of_users}") + assert count_of_users == len(database_manager.get_all_users()) + + +def test_delete_user_by_email(): + print("Running test test_delete_user_by_email") + user = mocker.get_mocked_users()[0] + user_email = user["email"] + database_manager.save_user(user) + print("STEP 1: user has been added into database") + assert database_manager.get_user_by_email(user_email)["email"] == user_email + database_manager.delete_user_by_email(user_email) + print("STEP 2: After deleting by email user is not more stored") + assert database_manager.get_user_by_email(user_email) == None + + +def test_delete_user_by_id(): + print("Running test test_delete_user_by_id") + user = mocker.get_mocked_users()[0] + user_id = database_manager.save_user(user) + print("STEP 1: User has been saved into database") + assert database_manager.get_user_by_id(user_id) != [] + database_manager.delete_user_by_id(user_id) + print("STEP 2: User has been deleted from database") + assert database_manager.get_user_by_id(user_id) == [] + + +def test_create_user(): + print("Running test test_create_user") + user = mocker.get_mocked_users()[0] + id = database_manager.save_user(user) + print("STEP 1: User has been saved into database") + assert database_manager.get_user_by_id(id) != None + + +def test_update_user(): + print("Running test test_update_user") + user = mocker.get_mocked_users()[0] + id = database_manager.save_user(user) + print("STEP 1: User has been saved into database") + assert database_manager.get_user_by_id(id) != None + user["age"] = 100 + user["email"] = "test@gmail.com" + user["interests"].append("one more thing") + database_manager.update_user(id, user) + updated_user = database_manager.get_user_by_id(id) + print("STEP 2: User age has been changed") + assert updated_user["age"] == 100 + print("STEP 2: User email has been changed") + assert updated_user["email"] == "test@gmail.com" + print("STEP 4: User interests has been changed") + assert "one more thing" in updated_user["interests"] + + +def test_drop_users(): + print("Running test test_drop_users") + count_of_users = 10 + users = mocker.get_mocked_users(count_of_users) + print("STEP 1: Database contains users") + assert database_manager.get_all_users() != [] + for i in users: + database_manager.save_user(i) + database_manager.drop_users() + print(f"STEP 2: After populating {count_of_users} database is cleared") + assert database_manager.get_all_users() == [] From 2ae9611eae9ecedcb86567c365c94e0e1614e11c Mon Sep 17 00:00:00 2001 From: Oleh Andrus Date: Wed, 17 Nov 2021 13:47:47 +0200 Subject: [PATCH 6/7] Error handling has been added --- services/user_service/database_connector.py | 95 ++++++++++++++++----- services/user_service/test_user_service.py | 2 +- 2 files changed, 73 insertions(+), 24 deletions(-) diff --git a/services/user_service/database_connector.py b/services/user_service/database_connector.py index a53b539..fc9ca34 100644 --- a/services/user_service/database_connector.py +++ b/services/user_service/database_connector.py @@ -1,5 +1,5 @@ -import json import firebase_admin +from firebase_admin.exceptions import FirebaseError from firebase_admin import credentials from firebase_admin import db @@ -15,47 +15,96 @@ def __init__(self,databaseURL, credentials_path): self.__users_ref = db.reference("users") def get_all_users(self): - if self.__users_ref.get() is None: + try: + if self.__users_ref.get() is None: + return list() + return self.__users_ref.get() + except FirebaseError as e: + print("###Connection lost. EROR received : " + str(e)) return list() - return self.__users_ref.get() def get_user_by_id(self, id): - if self.__users_ref.child(id).get() is None: - return list() - return self.__users_ref.child(id).get() + try: + if self.__users_ref.child(id).get() is None: + return list() + return self.__users_ref.child(id).get() + except ValueError as e: + print("###EROR received : " + str(e)) + except FirebaseError as e: + print("###Connection lost. EROR received : " + str(e)) + return list() def get_user_by_email(self, email): - for user_id in self.get_user_ids(): - if email == self.__users_ref.child(user_id).child("email").get(): - return self.__users_ref.child(user_id).get() - + try: + for user_id in self.get_user_ids(): + if email == self.__users_ref.child(user_id).child("email").get(): + return self.__users_ref.child(user_id).get() + except ValueError as e: + print("###EROR received : " + str(e)) + except FirebaseError as e: + print("###Connection lost. EROR received : " + str(e)) + return list() def get_user_ids(self): - if self.__users_ref.get() is None: - return list() - ids = [i for i in self.__users_ref.get()] - return ids + try: + if self.__users_ref.get() is None: + return list() + ids = [i for i in self.__users_ref.get()] + return ids + except FirebaseError as e: + print("###Connection lost. EROR received : " + str(e)) + return list() def save_user(self, user_info): - return self.__users_ref.push(user_info).key + try: + return self.__users_ref.push(user_info).key + except ValueError as e: + print("###EROR received : " + str(e)) + except TypeError as e: + print("###EROR received : " + str(e)) + except FirebaseError as e: + print("###Connection lost. EROR received : " + str(e)) def update_user(self, user_id, user_info): - self.__users_ref.child(user_id).set(user_info) + try: + self.__users_ref.child(user_id).set(user_info) + except ValueError as e: + print("###EROR received : " + str(e)) + except TypeError as e: + print("###EROR received : " + str(e)) + except FirebaseError as e: + print("###Connection lost. EROR received : " + str(e)) + def delete_user_by_id(self, user_id): - self.__users_ref.child(user_id).delete() - + try: + self.__users_ref.child(user_id).delete() + except ValueError as e: + print("###EROR received : " + str(e)) + except FirebaseError as e: + print("###Connection lost. EROR received : " + str(e)) + def delete_user_by_email(self, email): - for i in self.get_user_ids(): - if email == self.__users_ref.child(i).child("email").get(): - self.delete_user_by_id(i) + try: + for i in self.get_user_ids(): + if email == self.__users_ref.child(i).child("email").get(): + self.delete_user_by_id(i) + except ValueError as e: + print("###EROR received : " + str(e)) + except FirebaseError as e: + print("###Connection lost. EROR received : " + str(e)) def drop_users(self): - for user_id in self.get_user_ids(): - self.__users_ref.child(user_id).delete() + try: + for user_id in self.get_user_ids(): + self.__users_ref.child(user_id).delete() + except ValueError as e: + print("###EROR received : " + str(e)) + except FirebaseError as e: + print("###Connection lost. EROR received : " + str(e)) diff --git a/services/user_service/test_user_service.py b/services/user_service/test_user_service.py index bfb7a5b..5ad6dd6 100644 --- a/services/user_service/test_user_service.py +++ b/services/user_service/test_user_service.py @@ -27,7 +27,7 @@ def test_delete_user_by_email(): assert database_manager.get_user_by_email(user_email)["email"] == user_email database_manager.delete_user_by_email(user_email) print("STEP 2: After deleting by email user is not more stored") - assert database_manager.get_user_by_email(user_email) == None + assert database_manager.get_user_by_email(user_email) == [] def test_delete_user_by_id(): From 79879d5f2d46a66e6ebf6c29634426f0ecc1e5c1 Mon Sep 17 00:00:00 2001 From: Oleh Andrus Date: Thu, 18 Nov 2021 14:53:20 +0200 Subject: [PATCH 7/7] PubSub layer basic --- services/user_service/publisher.py | 24 ++++++++++---------- services/user_service/subscriber.py | 35 ++++++++++++++--------------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/services/user_service/publisher.py b/services/user_service/publisher.py index 0265226..a26175a 100644 --- a/services/user_service/publisher.py +++ b/services/user_service/publisher.py @@ -2,21 +2,21 @@ import json from google.cloud import pubsub_v1 -os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/firebase.json" +os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/google_cloud.json" -project_id = "lohyna-user-service" -topic_id = "create_user" +def test_publisher(): + project_id = "lohfinder-app" + topic_id = "hello_topic" -publisher = pubsub_v1.PublisherClient() -topic_path = publisher.topic_path(project_id, topic_id) + publisher = pubsub_v1.PublisherClient() + topic_path = publisher.topic_path(project_id, topic_id) -data = { - 1: "Data for the first method", - 2: "Data for the second method", -} -message = json.dumps(data).encode("utf-8") + data = { + 1: "Data for the first method", + } -res = publisher.publish(topic_path, message) + message = json.dumps(data).encode("utf-8") -print(f"published message: {res.result()}") + res = publisher.publish(topic_path, message) + print(f"published message: {res.result()}") \ No newline at end of file diff --git a/services/user_service/subscriber.py b/services/user_service/subscriber.py index f0ba4c3..cbe373a 100644 --- a/services/user_service/subscriber.py +++ b/services/user_service/subscriber.py @@ -1,27 +1,26 @@ import os from google.cloud import pubsub_v1 -os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/firebase.json" -timeout = 2.0 #secs +os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.getcwd() + "/google_cloud.json" -subscriber = pubsub_v1.SubscriberClient() -subscription_path = 'projects/lohyna-user-service/subscriptions/create_user-sub' +def test_subscriber(): + subscriber = pubsub_v1.SubscriberClient() + subscription_path = 'projects/lohyna-user-service/subscriptions/create_user-sub' -print(f"Listening messages on {subscription_path}") + print(f"Listening messages on {subscription_path}") + def callback(message): + print(f"Received message : {message}") + print(f"Data : {message.data}") + print(type(message)) + message.ack() -def callback(message): - print(f"Received message : {message}") - print(f"Data : {message.data}") - print(type(message)) - message.ack() + user_pull = subscriber.subscribe(subscription_path, callback = callback) -user_pull = subscriber.subscribe(subscription_path, callback = callback) - -with subscriber: - try: - user_pull.result() - except: - user_pull.cancel() - user_pull.result() + with subscriber: + try: + user_pull.result() + except: + user_pull.cancel() + user_pull.result() \ No newline at end of file