Exemplo n.º 1
0
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)