AassetTrack: Easily manage your inventory https://candifloss.cc
Go to file
2025-03-06 11:39:41 +05:30
definitions Form validation using Marshmallow 2025-03-04 15:25:01 +05:30
functions FIxed csv upload 2025-03-05 11:54:41 +05:30
routes Added "Edit using CSV" feature 2025-03-06 11:39:41 +05:30
static Added "Edit using CSV" feature 2025-03-06 11:39:41 +05:30
templates Added "Edit using CSV" feature 2025-03-06 11:39:41 +05:30
.gitignore Removed unwanted headers and styles from old proj 2025-02-05 15:29:14 +05:30
app.py Misc minor changes 2025-02-25 23:43:01 +05:30
config.py Form validation using Marshmallow 2025-03-04 15:25:01 +05:30
LICENSE Initial commit 2025-01-29 04:57:29 +00:00
README.md Update README 2025-02-25 13:10:35 +05:30
requirements.txt Initialize 2025-01-29 10:57:19 +05:30

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 in definitions/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.
    • intAttribute:
      • A type of number, but only accepts integers.
    • floatAttribute:
      • A type of number, but only accepts integers.
    • dateAttribute:
      • HTML input type date
    • 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 a validate() functions to validate the configuration
  • Additional validation is done in functions/validate_config.py

definitions/models.py:

  • Uses SQLAlchemy from flask_sqlalchemy
  • Handles creation of tables and managing its data
  • Function create_asset_model dynamically defines a class based on the configuration in config.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
  • 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