Skip to main content

ImageButler

Simple image server built on Flask.

Developed Python version: Python 3.6.

https://travis-ci.org/ViiSiX/ImageButler.svg?branch=R%2F0.0

Installation

Using pip

pip install ImageButler

Configuration & Environment Variables

Create image_butler.conf referring following example:

SQLALCHEMY_DATABASE_URI = 'sqlite:////<path-to-your>/ImageButler.db'
SERVER_NAME = 'image.local-domain:5000'
REDISLITE_PATH = '<path-to-your>/ImageButler.rdb'
REDISLITE_WORKER_PID = '<path-to-your>/workers.pid'

IMAGEBUTLER_MAX_THUMBNAIL = 150, 150
IMAGEBUTLER_API_IMAGES_LIMIT = 5
IMAGEBUTLER_MAX_IMAGE_SIZE = '1M'

Export environment variables:

export FLASK_APP=imagebutler
export IMAGEBUTLER_CONFIGS=path/to/your/image_butler.conf

For others configuration please referring to documents of Flask, Flask-Login, Flask-SQLAlchemy… (please check requirements.txt).

Database Init

flask db init
flask db migrate
flask db upgrade

Note: - For MySQL and MariaDB please don’t create your database in utf8_bin collate since it will break the application. - Also for MySQL and MariaDB, after run the migrate command, go and edit your migrations/versions/<some-hex>_.py

from sqlalchemy.dialects.mysql import LONGBLOB
# ...
# ... replace the old fileContent line with
sa.Column('fileContent', LONGBLOB(), nullable=False),
# ...

Run

flask run

User management

flask user create your@email.address
flask user get your@email.address
flask user change_pass your@email.address

Upload image

For example we use cURL to upload the image.

curl -X PUT \
    http://image.local-domain:5000/api/v0/image \
    -H 'content-type: multipart/form-data' \
    -F 'file=@/path/to/your/image.png;type=image/png' \
    -F username=1a339c02-404a-4b66-9fbb-cb30fb417c14 \
    -F 'password=knwAAOfLBcnkWzGxo0G/ZUzq9ukLb+gf5H/1nmPr7BE+im03qZarW4TvwVepYmi/cg9dEw+N4HDfLqQRfXBSdNawy7YkOQgwOYiRRq3t2PSjYd+Pme4SrMWUE1BYW5rt' \
    -F 'description=Image #1'

We got the result:

{
    "return": {
        "success": {
            "file_name": "ca4ffe9f192f4f358e4981ceaafd8068.jpg",
            "path": "/serve/image/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg",
            "thumbnail": "/serve/thumbnail/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg",
            "description": "Dog's Image"
        }
    }
}

You can go to http://image.local-domain:5000/serve/image/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg to see your image.

Update your image’s description

curl -X POST \
      http://image.local-domain:5000/api/v0/image \
      -H 'content-type: application/json' \
      -d '{
        "username": "1a339c02-404a-4b66-9fbb-cb30fb417c14",
        "password": "knwAAOfLBcnkWzGxo0G/ZUzq9ukLb+gf5H/1nmPr7BE+im03qZarW4TvwVepYmi/cg9dEw+N4HDfLqQRfXBSdNawy7YkOQgwOYiRRq3t2PSjYd+Pme4SrMWUE1BYW5rt",
        "filename": "ca4ffe9f192f4f358e4981ceaafd8068.jpg",
        "description": "Cat's image"
    }'

Then we got the similar result of create new image:

{
    "return": {
        "success": {
            "file_name": "ca4ffe9f192f4f358e4981ceaafd8068.jpg",
            "path": "/serve/image/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg",
            "thumbnail": "/serve/thumbnail/1/ca4ffe9f192f4f358e4981ceaafd8068.jpg",
            "description": "Cat's Image"
        }
    }
}

Delete an image

curl -X DELETE \
      http://image.local-domain:5000/api/v0/image \
      -H 'content-type: application/json' \
      -d '{
        "username": "1a339c02-404a-4b66-9fbb-cb30fb417c14",
        "password": "knwAAOfLBcnkWzGxo0G/ZUzq9ukLb+gf5H/1nmPr7BE+im03qZarW4TvwVepYmi/cg9dEw+N4HDfLqQRfXBSdNawy7YkOQgwOYiRRq3t2PSjYd+Pme4SrMWUE1BYW5rt",
        "filename": "ca4ffe9f192f4f358e4981ceaafd8068.jpg",
    }'

Get your images

curl -X POST \
    http://image.local-domain:5000/api/v0/images \
    -H 'content-type: application/json' \
    -d {
        "username": "1a339c02-404a-4b66-9fbb-cb30fb417c14",
        "password": "knwAAOfLBcnkWzGxo0G/ZUzq9ukLb+gf5H/1nmPr7BE+im03qZarW4TvwVepYmi/cg9dEw+N4HDfLqQRfXBSdNawy7YkOQgwOYiRRq3t2PSjYd+Pme4SrMWUE1BYW5rt",
        "page": 1
    }

History

0.0.4 (Dec 13th, 2017)

  • Hot fix #26 and #28

  • Added option to config max image file size

0.0.3 (Dec 10th, 2017)

  • Integrating with tox and travis

  • Add unit tests for imagebutler.utils module

  • API for add, modify, delete image

  • API for listing all the user’s images

  • Add thumbnail column to Image table

0.0.2 (Nov 13th, 2017)

  • Support for problem with MySQL/MariaDB and utf8_bin collation

  • Update API for adding image description

  • Update document

  • Add Flask-Cors

  • Include init.d script for Debian

0.0.1 (Nov 11th, 2017)

  • 0.0.1b1: Update document to display in pypi

  • 0.0.1b0: Include document to the package

  • Create, select, update user via command

  • REST API to upload files

  • Serving image via URLs

Metadata

Release files for ImageButler 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ImageButler 0.0.4
File Size Uploaded
ImageButler-0.0.4.tar.gz 1.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for ImageButler 0.0.4
File Interpreter ABI Platform
ImageButler-0.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 1.5 MB

Release files / ImageButler-0.0.4.tar.gz

Download URL ImageButler-0.0.4.tar.gz
Size 1.4 MB
Tags Source
SHA-256 checksum
How to use checksums
e0c98c678893ba78cae05cd16a55ae9b5b4ba0859d646d18b201f3d00908dfa3
BLAKE2b-256 checksum
How to use checksums
29c79e4702ae7dc62f19bf25f4d61b5783b22f54bc4efec86fd4ff54e4d21984
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / ImageButler-0.0.4-py3-none-any.whl

Download URL ImageButler-0.0.4-py3-none-any.whl
Size 19.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e4bd7d32cf779c33bf061e738cc545b3d45f2bd6810c9fd74ea18cae376e02de
BLAKE2b-256 checksum
How to use checksums
b90afd2512674e29f1cf2436bbf8a43a512bae04cced126c6e43067f2a2dee0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page