Skip to content

Commit

Permalink
Revert "Revert "Release 12 Jan 2024 v3""
Browse files Browse the repository at this point in the history
  • Loading branch information
Sachinbisht27 authored Jan 12, 2024
1 parent 6e72684 commit ebfd787
Show file tree
Hide file tree
Showing 11 changed files with 80 additions and 62 deletions.
10 changes: 10 additions & 0 deletions api/models/call_log_event.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
from api.mixins import TimestampMixin
from api import db
from flask_sqlalchemy.query import Query as BaseQuery


class CallLogEventQuery(BaseQuery):
def call_sid_exist(self, form_data):
return (
self.filter(CallLogEvent.call_sid == form_data["CallSid"]).first()
is not None
)


class CallLogEvent(TimestampMixin, db.Model):
query_class = CallLogEventQuery
__tablename__ = "call_log_event"
id = db.Column(db.Integer, primary_key=True)
call_sid = db.Column(db.String(255))
Expand Down
1 change: 1 addition & 0 deletions api/models/registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Registration(TimestampMixin, db.Model):
user_id = db.Column(db.Integer, db.ForeignKey("user.id"))
partner_id = db.Column(db.Integer, db.ForeignKey("partner.id"))
program_id = db.Column(db.Integer, db.ForeignKey("program.id"))
language_id = db.Column(db.Integer)
district = db.Column(db.String(100), nullable=True)
state = db.Column(db.String(100), nullable=True)
parent_type = db.Column(db.String(100), nullable=True)
Expand Down
12 changes: 12 additions & 0 deletions api/models/system_phone.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
from api.mixins import TimestampMixin
from api import db
from flask_sqlalchemy.query import Query as BaseQuery


class SystemPhoneQuery(BaseQuery):
def system_phone_exists(self, url_decoded_system_phone):
return (
self.filter(
SystemPhone.phone.contains(url_decoded_system_phone[-10:])
).first()
is not None
)


class SystemPhone(TimestampMixin, db.Model):
query_class = SystemPhoneQuery
__tablename__ = "system_phone"
id = db.Column(db.Integer, primary_key=True)
phone = db.Column(db.String(50))
Expand Down
2 changes: 1 addition & 1 deletion api/models/user.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from api.mixins import TimestampMixin
from api import db
from flask_sqlalchemy import BaseQuery
from flask_sqlalchemy.query import Query as BaseQuery


class UserQuery(BaseQuery):
Expand Down
2 changes: 1 addition & 1 deletion api/models/user_program.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from api.mixins import TimestampMixin
from api import db
from api import app, models, helpers
from flask_sqlalchemy import BaseQuery
from flask_sqlalchemy.query import Query as BaseQuery
from api.helpers.common_helper import current_ist_time


Expand Down
3 changes: 1 addition & 2 deletions api/services/call_log_event_service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# This file is treated as service layer
from flask import request
from api import helpers, models, db
from api import helpers, models
from datetime import datetime
from utils.loggingutils import logger
import traceback
Expand Down
13 changes: 5 additions & 8 deletions api/services/handle_event_service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import requests
from flask import request
from api import models, db, app
from api import models, app
from . import user_service as user
from . import registration_service as registration
from . import call_log_event_service as call_log_event
Expand All @@ -10,18 +9,16 @@

class HandleEventService:
def handle_event_service(self, form_data):
call_sid_exist = db.session.query(
db.exists().where(models.CallLogEvent.call_sid == form_data["CallSid"])
).scalar()
call_sid_exist = models.CallLogEvent.query.call_sid_exist(form_data)

if call_sid_exist:
return

url_decoded_system_phone = requests.utils.unquote(form_data["To"])

system_phone_exists = db.session.query(
db.exists().where(models.SystemPhone.phone == url_decoded_system_phone)
).scalar()
system_phone_exists = models.SystemPhone.query.system_phone_exists(
url_decoded_system_phone
)

if not system_phone_exists:
return
Expand Down
1 change: 0 additions & 1 deletion config.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
% POSTGRES
)

SQLALCHEMY_TRACK_MODIFICATIONS = True
WTF_CSRF_ENABLED = True
SECRET_KEY = os.environ.get("SECRET_KEY")

Expand Down
73 changes: 36 additions & 37 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,52 +1,52 @@
# from pprint import pprint
from api import models, db, services
from flask import jsonify, request
from api import app, services, helpers
from flask import jsonify
import json
from utils.loggingutils import logger


def callback(request):
json_data = None
form_data = None
with app.app_context():
json_data = None
form_data = None

if request.method == "POST":
content_type = request.headers.get("Content-Type")
if request.method == "POST":
content_type = request.headers.get("Content-Type")

if content_type == "application/json":
json_data = request.get_json()
else:
form_data = request.form
if content_type == "application/json":
json_data = request.get_json()
else:
form_data = request.form

transaction_log_service = services.TransactionLogService()
transaction_log_service = services.TransactionLogService()

try:
if json_data and json_data.get("type", None) == "retry_failed_log":
retry_failed_webhook(transaction_log_service)
return "Success"
try:
if json_data and json_data.get("type", None) == "retry_failed_log":
retry_failed_webhook(transaction_log_service)
return "Success"

ivr_transaction_log = (
transaction_log_service.create_new_ivr_transaction_log(form_data)
)
except Exception as e:
logger.error(
f"Issues with transaction logs creation for form data {form_data}. Error message: {e}"
)
ivr_transaction_log = (
transaction_log_service.create_new_ivr_transaction_log(form_data)
)
except Exception as e:
logger.error(
f"Issues with transaction logs creation for form data {form_data}. Error message: {e}"
)

processed = process_form_data(form_data)
processed = process_form_data(form_data)

if not processed:
return jsonify(message="Something went wrong!"), 400
if not processed:
return jsonify(message="Something went wrong!"), 400

transaction_log_service.mark_ivr_transaction_log_as_processed(
ivr_transaction_log
)
else:
return (
jsonify(message="Currently, the system do not accept a GET request"),
405,
)
transaction_log_service.mark_ivr_transaction_log_as_processed(
ivr_transaction_log
)
else:
return (
jsonify(message="Currently, the system do not accept a GET request"),
405,
)

return "Success"
return "Success"


def retry_failed_webhook(transaction_log_service):
Expand All @@ -57,8 +57,7 @@ def retry_failed_webhook(transaction_log_service):
payload["log_created_on"] = log.created_on
log.processed = process_form_data(payload)
log.attempts += 1
db.session.add(log)
db.session.commit()
helpers.save(log)


def process_form_data(form_data):
Expand Down
2 changes: 1 addition & 1 deletion requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Includes dev dependencies on top of requirements.txt
-r requirements.txt
functions-framework==2.1.2
functions-framework==3.5.0
pre-commit==2.11.0
23 changes: 12 additions & 11 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
certifi==2020.12.5
chardet==4.0.0
click==7.1.2
Flask==1.1.2
requests==2.25.1
click==8.1.3
Flask==3.0.0
python-dotenv==0.15.0
Flask-SQLAlchemy==2.1
Flask-SQLAlchemy==3.1.1
functions-framework==3.5.0
idna==2.10
itsdangerous==1.1.0
Jinja2==2.11.3
MarkupSafe==1.1.1
psycopg2==2.8.6
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.1
psycopg2==2.9.9
python-dotenv==0.15.0
requests==2.25.1
SQLAlchemy==1.3.23
requests==2.31.0
SQLAlchemy==2.0.23
urllib3==1.26.3
Werkzeug==1.0.1
Werkzeug==3.0.0
watchdog==3.0.0
google-cloud-logging==3.5.0

0 comments on commit ebfd787

Please sign in to comment.