Skip to main content

logo

succulent

A lightweight framework for collecting and processing data from HTTP POST requests

PyPI Version PyPI - Python Version PyPI - Downloads AUR package Fedora package Downloads Packaging status GitHub license Build Documentation status

GitHub repo size GitHub commit activity Average time to resolve an issue Percentage of issues still open All Contributors

DOI

🔍 Detailed Insights • 📦 Installation • 🐳 Container • 🚀 Usage • 🔧 Configuration • 📄 Cite us • 🔑 License • 🫂 Contributors

Do you ever find it challenging and tricky to send sensor measurements 📏, data 📊, or GPS positions from embedded devices 📱, microcontrollers, and smartwatches to a central server? 📡 Setting up the primary data collection scripts can be a time-consuming ⏳ process, involving selecting a protocol, framework, API, and testing them out. Moreover, these scripts are often tailored for specific tasks, making them difficult to adapt to different scenarios.

But fear not! Introducing succulent 🌵, a pure Python framework that simplifies the configuration, management, collection, and preprocessing of data collected via POST requests. This framework draws inspiration from real-world data collection challenges in smart agriculture 🧠🌿, specifically plant monitoring using ESP32 devices. The main goal behind succulent is to streamline the process of configuring various data parameters and provide a range of useful functions for data transformations. By leveraging succulent, you can set up your entire data collection endpoint within minutes, freeing you from the hassle of dealing with server-side scripts. 🚀🔧

  • Free software: MIT license
  • Documentation: https://succulent.readthedocs.io/en/latest
  • Python versions: 3.8.x, 3.9.x, 3.10.x, 3.11.x, 3.12.x, 3.13.x
  • Tested OS: Windows, Ubuntu, Fedora, Alpine, Arch, macOS. However, that does not mean it does not work on others

🔍 Detailed Insights

The current version of succulent comes packed with exciting features, including, but not limited to:

  • Hassle-free generation of request URLs for seamless data collection 🌐
  • Effortless data retrieval from POST requests 📥
  • Versatile data storage options, such as CSV, JSON, SQLite, XML, and even images 🗂️📊🖼️
  • Customisable boundaries for collected data, allowing you to set minimum and maximum thresholds ⚙️

With succulent, the process of collecting, managing, and preprocessing data becomes a breeze, empowering you to focus on what truly matters—gaining valuable insights from your embedded devices, microcontrollers, and smartwatches. ⌚ So why waste precious time? ⏳ Dive into the world of succulent and unlock the true potential of your data! 💪📈

📦 Installation

pip

To install succulent with pip, use:

pip install succulent

Alpine Linux

To install succulent on Alpine Linux, use:

$ apk add py3-succulent

Arch Linux

To install succulent on Arch Linux, use an AUR helper:

$ yay -Syyu python-succulent

Fedora Linux

To install succulent on Fedora, use:

$ dnf install python3-succulent

🐳 Container

Create a docker-compose.yml file with the following content in the root directory:

version: '3.8'

services:
  app:
    image: codeberg.org/firefly-cpp/succulent:v6
    ports:
      - "8080:8080"
    volumes:
      - ./run.py:/succulent-app/run.py
      - ./configuration.yml:/succulent-app/configuration.yml
    environment:
      - GUNICORN_WORKERS=2

Next create a configuration.yml file in the root directory. Here's an example of a configuration file:

data:
  - name: 'temperature'
  - name: 'humidity'
  - name: 'light'
results:
  - enable: true
  - export: true
timestamp: true

More information regarding the configuration file and its settings can be found in the configuration section.

Then create a Python file named run.py with the following content in the root directory:

from succulent.api import SucculentAPI

api = SucculentAPI(config='configuration.yml', format='csv')

# Flask app instance, called by gunicorn
app = api.app

Once you have set up the configuration file and the Python file, build the Docker image with the following command:

docker compose build

Finally, run the Docker container with the following command:

docker compose up

🚀 Usage

Example

from succulent.api import SucculentAPI
api = SucculentAPI(host='0.0.0.0', port=8080, config='configuration.yml', format='csv')
api.start()

🔧 Configuration

Data collection

In the root directory, create a configuration.yml file and define the following:

data:
  - name: # Measure name
    min:  # Minimum value (optional)
    max:  # Maximum value (optional)

To collect images, create a configuration.yml file in the root directory and define the following:

data:
  - key: # Key in POST request

To store data collection timestamps, define the following setting in the configuration.yml file in the root directory:

timestamp: true # false by default

To access the URL for data collection, send a GET request (or navigate) to http://localhost:8080/measure.

To restrict access to the collected data, define the following setting in the configuration.yml file in the root directory:

password: 'password' # Password for data access

To store data using a password, append the password parameter to the request URL: ?password=password.

Data access

To access data via the Succulent API, define the following setting in the configuration.yml file in the root directory:

results:
  - enable: true # false by default

To access the collected data, send a GET request (or navigate) to http://localhost:8080/data. To access password-protected data, append the password parameter to the request URL: ?password=password.

Data export

To export the data, enable the export option in the configuration file:

results:
  - export: true # false by default

To export the data, send a GET request (or navigate) to http://localhost:8080/export. To export password-protected data, append the password parameter to the request URL: ?password=password. The data will be downloaded in the format specified in the configuration file.

📄 Cite us

Fister Jr., Iztok, and Tadej Lahovnik. Succulent. 0.4.0, doi:10.5281/zenodo.10402365.

🔑 License

This package is distributed under the MIT License. This license can be found online at http://www.opensource.org/licenses/MIT.

Disclaimer

This framework is provided as-is, and there are no guarantees that it fits your purposes or that it is bug-free. Use it at your own risk!

🫂 Contributors

Thanks goes to these wonderful people (emoji key):

Tadej Lahovnik
Tadej Lahovnik

💻 🐛 🤔 📖 ✅
Ayan Das
Ayan Das

💻 ⚠️
Iztok Fister Jr.
Iztok Fister Jr.

💻 🤔 🧑‍🏫
Oromion
Oromion

🐛 📦
rhododendrom
rhododendrom

🎨
Zala Lahovnik
Zala Lahovnik

📖

This project follows the all-contributors specification. Contributions of any kind welcome!

Metadata

Release files for succulent 0.4.6

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

Source distribution (sdist)

Source distribution for succulent 0.4.6
File Size Uploaded
succulent-0.4.6.tar.gz 122.1 kB Details

Built distribution (wheel)

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

Total release size: 241.0 kB

Release files / succulent-0.4.6.tar.gz

Download URL succulent-0.4.6.tar.gz
Size 122.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e679bdf9507b904f3663cf80d97188eff4cbd3248c6b9b8e78d19134de947a96
BLAKE2b-256 checksum
How to use checksums
b9a684c9e460503478cd505cbe3e2368174252b5180fccb8fbc61023677ce815
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.3.1 CPython/3.14.5 Linux/7.0.12-201.fc44.x86_64

Release files / succulent-0.4.6-py3-none-any.whl

Download URL succulent-0.4.6-py3-none-any.whl
Size 118.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1ec76aca2283f417087a56fadd60b8b60364ad3261c3c6955dd28af6a0d67f95
BLAKE2b-256 checksum
How to use checksums
f0586ca201cd45a3e7bc9b92cf82d46fc012a21e800487a91aa855cc1705b2c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.3.1 CPython/3.14.5 Linux/7.0.12-201.fc44.x86_64

Release history Release notifications | RSS feed

This release

0.4.6 This release

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.0

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

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