def create_response(self, request, data, response_class=HttpResponse, **response_kwargs): """ Intercepts the default create_reponse(). Checks for existing saved search matching the user and url. If one doesn't exist, it creates a new saved search with daily email and the date/time created in the notes. Creates new JSON formatted "data" based on the success, failure, or error in saved search creation. Returns this data to the default create_response(). """ # Confirm email was provided, and that the user exists email = request.GET.get('email', '') if not email: data = {'email': 'No email provided'} return super(SavedSearchResource, self).create_response(request, data, response_class=HttpResponse, **response_kwargs) else: user = User.objects.get_email_owner(email=email) if not user: data = {'email': 'No user with email %s exists' % email} return super(SavedSearchResource, self).create_response(request, data, response_class=HttpResponse, **response_kwargs) # Confirm that url was provided, and that it's a valid .jobs search url = request.GET.get('url', '') url = unquote(url) if not url: data = {'url': 'No .JOBS feed provided'} return super(SavedSearchResource, self).create_response(request, data, response_class=HttpResponse, **response_kwargs) else: label, feed = validate_dotjobs_url(url) if not (label and feed): data = {'url': 'This is not a valid .JOBS feed'} return super(SavedSearchResource, self).create_response(request, data, response_class=HttpResponse, **response_kwargs) # Create notes field noting that it was created as current date/time now = datetime.datetime.now().strftime('%A, %B %d, %Y %l:%M %p') notes = 'Saved on ' + now if url.find('//') == -1: url = 'http://' + url netloc = urlparse(url).netloc notes += ' from ' + netloc search_args = {'url': url, 'label': label, 'feed': feed, 'user': user, 'email': email, 'frequency': 'D', 'day_of_week': None, 'day_of_month': None, 'notes': notes} new_search = False # if there's no search for that email/user, create it try: search = SavedSearch.objects.get(user=search_args['user'], email__iexact=search_args['email'], url=search_args['url']) except SavedSearch.DoesNotExist: search = SavedSearch(**search_args) search.save() search.send_initial_email() new_search = True data = {'email': email, 'frequency': 'D', 'new_search': new_search} return super(SavedSearchResource, self).create_response(request, data, response_class=HttpResponse, **response_kwargs)