AassetTrack: Easily manage your inventory
https://candifloss.cc
definitions | ||
functions | ||
routes | ||
static | ||
templates | ||
.gitignore | ||
app.py | ||
config.py | ||
LICENSE | ||
README.md | ||
requirements.txt |
Python Flask CRUD Application
A minimal python flask app for inventory management, with some basic functionality:
- Fetch and display items from the MySQL db as an html table
- Add new items to the db (individually) using a form
- Edit existing (individual)items in the db using a for
- Delete (individual)items in the db
- Add a batch of new items from a csv file
- Edit a batch of existing items with new data from a csv file
- Let the user preview and edit the csv data in a table before submission
- Use an admin-defined configuration to decide the attributes of an item, and how to manage the db and data
Acknowledgment
This project was originally forked from this project, although it has undergone significant improvent, and resembles nothing like it.
File structure:
.
├── app.py
├── config.py
├── definitions
│ ├── attribute.py
│ └── models.py
├── functions
│ ├── process_csv.py
│ ├── validate_config.py
│ └── validate_values.py
├── routes
│ ├── confirm_save.py
│ ├── create.py
│ ├── delete.py
│ ├── export_csv.py
│ ├── update.py
│ ├── upload.py
│ └── viewall.py
├── static
│ └── edited_csv.js
└── templates
├── create.html
├── csv_preview.html
├── delete.html
├── update.html
├── upload.html
└── viewList.html
Files:
app.py
:
- The main application file.
- The app does not start if the configuration is invalid.
config.py
:
Configuration of the app
- Mysql details
- The attributes of items are listed in a list,
item_attributes
- The list concists of items of the class
Attribute
and its sub-classes, defined indefinitions/attribute.py
definitions/attribute.py
:
- Defines the type of data we use in the app
- Classes:
Attribute
:- Base class with basic properties.
- Not used in the app directly.
textAttribute
:- Sub-class of
Attribute
for string data. - Html input type is usually
text
.
- Sub-class of
intAttribute
:- A type of
number
, but only accepts integers.
- A type of
floatAttribute
:- A type of
number
, but only accepts integers.
- A type of
dateAttribute
:- HTML input type
date
- HTML input type
selectAttribute
:- For drop-down selection menu to choose from pre-defined options
- Other data types are not defined now. They may be implemented in future versions, but not now.
- The classes/subclass have their own
__init__
functions, as well as avalidate()
functions to validate the configuration - Additional validation is done in
functions/validate_config.py
definitions/models.py
:
- Uses
SQLAlchemy
fromflask_sqlalchemy
- Handles creation of tables and managing its data
- Function
create_asset_model
dynamically defines a class based on the configuration inconfig.py
functions/validate_config.py
:
- A function validate the configure file.
- Returns "Ok" or some error message
- Most of the validation is handled by the class's own
validate()
, but some things need external validation
functions/validate_values.py
:
- Checks for invalid values in data submitted by the user
- Returns None or some error messages
functions/process_csv.py
:
- Extract data from the uploaded csv file
- The delimiter is '|'
routes/viewall.py
& templates/viewList.html
:
- Fetch and display all items in the db
routes/export_csv.py
:
- Download all the data as a csv file
routes/delete.py
& templates/delete.html
:
- Delete a single item.
- Preview the item and ask for confirmation before deletion
routes/create.py
& templates/create.html
:
- Form to insert a new item to the db
- Validate data on submit before insertion
- Display validation errors
routes/update.py
& templates/update.html
:
- Form to edit an existing item in the db
- Validate data on submit before updating
- Display validation errors
routes/upload.py
, templates/upload.html
, templates/csv_preview.html
, static/edited_csv.js
:
- Upload a csv file
- Check file format and data validity
- Error messages in case of invalid file or data
- If no errors and data is valid, proceed to redirect and preview the csv data in 2 tables:
- New items:
- Editable table
- Submit in a hidden
form
after editing
- Existing items:
- Non-editable table
- Not submitted in the form or added to db
- New items:
- The javascript function ensures the edited final data in the editable table is submitted instead of the original data from the file
- Data is submitted to
/confirm_save
routes/confirm_save.py
:
- Validate the submitted form data in the csv/table
- Insert data to db in case of successful validation
- Redirect to
templates/csv_preview.html
in case of validation errors. templates/csv_preview.html
will display the error messages.
Requires fixing
- The csv uploading code is buggy
To be implemented
Edit a batch of items using csv:
- Same work-flow as adding new data from csv:
- Upload csv
- Validate
- Preview existing items in an editable table
- Preview non-existant items in a non-editable, non-submittable table
- Submit edited table data
- Validate data
- Update items in db or show error messages
- Can be done by reusing the code for adding new data from csv