Commandline Args#

Various commandline args are required.

export SHOPYO_CONFIG_PROFILE=development
export FLASK_ENV=development
export FLASK_APP=app.py

SHOPYO_CONFIG_PROFILE is what is defined as keys of app_config in config.py

The reason we decouple SHOPYO_CONFIG and FLASK_ENV is that FLASK_ENV has implications beyond configs and is limited to 3 modes.

shopyo#

Usage

shopyo [OPTIONS] COMMAND [ARGS]...

CLI management for shopyo cli. For Example, to run the app in production mode you can run

shopyo --config=production run

Options

--version#

Show the flask version

--config <CONFIG NAME>#

By default config is set to “development”. Other available configurations are “testing” and “production”. For commands startapp , collectstatic and new this options has no affect.

clean#

Usage

shopyo clean [OPTIONS]

or

python manage.py clean [OPTIONS]

removes __pycache__, migrations/, shopyo.db files and drops db if present

Options

-v, --verbose#

Show all hidden outputs in terminal

--help#

Show the command usage/help message and exit

--clear-migration / --no-clear-migration#

Whether or not to clear migration folder, by default true, even without flag

--clear-db / --no-clear-db#

Whether or not to clear db, by default true, even without flag

Initialise#

Usage

shopyo initialise [OPTIONS]

or

python manage.py initialise [OPTIONS]

Creates db, migration/, adds default users, add settings. This command need to be run only once before running the project. You can also skip migration folder deleting and db clearing.

Options

-v, --verbose#

Show all hidden outputs in terminal

--help#

Show the command usage/help message and exit

--clear-migration / --no-clear-migration#

Whether or not to clear migration folder, by default true, even without flag

--clear-db / --no-clear-db#

Whether or not to clear db, by default true, even without flag

run#

Usage

shopyo run [OPTIONS]

or

python manage.py run [OPTIONS]

Run a local development server.

This server is for development purposes only. It does not provide the stability, security, or performance of production WSGI servers.

The reloader and debugger are enabled by default if FLASK_ENV=development` or FLASK_DEBUG=1.

Note

This is wrapper around the flask run command

Options

-h, --host <host>#

The interface to bind to.

-p, --port <port>#

The port to bind to.

--cert <PATH>#

Specify a certificate file to use HTTPS.

--key <FILE>#

The key file to use when specifying a certificate.

--reload / --no-reload#

Enable or disable the reloader. By default the reloader is active if debug is enabled.

--debugger / --no-debugger#

Enable or disable the debugger. By default the debugger is active if debug is enabled.

--eager-loading / --lazy-loader#

Enable or disable eager loading. By default eager loading is enabled if the reloader is disabled.

--with-threads / --without-threads#

Enable or disable multithreading.

--extra-files PATH#

Extra files that trigger a reload on change. Multiple paths are separated by ‘;’.

--help#

Show the command usage/help message and exit

rundebug#

Usage

shopyo rundebug [OPTIONS]

or

python manage.py rundebug [OPTIONS]

Run a local development server.

same as app.run(debug=True)

runserver#

Usage

shopyo runserver [OPTIONS]

or

python manage.py runserver [OPTIONS]

Run a local development server.

same as app.run(debug=False)

startapp#

Usage

shopyo startapp [OPTIONS] MODULENAME [BOXNAME]

or

python manage.py startapp [OPTIONS] MODULENAME [BOXNAME]

create a module/app MODULENAME inside modules/. If BOXNAME is provided, create the module inside modules/BOXNAME.

If box BOXNAME does not exist, it is created. If MODULENAME already exists, an error is thrown and command is terminated.

Running shopyo startapp demo will create the following:

modules/demo/
├── forms.py
├── global.py
├── info.json
├── models.py
├── static
├── templates
│   └── demo
│       ├── blocks
│       │   └── sidebar.html
│       └── dashboard.html
├── tests
│   ├── test_demo_functional.py
│   └── test_demo_models.py
└── view.py

Example usage with box:

# create module `dumpling` inside `box__plate`
shopyo startapp dumpling box__plate

startbox#

Usage

shopyo startbox [OPTIONS] BOXNAME [BOXNAME]

or

shopyo startbox [OPTIONS] BOXNAME [BOXNAME]

Creates an empty box

shopyo startbox box__api

createmodule#

Usage

shopyo createmodule apple

creates modules/apple

shopyo createmodule pear box__default

creates modules/box__default/pear

collectstatic#

Usage

shopyo collectstatic [OPTIONS] [SRC]

or

python manage.py collectstatic [OPTIONS] [SRC]

Copies static/ in modules/ or modules/SRC into /static/modules/

modules/
└── box__default/
    ├── auth/
    │   └── static
    └── appadmin/
         └── static

For the modules structure shown above:

  • to collect static in only one module, run either of two commands:

$ shopyo collectstatic box__default/auth
$ shopyo collectstatic modules/box__default/auth
  • to collect static in all modules inside a box, run either of two commands below:

$ shopyo collectstatic box__default
$ shopyo collectstatic modules/box__default
  • to collect static in all modules run either of the two commands below:

$ shopyo collectstatic
$ shopyo collectstatic modules

Options

-v, --verbose#

Show all hidden outputs in terminal

--help#

Show the command usage/help message and exit

Arguments

SRC
Optional argument
the module path relative to modules/ where static/ exists.

new#

Usage

shopyo new [OPTIONS] [PROJNAME]

Creates a new shopyo project.

By default it will create the project(folder) of same name as the parent folder. If PROJNAME is provided shopyo new somename, it will create PROJNAME/PROJNAME under parent folder

shopyo new --modules # or -m will add default modules else will create empty project

For Example, say your current working directory is /path/to/blog. Assuming you have created a virtual environment env and activated it, and installed shopyo. Apart from env folder, your cwd should be empty. Then after running:

shopyo new

the following blog project is created

blog
├── env
├── blog
│   ├── docs
│   ├── modules
│   │   └── ...
│   ├── __init__.py
│   ├── sphinx_source
│   │   └── ...
│   ├── static
│   │   └── ...
│   ├── tests
│   │   └── ...
│   ├── .test.prod.env
│   ├── __init__.py
│   ├── app.py
│   ├── cli.py
│   ├── config.py
│   ├── config_demo.json
│   ├── conftest.py
│   ├── init.py
│   ├── manage.py
│   └── wsgi.py
├── .gitignore
├── dev_requirements.txt
├── MANIFEST.in
├── pytest.ini
├── README.md
├── requirements.txt
├── setup.py
└── tox.ini

Some files are omitted above but the general structure is as shown above. Now you can initialise your project by running:

path/to/blog/blog$ shopyo initialise

and run the project as:

path/to/blog/blog$ shopyo run

You now have a complete Flask based blog application

Options

-v, --verbose#

Show all hidden outputs in terminal

--help#

Show the command usage/help message and exit

Arguments

PROJNAME
Optional argument
if provided, creates the new project folder PROJNAME/PROJNAME inside cwd

db#

Usage

shopyo db [OPTIONS]

or

manage.py db [OPTIONS]

db migrate and db upgrate are used to migrate the db

Note

This is wrapper around the flask db of flask-migrate

routes#

Usage

shopyo routes

or

manage.py routes

Shows all routes and methods

Note

This is wrapper around the flask routes command

rename#

Usage

shopyo rename box__default/auth box__default/auth_
shopyo rename auth auth_

Renames app including changing module name in info.json

audit#

Usage

shopyo audit

Finds issues with apps as well as with the over all project