def login(request): consumer = None params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST consumer_service = ConsumerService() device_id = params.get('device_id', None) user_id = params.get('user_id', None) api_token = params.get('api_key', None) if not device_id: error = utils.internalServerErrorResponse("Invalid request: Device Id, user_id and api_key required for login.") logger.warning("Invalid request: Device Id, user_id and api_key required for login.") return HttpResponse(simplejson.dumps(error), mimetype='application/json') logger.info("Incoming request- login credentials: " + str(device_id) + ' ' + str(user_id) + ' ' + str(api_token)) consumer = consumer_service.login(device_id, user_id, api_token) consumer_list = [] consumer_list.append(consumer) json = serializers.serialize("json", consumer_list, fields=('id','device_id','api_token','email_address', 'name')) json_obj = json[1:len(json)-1] return HttpResponse(json_obj, mimetype='application/json')
def checkOutLocation(request): location = None params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST consumer_service = ConsumerService() user_id = params.get('user_id', None) api_token = params.get('api_key', None) consumer = consumer_service.isValidUser(user_id, api_token) if not consumer: raise InvalidUserError(user_id) location_service = LocationService() location_service.checkOut(consumer) response_data = {} response_data['status'] = 200 return HttpResponse(HttpResponse(json.dumps(response_data), mimetype='application/json'))
def checkInLocation(request): location = None params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST consumer_service = ConsumerService() user_id = params.get('user_id', None) api_token = params.get('api_key', None) location_id = params.get('location_id', None) if not location_id: raise InvalidLocationError(location_id) consumer = consumer_service.isValidUser(user_id, api_token) if not consumer: raise InvalidUserError(user_id) try: location = Location.objects.get(pk=location_id) except (KeyError, Location.DoesNotExist): raise InvalidLocationError(location_id) if not location.is_active: raise InvalidLocationError(location_id) location_service = LocationService() location_service.checkIn(consumer, location) return __refreshPlaylistHelper__(consumer, location_id)
def addToPlaylist(request): params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST location_service = LocationService() consumer_service = ConsumerService() user_id = params.get('user_id', None) api_token = params.get('api_key', None) location_id = params.get('location_id', None) music_track_id = params.get('music_track_id', None) if not location_id: raise InvalidLocationError(location_id) if not music_track_id: raise MusicTrackNotFoundError(music_track_id) consumer = consumer_service.isValidUser(user_id, api_token) if not consumer: raise InvalidUserError(user_id) if not location_service.isActive(location_id): response_data = {} location_service.checkOut(consumer) response_data['message'] = 'Location is not active' response_data['checked_out'] = True response_data['status'] = 200 return HttpResponse(HttpResponse(json.dumps(response_data), mimetype='application/json')) logger.info("Incoming request- add to playlist with parameters device_id " + str(user_id) + ", music_track_id " + str(music_track_id) + ", location_id " + str(location_id)) playlist_service = PlaylistService() try: playlist_service.addToPlaylist(consumer, location_id, music_track_id) logger.info("added music track " + str(music_track_id) + " to playlist for location " + str(location_id)) # Improve exception handling. except (KeyError, PlaylistNotFoundError, UnableToAddMusicError) as exception: error = utils.internalServerErrorResponse(exception.value) logger.error(exception.value) return HttpResponse(simplejson.dumps(error), mimetype='application/json') return __refreshPlaylistHelper__(consumer, location_id)
def voteUp(request): params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST location_service = LocationService() consumer_service = ConsumerService() user_id = params.get('user_id', None) api_token = params.get('api_key', None) location_id = params.get('location_id', None) music_track_id = params.get('music_track_id', None) if not location_id: raise InvalidLocationError(location_id) if not music_track_id: raise MusicTrackNotFoundError(music_track_id) consumer = consumer_service.isValidUser(user_id, api_token) if not consumer: raise InvalidUserError(user_id) if not location_service.isActive(location_id): response_data = {} location_service.checkOut(consumer) response_data['message'] = 'Location is not active' response_data['checked_out'] = True response_data['status'] = 200 return HttpResponse(HttpResponse(json.dumps(response_data), mimetype='application/json')) logger.info("Incoming request- vote up with parameters user_id " + str(user_id) + ", location_id " + str(location_id) + ", music_track_id " + str(music_track_id)) voting_service = VotingService() try: voting_service.voteUp(consumer, location_id, music_track_id) logger.info("Updated playlist after vote up for music track " + str(music_track_id) + " at location " + str(location_id) + " from user " + str(user_id)) except UnableToVoteError as utv: error = utils.internalServerErrorResponse(utv.value) logger.error(utv.value) return HttpResponse(simplejson.dumps(error), mimetype='application/json') return __refreshPlaylistHelper__(consumer, location_id)
def getSongLibrary(request): params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST consumer_service = ConsumerService() user_id = params.get('user_id', None) api_token = params.get('api_key', None) if not consumer_service.isValidUser(user_id, api_token): logger.warn("Not using proper user_id and api_token") #raise InvalidUserError(user_id) popular = params.get('popular', False) search_string = params.get('search_string', None) category = params.get('category', None) logger.info("Incoming request- get library with parameters device_id " + str(user_id)) library = None kwargs = {} if popular: kwargs['is_popular'] = True if search_string: kwargs_name = {'name__icontains':search_string} kwargs_artistname = {'artist__name__icontains':search_string} if category: kwargs['category_id'] = category if search_string is not None: library = MusicTrack.objects.filter(Q(**kwargs_name) | Q(**kwargs_artistname)) elif len(kwargs.keys()) > 0: library = MusicTrack.objects.filter(**kwargs) else: library = MusicTrack.objects.all() library = sorted(library, key=lambda MusicTrack: MusicTrack.name) return HttpResponse(serializers.serialize("json", library, fields= ('name', 'track_URL', 'artist', 'category', 'album'), relations={'album' : {'fields':('name', 'image_URL')}, 'category' : {'fields':('name')}, 'artist' : {'fields':('name')},}), mimetype='application/json')
def getLocations(request): params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST consumer_service = ConsumerService() user_id = params.get('user_id', None) api_token = params.get('api_key', None) if not consumer_service.isValidUser(user_id, api_token): logger.warn("Not using proper user_id and api_token") #raise InvalidUserError(user_id) return HttpResponse(HttpResponse(serializers.serialize("json", Location.objects.all().filter(is_active = True), fields=('pk', 'name', 'location', 'phone_number')), mimetype='application/json'))
def getCategories(request): params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST consumer_service = ConsumerService() user_id = params.get('user_id', None) api_token = params.get('api_key', None) if not consumer_service.isValidUser(user_id, api_token): logger.warn("Not using proper user_id and api_token") #raise InvalidUserError(user_id) return HttpResponse(HttpResponse(serializers.serialize("json", MusicCategory.objects.all(), fields=('name')), mimetype='application/json'))
class ConsumerResource(Resource): consumer_service = ConsumerService() @jwt_required() @swag_from('../../spec/consumer/save.yml') def put(self): try: self.consumer_service.session_info = current_identity req_json = json.loads(request.data) req_data = req_json.get('data', None) res_data = self.consumer_service.save(req_data) res_json = {'status': 1, 'data': res_data} except Exception as e: if e.args: res_data = e.args[0] else: res_data = e res_json = {'status': 0, 'data': res_data} return jsonify(res_json) @swag_from('../../spec/consumer/search.yml') def post(self): try: res_data = self.consumer_service.search() print(res_data) res_json = { 'status': 1, 'data': [model_to_dict(x) for x in res_data] } print(res_json) except Exception as e: print(e) if e.args: res_data = e.args[0] else: res_data = e res_json = {'status': 0, 'data': res_data} return jsonify(res_json) @swag_from('../../spec/consumer/entity.yml') def get(self): id = request.args['id'] res_json = {} res_json['status'] = 1 res_json['data'] = {} res_data = res_json['data'] res_data['id'] = id return jsonify(res_json) @jwt_required() @swag_from('../../spec/consumer/delete.yml') def delete(self): # return { 'status': 1, data : list(map( lambda x: x.json(), ItemModel.query.all() ) ) } # return { 'status': 1, data : [x.json for x in ItemModel.query.all() ] } return {'status': 1, 'data': 'HelloWorld'}
def refreshPlaylist(request): params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST location_service = LocationService() consumer_service = ConsumerService() user_id = params.get('user_id', None) api_token = params.get('api_key', None) location_id = params.get('location_id', None) if not location_id: raise InvalidLocationError(location_id) consumer = consumer_service.isValidUser(user_id, api_token) if not consumer: raise InvalidUserError(user_id) if not location_service.isActive(location_id): response_data = {} location_service.checkOut(consumer) response_data['message'] = 'Location is not active' response_data['checked_out'] = True response_data['status'] = 200 return HttpResponse(HttpResponse(json.dumps(response_data), mimetype='application/json')) location_map = location_service.getLocationMap(consumer) if not location_map: logger.warn("user with user_id" + str(user_id) + " not checked in") if location_map and str(location_map.location.pk) != location_id: logger.warn("user with user_id" + str(user_id) + " not checked in to correct location: " + location_id) logger.info("Incoming request- refresh playlist with parameters device_id " + str(user_id) + ", location_id " + str(location_id)) # Use location id to fetch current playlist return __refreshPlaylistHelper__(consumer, location_id)
def signUp(request): consumer = None params = None if (request.method == 'GET'): params = request.GET elif request.method == 'POST': params = request.POST consumer_service = ConsumerService() device_id = params.get('device_id', None) if not device_id: error = utils.internalServerErrorResponse("Invalid request: Device Id required for sign up.") logger.warning("Invalid request: Device Id required for sign up.") return HttpResponse(simplejson.dumps(error), mimetype='application/json') logger.info("Incoming request- sign up with credentials: " + str(device_id)) auth_token = params.get('auth_token', None) if not auth_token: password = params.get('password', '') email_address = params.get('email', '') name = params.get('name', '') consumer = consumer_service.register(device_id, password, email_address, name) else: token_type = params.get('token_type', None) facebook_id = params.get('facebook_id', '') if not token_type: error = utils.internalServerErrorResponse("Invalid token type") logger.error("Invalid token type") return HttpResponse(simplejson.dumps(error), mimetype='application/json') consumer = consumer_service.register_with_token(device_id, auth_token, token_type, facebook_id) consumer_list = [] consumer_list.append(consumer) json = serializers.serialize("json", consumer_list, fields=('id','device_id','api_token','email_address', 'name')) json_obj = json[1:len(json)-1] return HttpResponse(json_obj, mimetype='application/json')
class ConsumerResource (Resource): consumer_service = ConsumerService() @jwt_required() @swag_from('../../spec/consumer/save.yml') def put(self): try : self.consumer_service.session_info = current_identity req_json = json.loads(request.data) print("----------------") req_data = req_json.get('data', None) res_data = self.consumer_service.save(req_data) res_json = {'status': 1, 'data': res_data} except Exception as e: if e.args: res_data = e.args[0] else: res_data = e res_json = {'status': 0, 'error': res_data} return jsonify(res_json) @jwt_required() @swag_from('../../spec/consumer/search.yml') def post(self): try: self.consumer_service.session_info = current_identity req_json = json.loads(request.data) req_data = req_json.get('data', None) res_data = self.consumer_service.search(req_data) print(res_data) res_json = {'status': 1, 'data': [ model_to_dict(x) for x in res_data ]} print(res_json) except Exception as e: if e.args: res_data = e.args[0] else: res_data = e res_json = {'status': 0, 'error': res_data} return jsonify(res_json) @jwt_required() @swag_from('../../spec/consumer/entity.yml') def get(self): try: self.consumer_service.session_info = current_identity _id = request.args['id'] res_data = self.consumer_service.model(_id) res_json = {'status': 1, 'data': model_to_dict(res_data)} except Exception as e: print(e) if e.args: res_data = e.args[0] else: res_data = e res_json = {'status': 0, 'error': res_data} return jsonify(res_json) @jwt_required() @swag_from('../../spec/consumer/delete.yml') def delete(self): self.consumer_service.session_info = current_identity id = request.args['id'] req_data = {'id': id, 'active': False} res_data = self.consumer_service.save(req_data) # print(res_data) # return { 'status': 1, data : list(map( lambda x: x.json(), ItemModel.query.all() ) ) } # return { 'status': 1, data : [x.json for x in ItemModel.query.all() ] } return {'status': 1, 'message': 'Deleted successfully'}