
Security News
vlt Launches "reproduce": A New Tool Challenging the Limits of Package Provenance
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
Welcome to Banana Manager! Banana Manager is a Python package designed to connect to a database and create a simple web app that displays and allows updates to selected tables. This tool is perfect for non-technical end-users who need to interact with database tables without using complex DBA tools.
To install Banana Manager, simply use pip:
pip install banana-manager
Also, remember to install the appropriate database connector for your project, like pyodbc
or psycopg2
. If you’re unsure, SQLAlchemy will inform you when you load your application.
Additionally, consider installing a production server like waitress
:
pip install waitress
At the end of this tutorial, you’ll have a folder structure similar to the following:
my_manager
└─ app.py
└─ config.yaml
└─ my_tables
└─ my_group_of_tables.yaml
└─ another_group_of_tables.yaml
Create a config.yaml
file in the root folder of your project with the following structure:
connection:
drivername: <optional str>
username: <optional str>
password: <optional str>
host: <optional str>
port: <optional str>
database: <optional str>
dataPath: "data"
tablePaths: ["tables"]
title: "Banana Database Manager"
theme: <optional str>
defaultColDef: <optional dict>
defaultGridOptions: <optional dict>
The tables can be defined using YAML files located in the folders specified in the config.yaml
. If no folder is specified, create a new folder named "tables" in the root folder.
Each YAML file represents a group containing a list of tables. Here’s the structure:
groupName: <optional string>
displayOrder: <optional integer>
tables:
- name: <string>
schemaName: <optional string>
displayName: <optional string>
columns:
- name: <string>
displayName: <optional string>
dataType: (optional)
data: <optional dict>
type: <string>
columnDef: <optional dict>
- <other columns>
orderBy: (optional)
- column: <string>
desc: <optional bool>
- <other columns>
limit: <optional int>
defaultColDef: <optional dict>
gridOptions: <optional dict>
- <other tables>
The dataType
argument customizes how column data is interpreted and displayed. It consists of two keys:
type
(str): Specifies the data type. Available options are:
default
: Standard data type, no special handling.color
: Interprets the data as a color, rendering a visual color representation.enumerator
: Maps raw database values to user-friendly labels.foreign
: Creates a relationship with another table for enhanced data display.data
(dict, optional): Contains additional information required for specific type
values. Each type requires a different data
structure:
default
: No data
required (ignored if provided).color
: No data
required (ignored if provided).enumerator
: A dictionary mapping raw database values (keys) to display labels (values). For example:
data: {"active": "Active", "inactive": "Inactive"}
Here, a database value of "active"
is displayed as "Active"
in the frontend.foreign
: Specifies the relationship details for joining with another table. Structure:
data:
tableName: <string> # Name of the related table.
schemaName: <string> # Schema of the related table.
columnName: <string> # Column in the related table to join with.
columnDisplay: <string> # Column in the related table to display in the frontend.
Example:
data:
tableName: "users"
schemaName: "public"
columnName: "id"
columnDisplay: "username"
This configuration joins the current table with the users
table on the id
column, displaying the username
column instead of the raw id
.You can set the columnDef
property in the Column
and PrimaryKey
models and set the defaultColDef
property in the Config
and Table
models.
The column definitions set in the Config
model are applied to every table and column in the application, but they will be overwritten by the definitions set in the Table
, and lastly overwritten by the definitions set in Column
and PrimaryKey
.
BananaManager does not offer support to every single definition of the original AG Grid, specially the Enterprise-only properties, but are some highlights that were fully tested:
true
if this column is editable, otherwise false
.true
for this column to be hidden.false
to disable sorting which is enabled by default.true
to use the default filter component.Create an app.py file in the root folder:
from banana import Banana
app = Banana()
MY_PORT = 4000
if __name__ == "__main__":
app.run_server(port=MY_PORT)
This will load a development server in the selected port. Consider running a production server with waitress
:
from banana import Banana
from waitress import serve
app = Banana()
MY_PORT = 4000
if __name__ == "__main__":
serve(app.server, port=MY_PORT)
Version | Description | Release date |
---|---|---|
v0.1 | Load table and update cells | First half of July 2024 |
v0.2 | Table groups | Second half of July 2024 |
v0.3 | Logging and configurations | First half of August 2024 |
v0.4 | Insert rows and color themes | Second half of August 2024 |
v0.5 | Change history | September 2024 |
v0.6 | Color and enumerator data types | December 2024 |
v0.7 | Undo changes | First quarter of 2025 |
v0.8 | Delete rows | Second quarter of 2025 |
v0.9 | User authentication | 2025 |
v0.10 | Advanced user authorization | 2025 |
Banana Manager is released under the MIT License. See the LICENSE file for more details.
FAQs
Ready-to-go web app for end-users to interact with tables in a database.
We found that banana-manager demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
Research
Security News
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Research
The Socket Research Team discovered a malicious npm package, '@ton-wallet/create', stealing cryptocurrency wallet keys from developers and users in the TON ecosystem.