# Flask Script

***

**1. Initialize a Flask App with Celery Worker**

```python
from flask import Flask
from flask.cli import FlaskGroup
from celery import Celery

app = Flask(__name__)
celery = Celery('tasks', backend='redis://localhost', broker='redis://localhost')

manager = FlaskGroup(app)
manager.add_command('worker', celery.worker_main())
```

**2. Add a CLI Command to Run a Background Task**

```python
from flask import Flask
from flask.cli import FlaskGroup
import subprocess

app = Flask(__name__)

def run_task():
    subprocess.call(['my_script.sh'])

manager = FlaskGroup(app)
manager.add_command('run_task', run_task)
```

**3. Configure the Flask Configuration with CLI Options**

```python
from flask import Flask
from flask.cli import FlaskGroup
from flask_cli.options import Config

app = Flask(__name__)
app.config.from_object('config.DevelopmentConfig')

manager = FlaskGroup(app)
manager.add_command('config', Config())
```

**4. Dump the Database into a JSON File**

```python
from flask import Flask
from flask.cli import FlaskGroup
import json

app = Flask(__name__)

def dump_database():
    with open('database.json', 'w') as f:
        json.dump(app.db.session.query(app.db.model).all(), f)

manager = FlaskGroup(app)
manager.add_command('dump_database', dump_database)
```

**5. Reset the Database**

```python
from flask import Flask
from flask.cli import FlaskGroup
import os

app = Flask(__name__)

def reset_database():
    os.remove('database.sqlite')
    app.db.create_all()

manager = FlaskGroup(app)
manager.add_command('reset_database', reset_database)
```

**6. Run the Flask Development Server**

```python
from flask import Flask
from flask.cli import FlaskGroup

app = Flask(__name__)

manager = FlaskGroup(app)
manager.add_command('runserver', 'flask run')
```

**7. Create a Custom CLI Command to Do Anything**

```python
from flask import Flask
from flask.cli import FlaskGroup

app = Flask(__name__)

def my_custom_command():
    print('Hello from my custom command!')

manager = FlaskGroup(app)
manager.add_command('my_custom_command', my_custom_command)
```

**8. Create a Factory for CLI Commands**

```python
from flask import Flask
from flask.cli import FlaskGroup, with_appcontext

app = Flask(__name__)

def create_command_factory(func):
    @with_appcontext
    def wrapper():
        func(app)
    return wrapper

manager = FlaskGroup(app)
manager.add_command('my_command', create_command_factory(my_custom_command))
```

**9. Create a Custom Command that Accepts Arguments**

```python
from flask import Flask
from flask.cli import FlaskGroup, with_appcontext

app = Flask(__name__)

def my_command(name):
    print(f'Hello, {name}!')

manager = FlaskGroup(app)
manager.add_command('my_custom_command', with_appcontext(my_command))
```

**10. Create a Custom Command with Options**

```python
from flask import Flask
from flask.cli import FlaskGroup
import click

app = Flask(__name__)

@click.option('--name', '-n', default='World')
def my_custom_command(name):
    print(f'Hello, {name}!')

manager = FlaskGroup(app)
manager.add_command('my_custom_command', my_custom_command)
```

**11. Import a Module with CLI Commands**

```python
from flask import Flask
from flask.cli import FlaskGroup
import my_module

app = Flask(__name__)

manager = FlaskGroup(app)
manager.import_commands(my_module)
```

**12. Disable the Default Help Command**

```python
from flask import Flask
from flask.cli import FlaskGroup

app = Flask(__name__)

manager = FlaskGroup(app)
manager.add_command('my_custom_command', 'flask my_custom_command')
manager.disable_help_command = True
```

**13. Customize the Help Command**

```python
from flask import Flask
from flask.cli import FlaskGroup, HelpCommand

class MyHelpCommand(HelpCommand):

    def __init__(self, *args, **kwargs):
        kwargs['help_width'] = 120
        kwargs['sort_commands'] = False
        super().__init__(*args, **kwargs)

app = Flask(__name__)

manager = FlaskGroup(app)
manager.help_command = MyHelpCommand
```

**14. Test Your Flask Application**

```python
from flask import Flask
from flask.cli import FlaskGroup
import unittest

app = Flask(__name__)

@unittest.TestCase
def my_test():
    client = app.test_client()
    response = client.get('/')
    assert response.status_code == 200

manager = FlaskGroup(app)
manager.test_command = unittest.main
```

**15. Create a Custom Database Command**

```python
from flask import Flask
from flask.cli import FlaskGroup
from flask_sqlalchemy_cli import Manager

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
app.db = SQLAlchemy(app)

manager = Manager(app.db)
manager.add_command('initdb', 'flask initdb')
manager.add_command('dropdb', 'flask dropdb')
manager.add_command('shell', 'flask shell')
```

**16. Generate a Flask Application**

```python
from flask import Flask
from flask_script import Manager, Server

app = Flask(__name__)
manager = Manager(app)

manager.add_command("runserver", Server())
```

**17. Manage Database Migrations**

```python
from flask import Flask
from flask_script import Manager, Migrate, MigrateCommand
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

migrate = Migrate(app, db)
manager = Manager(app)

manager.add_command('db', MigrateCommand)
```

**18. Generate a Fresh Database**

```python
from flask import Flask
from flask_script import Manager, Shell

app = Flask(__name__)
manager = Manager(app)

@manager.shell
def make_shell_context():
    return dict(app=app, db=db)
```

**19. Start a Development Server with Debug**

```python
from flask import Flask
from flask_script import Manager, Server

app = Flask(__name__)
manager = Manager(app)

manager.add_command("runserver", Server(host='0.0.0.0', debug=True))
```

**20. Customize Command Output**

```python
from flask import Flask
from flask_script import Manager, Command

class CustomCommand(Command):

    def run(self, args):
        print("Hello from a custom command!")

app = Flask(__name__)
manager = Manager(app)

manager.add_command("custom", CustomCommand())
```

**21. Create a Factory for Flask Shell**

```python
from flask import Flask
from flask_script import Manager, Shell

app = Flask(__name__)
manager = Manager(app)

def make_shell_context():
    return dict(app=app, db=db)

manager.add_command("shell", Shell(make_context=make_shell_context))
```

**22. Manage User Management**

```python
from flask import Flask
from flask_script import Manager, Server

app = Flask(__name__)
manager = Manager(app)

def create_user():
    print("Creating a user...")

def delete_user():
    print("Deleting a user...")

manager.add_command("create_user", create_user)
manager.add_command("delete_user", delete_user)
```

**23. Integrate with the Logging System**

```python
from flask import Flask
from flask_script import Manager, Server, Command

app = Flask(__name__)
manager = Manager(app)

class LogCommand(Command):

    def run(self, args):
        logger.info("Writing to the log file...")

manager.add_command("log", LogCommand())
```

**24. Create a Custom Flask Application**

```python
from flask import Flask
from flask_script import Manager, Server

app = Flask(__name__)
manager = Manager(app)

def run_app():
    app.run()

manager.add_command("run", run_app)
```

**25. Migrate the Database**

```python
from flask import Flask
from flask_script import Manager, Migrate, MigrateCommand
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

migrate = Migrate(app, db)
manager = Manager(app)

manager.add_command('db', MigrateCommand)
```

**26. Reset the Database**

```python
from flask import Flask
from flask_script import Manager, Shell

app = Flask(__name__)
manager = Manager(app)

def reset_database():
    print("Resetting the database...")

manager.add_command("reset_db", reset_database)
```

**27. Generate a Custom Command**

```python
from flask import Flask
from flask_script import Manager, Command

app = Flask(__name__)
manager = Manager(app)

class CustomCommand(Command):

    def run(self, args):
        print("Custom command executed!")

manager.add_command("custom", CustomCommand())
```

**28. Create a Factory for Custom Commands**

```python
from flask import Flask
from flask_script import Manager, Command

app = Flask(__name__)
manager = Manager(app)

def create_command(name, description):
    return Command(name, description)

manager.add_command("cmd1", create_command("cmd1", "Command 1"))
manager.add_command("cmd2", create_command("cmd2", "Command 2"))
```

**29. Manage Database Initialization**

```python
from flask import Flask
from flask_script import Manager, Server, Shell

app = Flask(__name__)
manager = Manager(app)

def create_database():
    print("Creating the database...")

manager.add_command("create_db", create_database)
```

**30. Manage User Creation**

```python
from flask import Flask
from flask_script import Manager, Server, Shell

app = Flask(__name__)
manager = Manager(app)

def create_user():
    print("Creating a new user...")

manager.add_command("create_user", create_user)
```

**31. Manage Email Sending**

```python
from flask import Flask
from flask_script import Manager, Server, Shell

app = Flask(__name__)
manager = Manager(app)

def send_email():
    print("Sending an email...")

manager.add_command("send_email", send_email)
```

**32. Manage Data Import**

```python
from flask import Flask
from flask_script import Manager, Server, Shell

app = Flask(__name__)
manager = Manager(app)

def import_data():
    print("Importing data...")

manager.add_command("import_data", import_data)
```

**33. Manage Data Export**

```python
from flask import Flask
from flask_script import Manager, Server, Shell

app = Flask(__name__)
manager = Manager(app)

def export_data():
    print("Exporting data...")

manager.add_command("export_data", export_data)
```

**34. Manage Data Validation**

```python
from flask import Flask
from flask_script import Manager, Server, Shell

app = Flask(__name__)
manager = Manager(app)

def validate_data():
    print("Validating data...")

manager.add_command("validate_data", validate_data)
```

**35. Manage Model Training**

```python
from flask import Flask
from flask_script import Manager, Server, Shell

app = Flask(__name__)
manager = Manager(app)

def train_model():
    print("Training the model...")

manager.add_command("train_model", train_model)
```

**36. Manage Model Evaluation**

```python
from flask import Flask
from flask_script import Manager, Server, Shell

app = Flask(__name__)
manager = Manager(app)

def evaluate_model():
    print("Evaluating the model...")

manager.add_command("evaluate_model", evaluate_model)
```
