### Navigation

- index
- modules |
- next |
- previous |
- TurboGears 2.1.5 documentation »
- Search:
- Extended Table of Contents »
- Tips and Recipes »

# ToolBox

Status: | Work in progress

Table of Contents

- ToolBox
  - Goal
  - Terminology
  - Features
  - Basic Gadgets
  - Spec
  - Write A Simple Gadget
  - Future Plans

## Goal

A platform to share gadgets which helps the development.

Developer could release their own gadgets on pypi. The gadgets will be auto-plugged into the TurboGears 2 toolbox through setuptools.

ToolBox itself is a TurboGears 2 Application. Developers could use the same skills to develop a toolbox gadget as they do to createa a TurboGears 2 application.

## Terminology

> - Gadget: The application working within toolbox. Some of them may allow you to embed them into your application.

## Features

> - Provide ‘paster toolbox’ command to start.
> - Provide a Gadget skeleton generator by paste script (not implement yet)
> - You could release your own gadgets on pypi.
> - Could detect if toolbox runs inside a project.
> - Able to select icons from Tango Icon http://tango.freedesktop.org/Tango_Icon_Library

## Basic Gadgets

ToolBox 2 Basic Gadgets are a minimum set of gadgets to provide some basic functions.

> - TGInfo gadget: browse tg2 related packages, similar to ‘paster tginfo’ command
> - TurboGears 2 API gadget: browse tg2 API
> - ToolBox 2 API gadget: browse ToolBox2 API
> - Design gadget (Project Browser), update from ToolBox template browser gadget.
> - Admin gadget (the successor to catwalk) from dbsprockets module

## Spec

> - Setuptool-based plugin system

You could define gadget hooker in setup.py:

     [turbogears2.toolboxcommand]

    - To specify the Gadget should be worked in a TurboGears 2 project,
      you could define attribute in Gadget::

     need_project = True

## Write A Simple Gadget

Create a folder containing 2 files:

    setup.py
    gadget.py

in setup.py:

    from setuptools import setup, find_packages

    setup(
      name='HelloGadget',
      version="1.0",
      description='TurboGears2 Toolbox Gadget',
      author='Fred Lin',
      install_requires=[
      "ToolBox2",
      ],
      include_package_data=True,
      package_data={'':['gadget.py']},
      entry_points="""
      [turbogears2.toolboxcommand]
      hello = gadget:HelloGadget
      """
    )

in gadget.py:

    from toolbox2.lib.base import Controller
    from tg import expose

    class HelloGadget(Controller):
        """TurboGears ToolBox Gadget.
           Show Hello World in ToolBox
        """
        __label__ ="Hello"
        __version__ = "1.0"
        __author__ = "Fred Lin"
        __email__ = "mymail+tg2[at]gmail.com"
        __copyright__ = "Copyright 2008 Fred Lin"
        __license__ = "MIT"
        __group__ = "Help"
        __icon__ = "places/start-here.png"
        need_project = False

        @expose()
        def index(self):
            return 'Hello ToolBox'

### Debugging

Run:

    $ python setup.py develop

or:

    $ python setup.py install

to register your project to setuptools. Then you could run ‘paster toolbox’ to view your gadget!

### Upload To Pypi

Run:

    $ python setup.py register bdist_egg sdist --format=zip upload

to upload both egg and source code to pypi.

### Remove Development Gadget

Run:

    $ easy_install -m hello

Check ‘paster toolbox’ list and the hello gadget is gone.

## Future Plans

> - Widget Browser gadget by ToscaWidget (Browse widgets)
> - upgrade MVC gadget with Source Highlight by ToscaWidget
> - upgrade MVC gadget with Editor function inspired by web2py
> - i18n Gadget
> - With Authorization
> - i18n
> - Model Designer Gadget rewrite with ToscaWidgets
> - Able to Custom tab
> - able to Manage tab
> - Able to custom app/tab