def update(request): """Updates a User or UserProfile It is important to note that UserUpdateForm only updates the fields on User and UserProfile that are passed in, and does not have to update the entire object """ user = request.user from htk.apps.accounts.forms.update import UserUpdateForm user_update_form = UserUpdateForm(user, request.POST) user_profile_update_form = user_update_form.get_profile_form() if user_update_form.is_valid() and user_profile_update_form.is_valid(): updated_user = user_update_form.save() updated_profile = user_profile_update_form.save() response = json_response_okay() else: ( errors, field_errors, ) = get_form_errors(user_update_form) ( profile_errors, profile_field_errors, ) = get_form_errors(user_profile_update_form) obj = { HTK_API_JSON_KEY_STATUS: HTK_API_JSON_VALUE_ERROR, 'errors': errors + profile_errors, 'field_errors': field_errors + profile_field_errors, } response = json_response(obj) return response
def get_user_leagues(request): # data = wrap_data(request) user = request.user client = get_yahoo_fantasy_sports_client_for_user(user) leagues = client.get_user_leagues() #data['api_response'] = leagues response = json_response(leagues.json_data) #response = _r('htk/lib/yahoo/fantasysports/api_response.html', data) return response
def async_task_status(request, result_id): from celery.result import AsyncResult result = AsyncResult(result_id) # check if the task is ready from htk.api.utils import json_response response = json_response({ # possible states: PENDING | STARTED | RETRY | FAILURE | SUCCESS # see celery/result.py 'state' : result.state, 'ready' : result.ready(), }) return response
def username(request): """Update a User's username """ user = request.user username_form = ChangeUsernameForm(user, request.POST) if username_form.is_valid(): username_form.save(user) response = json_response_okay() else: obj = { HTK_API_JSON_KEY_STATUS: HTK_API_JSON_VALUE_ERROR, 'error': get_form_error(username_form) } response = json_response(obj) return response
def username(request): """Update a User's username """ user = request.user username_form = ChangeUsernameForm(user, request.POST) if username_form.is_valid(): username_form.save(user) response = json_response_okay() else: obj = { HTK_API_JSON_KEY_STATUS: HTK_API_JSON_VALUE_ERROR, 'error' : get_form_error(username_form) } response = json_response(obj) return response
def slack_webhook_view(request): """Handles a Slack webhook request https://api.slack.com/outgoing-webhooks """ event = extract_post_params(request.POST, SLACK_WEBHOOK_PARAMS) if is_valid_webhook_event(event, request): from htk.lib.slack.utils import handle_event payload = handle_event(event) if payload: response = json_response(payload) else: response = HttpResponse(status=200) else: raise Http404 return response
def email_add(request): user = request.user add_email_form = AddEmailForm(user, request.POST) if add_email_form.is_valid(): domain = request.get_host() user_email = add_email_form.save(domain=domain) response = json_response_okay() else: errors = [] for error in add_email_form.non_field_errors(): errors.append(error) obj = { HTK_API_JSON_KEY_STATUS: HTK_API_JSON_VALUE_ERROR, 'errors': errors, } response = json_response(obj) return response
def async_download_result(request, result_id, result_is_json=False, content_type='text/plain', filename=None): """View to download the result of an async task as a file If `result_is_json` is `True`, infer filename and content_type """ from celery.result import AsyncResult result = AsyncResult(result_id) if request.GET.get('ping'): # only check if the file is ready from htk.api.utils import json_response response = json_response({ 'ready': result.ready(), }) else: # attempt to download file if result.ready(): from django.http import HttpResponse result_data = result.get() if result_is_json: from htk.apps.async_task.utils import extract_async_task_result_json_values content, content_type, filename = extract_async_task_result_json_values( result_data) else: if filename is None: from htk.apps.async_task.constants import CONTENT_TYPE_FILE_EXTENSIONS file_extension = '.%s' % CONTENT_TYPE_FILE_EXTENSIONS.get( content_type, 'txt') filename = 'result' % file_extension else: pass content = result_data response = HttpResponse(content, content_type=content_type) response[ 'Content-Disposition'] = 'attachment; filename="%s"' % filename else: from htk.utils.http.response import HttpResponseAccepted response = HttpResponseAccepted() return response
def suggest(request): """This API endpoint supports User autocomplete """ from htk.apps.accounts.formatters import DEFAULT_USER_SUGGEST_FORMATTER from htk.apps.accounts.search import search_by_username_name query = request.GET.get('q') if query: query = query.strip() user_results = search_by_username_name(query) formatted_results = [DEFAULT_USER_SUGGEST_FORMATTER(user) for user in user_results] obj = { 'data' : { 'results' : formatted_results, }, } response = json_response(obj) else: response = json_response_error() return response
def alexa_skill_webhook_view(request): """Handles an Amazon Alexa skill webhook request Sample Request { "session": { "sessionId": "SessionId.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "application": { "applicationId": "amzn1.ask.skill.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }, "attributes": {}, "user": { "userId": "amzn1.ask.account.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }, "new": true }, "request": { "type": "IntentRequest", "requestId": "EdwRequestId.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "locale": "en-US", "timestamp": "2017-05-29T21:37:27Z", "intent": { "name": "ExampleIntent", "slots": {} } }, "version": "1.0" } """ request_json = json.loads(request.body) event = extract_post_params(request_json, ALEXA_SKILL_WEBHOOK_PARAMS) if is_valid_alexa_skill_webhook_event(event, request): from htk.lib.alexa.utils import handle_event payload = handle_event(event) if payload: response = json_response(payload) else: response = HttpResponse(status=200) else: raise Http404 return response
def suggest(request): """This API endpoint supports User autocomplete """ from htk.apps.accounts.formatters import DEFAULT_USER_SUGGEST_FORMATTER from htk.apps.accounts.search import search_by_username_name query = request.GET.get('q') if query: query = query.strip() user_results = search_by_username_name(query) formatted_results = [ DEFAULT_USER_SUGGEST_FORMATTER(user) for user in user_results ] obj = { 'data': { 'results': formatted_results, }, } response = json_response(obj) else: response = json_response_error() return response
def async_download_result(request, result_id, result_is_json=False, content_type='text/plain', filename=None): """View to download the result of an async task as a file If `result_is_json` is `True`, infer filename and content_type """ from celery.result import AsyncResult result = AsyncResult(result_id) if request.GET.get('ping'): # only check if the file is ready from htk.api.utils import json_response response = json_response({ 'ready' : result.ready(), }) else: # attempt to download file if result.ready(): from django.http import HttpResponse result_data = result.get() if result_is_json: from htk.apps.async_task.utils import extract_async_task_result_json_values content, content_type, filename = extract_async_task_result_json_values(result_data) else: if filename is None: from htk.apps.async_task.constants import CONTENT_TYPE_FILE_EXTENSIONS file_extension = '.%s' % CONTENT_TYPE_FILE_EXTENSIONS.get(content_type, 'txt') filename = 'result' % file_extension else: pass content = result_data response = HttpResponse(content, content_type=content_type) response['Content-Disposition'] = 'attachment; filename="%s"' % filename else: from htk.utils.http.response import HttpResponseAccepted response = HttpResponseAccepted() return response
def suggest(request): """This API endpoint supports User autocomplete First retrieve from followers and following, then search all users """ query = request.GET.get('q') if query: query = query.strip() user_results = User.objects.filter(username__istartswith=query) results = [ { 'username' : user.username, } for user in user_results ] obj = { 'data' : { 'results' : results, }, } response = json_response(obj) else: response = json_response_error() return response
def update(request): """Updates a User or UserProfile It is important to note that UserUpdateForm only updates the fields on User and UserProfile that are passed in, and does not have to update the entire object """ user = request.user from htk.apps.accounts.forms.update import UserUpdateForm user_update_form = UserUpdateForm(user, request.POST) user_profile_update_form = user_update_form.get_profile_form() if user_update_form.is_valid() and user_profile_update_form.is_valid(): updated_user = user_update_form.save() updated_profile = user_profile_update_form.save() response = json_response_okay() else: (errors, field_errors,) = get_form_errors(user_update_form) (profile_errors, profile_field_errors,) = get_form_errors(user_profile_update_form) obj = { HTK_API_JSON_KEY_STATUS: HTK_API_JSON_VALUE_ERROR, 'errors' : errors + profile_errors, 'field_errors' : field_errors + profile_field_errors, } response = json_response(obj) return response
def get_user_leagues_rosters(request): user = request.user client = get_yahoo_fantasy_sports_client_for_user(user) rosters = client.get_user_leagues_rosters() response = json_response(rosters.json_data) return response
def get_user(request): user = request.user client = get_yahoo_fantasy_sports_client_for_user(user) result = client.get_user() response = json_response(result.json_data) return response