Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgraded flask package and dependencies #68

Merged
merged 25 commits into from
Jan 12, 2024
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
ea22c18
upgraded flask package and dependencies
Sachinbisht27 Jan 9, 2024
6b62702
fixed the pre-commit error
Sachinbisht27 Jan 10, 2024
1217c65
Fixes the issues raised for the upgarded packages
Sachinbisht27 Jan 10, 2024
4b56381
Updated branch for staging build
Sachinbisht27 Jan 10, 2024
a5be2fb
added function framework in requirements
Sachinbisht27 Jan 10, 2024
2941ee9
removed function framework from requirements
Sachinbisht27 Jan 10, 2024
1970354
removed function framework from requirements
Sachinbisht27 Jan 10, 2024
d29c1b8
downgraded the flask version
Sachinbisht27 Jan 10, 2024
6e5a063
downgraded the watchdog version
Sachinbisht27 Jan 10, 2024
42c2f49
added upgraded versions for flask function framework and watchdog
Sachinbisht27 Jan 11, 2024
975dff6
Updated branch for staging build
Sachinbisht27 Jan 11, 2024
4aa40f3
removed greenlet from requirements
Sachinbisht27 Jan 11, 2024
d730a1e
upgraded requests package in requirements
Sachinbisht27 Jan 11, 2024
6f8e869
fixes for handling the request data as per content type
Sachinbisht27 Jan 11, 2024
d7bc869
Updated branch for staging build
Sachinbisht27 Jan 11, 2024
75c399c
downgraded request version
Sachinbisht27 Jan 11, 2024
66b044e
upgraded request version
Sachinbisht27 Jan 11, 2024
b0d30ef
Updated branch for staging build
Sachinbisht27 Jan 11, 2024
7e76974
Updated branch for staging build
Sachinbisht27 Jan 11, 2024
5b61e1e
Added language id in Registration table model
Sachinbisht27 Jan 11, 2024
aa105d8
Updated branch for staging build
Sachinbisht27 Jan 11, 2024
f3002cc
Updated branch for staging build
Sachinbisht27 Jan 11, 2024
5eb75c2
Merge pull request #69 from DostEducation/feature/66-fixes-for-the-up…
Sachinbisht27 Jan 12, 2024
9bedcf7
Merge branch 'develop' of https://github.com/DostEducation/RP_IVR_cal…
Sachinbisht27 Jan 12, 2024
03de53c
Fixed merge conflicts
Sachinbisht27 Jan 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: pre-commit/[email protected]
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.9'
- uses: pre-commit/[email protected]
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is the fix for the pre-commit failure issue.

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
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The BaseQuery class has been renamed as query now and is situated within the query module.



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
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the SQLALCHEMY_TRACK_MODIFICATIONS because getting an error for the use of this after upgrading flask-SQLalchemy.

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

Expand Down
75 changes: 41 additions & 34 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,44 +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):
if request.method == "POST":
json_data = request.get_json()
form_data = request.form
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"

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}"
)
with app.app_context():
json_data = None
form_data = None

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

transaction_log_service = services.TransactionLogService()

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

if not processed:
return jsonify(message="Something went wrong!"), 400
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}"
)

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,
)
processed = process_form_data(form_data)

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,
)

return "Success"
return "Success"


def retry_failed_webhook(transaction_log_service):
Expand All @@ -49,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
Loading