def __add_log(request, application_key, args): """ Add the log. :param args: {dict} The log. :param is_jsonp: {bool} :return: The django response. """ form = APILogForm(key=application_key, **args) if not form.validate(): raise Http400 applications = ApplicationModel.all().filter("app_key =", form.key.data).fetch(1) if not len(applications): raise Http404 application = applications[0] # Is the log exist? logs = ( LogModel.all() .filter("title =", form.title.data) .filter("is_close =", False) .filter("application =", application.key()) .fetch(1) ) if len(logs): # update log log = logs[0] log.count += 1 log.update_time = datetime.utcnow() if not form.user.data is None and form.user.data not in log.users: log.users.append(form.user.data) else: # add the new log log = LogModel(application=application, title=form.title.data) if not form.user.data is None: log.users = [form.user.data] if not form.document.data is None: log.document = form.document.data log.user_agent = request.META.get("HTTP_USER_AGENT") log.ip = os.environ.get("REMOTE_ADDR") log.put() if log.count == 1 and application.email_notification: # send email notification to members gae_account = getattr(settings, "GAE_ACCOUNT") domain = getattr(settings, "HOST") users = UserModel.get_by_id(application.member_ids) message = mail.EmailMessage(sender=gae_account, subject="%s has a new log at Victorique." % application.title) message.to = [x.email for x in users if not x is None] message.body = "There is a new log at Victorique.\n%s\nhttps://%s/applications/%s/logs/%s" % ( log.title, domain, application.key().id(), log.key().id(), ) message.send() index = search.Index(namespace="Logs", name=str(application.key().id())) search_document = search.Document( doc_id=str(log.key().id()), fields=[ search.TextField(name="users", value=unicode(log.users)), search.TextField(name="title", value=log.title), search.TextField(name="document", value=log.document_json), search.TextField(name="ip", value=log.ip), search.TextField(name="user_agent", value=log.user_agent), search.DateField(name="update_time", value=log.update_time), ], ) index.put(search_document)