Example #1
0
def upload_plant(request):
    index, type_, root = 'plants', 'planttype', 'plant'

    if request.user is None:
        raise Forbidden()

    if request.method == 'POST':
        pic = request.POST.get('picture')
        name = request.POST.get('name', '')
        if not name:
            name = str(uuid4())

        if pic not in (None, ''):
            name, ext = _save_pic(pic, request, name)
            filename = name + ext
        else:
            filename = None

        # TODO: check if plant exist first
        # Add to Elastic Search
        doc = {
            'user': request.user.id,
            'timestamp': datetime.datetime.utcnow(),
            'filename': filename,
            'gravatar': gravatar_image_url(request.user.email),
            'geo_longitude': request.POST.get('longitude'),
            'geo_latitude': request.POST.get('latitude'),
            'geo_accuracy': request.POST.get('accuracy'),
            'name': name,
        }
        logger.debug("Indexing plant %s: %r", name, doc)
        res = request.db.index(doc, index, type_, name)
        if not res['ok']:
            logger.error("Error while creating plant %s", name)
            logger.error(res)
            raise HTTPServerError()
        request.db.refresh()
        request.session.flash('Plant registered')
        return HTTPFound(location='/%s/%s' % (root, name))

    return _basic(request)
Example #2
0
def _upload(request, index, type_, root):
    if request.user is None:
        raise Forbidden()

    if request.method == 'POST':
        pic = request.POST.get('picture')
        file_uuid = request.POST.get('name', str(uuid4()))
        if pic is not None:
            file_uuid, ext = _save_pic(pic, request, file_uuid)
        else:
            ext = '.bin'

        # Add to Elastic Search
        doc = {
            'user': request.user.id,
            'timestamp': datetime.datetime.utcnow(),
            'filename': file_uuid + ext,
            'gravatar': gravatar_image_url(request.user.email),
            'geo_longitude': request.POST.get('longitude'),
            'geo_latitude': request.POST.get('latitude'),
            'geo_accuracy': request.POST.get('accuracy'),
            'name': request.POST.get('name')
        }

        res = request.db.index(doc, index, type_, file_uuid)
        if not res['ok']:
            logger.error("Error while saving index %r for %r",
                         index, file_uuid)
            logger.error(res)
            raise HTTPServerError()

        request.db.refresh()
        request.session.flash('Image uploaded')
        return HTTPFound(location='/%s/%s' % (root, file_uuid + ext))

    return _basic(request)