Skip to content

Commit b02bfeb

Browse files
committed
CON-297-story(bouquet): refresh channels on a bouqet
- add restful refresh endpoint - add graphql refresh endpoint [starts CON-269]
1 parent ebe8d8d commit b02bfeb

7 files changed

Lines changed: 62 additions & 15 deletions

File tree

api/v2/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from flask import Blueprint
33

44
from api.v2.controllers.channels.channels_controller import Channels
5-
from api.v2.controllers.boquets.bouquets_controller import Bouquets
5+
from api.v2.controllers.boquets.bouquets_controller import Bouquets, RefreshChannels
66

77

88
api_v2 = Blueprint('mrmpush_2', __name__, url_prefix="/v2")
@@ -14,3 +14,4 @@
1414

1515
mrm_push.add_resource(Channels, '/channels', strict_slashes=False)
1616
mrm_push.add_resource(Bouquets, '/bouquets', strict_slashes=False)
17+
mrm_push.add_resource(RefreshChannels, '/refresh/<string:api_type>/<int:bouquet_id>', strict_slashes=False)
Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
from flask import make_response, jsonify
22
from flask_restful import Resource
3-
from api.v2.helpers.bouquets.bouquets_helper import query_all_bouquets
3+
from api.v2.helpers.bouquets.bouquets_helper import query_all_bouquets, refresh_bouquet_channels
44

55

66
class Bouquets(Resource):
77
def get(self):
88
bouquets = query_all_bouquets()
99

1010
return make_response(jsonify({"bouquets": bouquets}), 200)
11+
12+
13+
class RefreshChannels(Resource):
14+
def post(self, api_type, bouquet_id):
15+
response = make_response(jsonify({'Error': 'Endpoint accepts only graphql_api/resful_api'}), 404)
16+
if (api_type == 'restful_api') or (api_type == 'graphql_api'):
17+
refresh = refresh_bouquet_channels(api_type, bouquet_id)
18+
response = make_response(jsonify(refresh['response']), refresh['code'])
19+
20+
return response

api/v2/helpers/bouquets/bouquets_helper.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import requests
12
from api.v2.models.bouquets.bouquets_model import Bouquets as BouquetsModel
23
from api.v2.models.bouquets.bouquets_schema import BouquetsSchema
4+
from api.v2.helpers.channels.channels_helper import query_bouquet_channels
35

46

57
def query_all_bouquets():
@@ -9,3 +11,32 @@ def query_all_bouquets():
911
bouquets = BouquetsSchema(many=True).dump(all_bouquets)
1012

1113
return bouquets
14+
15+
16+
def query_bouquet(bouquet_id):
17+
bouquet_query = BouquetsModel.query.filter_by(state='active', id=bouquet_id).first()
18+
bouquet = BouquetsSchema().dump(bouquet_query)
19+
return bouquet
20+
21+
22+
def refresh_bouquet_channels(api_type, bouquet_id):
23+
"""helper function for refreshing channels"""
24+
response = {'response': {'Error': 'Bouquet not found!'}, 'code': 404}
25+
bouquet = query_bouquet(bouquet_id)
26+
if bouquet:
27+
response = {'response': {"Error": "Refresh endpoint not responding appropriatly"}, 'code': 424}
28+
bouquet_channels = fetch_grapghql_channels(bouquet['refresh_url'])
29+
if bouquet_channels:
30+
response = {'response': {"channels": bouquet_channels}, 'code': 200}
31+
32+
return response
33+
34+
35+
def fetch_grapghql_channels(refresh_url):
36+
channels_query = ({"query": "{ allChannels { channels { calendarId, firebaseToken } } }"})
37+
try:
38+
response = requests.get(url=refresh_url, json=channels_query)
39+
channels = response.json()['data']['allChannels']['channels']
40+
except Exception:
41+
channels = False
42+
return channels

api/v2/helpers/channels/channels_helper.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,12 @@ def query_all_channels():
99
channels = ChannelsSchema(many=True).dump(all_channels)
1010

1111
return channels
12+
13+
14+
def query_bouquet_channels(bouquet_id):
15+
all_channels = ChannelsModel.query.filter_by(state='active', bouquet_id=bouquet_id).all()
16+
bouquet_channels = {}
17+
if all_channels:
18+
bouquet_channels = ChannelsSchema(many=True).dump(all_channels)
19+
20+
return bouquet_channels

api/v2/models/bouquets/bouquets_model.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ def __init__(self, **kwargs):
2525
self.api_key2 = kwargs['api_key2']
2626
self.auth_credentials = kwargs['auth_credentials']
2727

28-
def refresh_channels(self):
29-
"""Method for refreshing channels"""
30-
31-
# TODO: add functionality to refresh and check channels using the refreshUrl
32-
3328
def register_channels(self):
3429
"""Method for registering channels"""
3530

api/v2/models/bouquets/bouquets_schema.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
class BouquetsSchema(ma.Schema):
66
class Meta:
77
model = BouquetsModel
8-
fields = ("id", "bouquet_id", "api_key1", "api_key2"
9-
"auth_credentials", "bouquet_name", "should_refresh")
8+
fields = ("id", "bouquet_id", "api_key1", "api_key2",
9+
"auth_credentials", "bouquet_name", "should_refresh", "refresh_url")

tests/base.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,13 @@ def setUp(self):
3535
calendar_id="calendar@id.com-djfirnfn",
3636
resource_id="9ty4bejkkw",
3737
extra_atrributes='t284nff94nf', bouquet_id=1)
38-
bouquet= Bouquets(api_key1="2123",
39-
api_key2="treat44",
40-
auth_credentials='fdflfaw4', bouquet_name="Premium",
41-
should_refresh=True,
42-
refresh_url='http://localhost:5000/refresh')
43-
38+
bouquet = Bouquets(api_key1="2123",
39+
api_key2="treat44",
40+
auth_credentials='fdflfaw4',
41+
bouquet_name="Premium",
42+
should_refresh=True,
43+
refresh_url='http://localhost:8000/mrm')
44+
4445
channel.save()
4546
bouquet.save()
4647

0 commit comments

Comments
 (0)