# TurboGears

TurboGears è un framework per la creazione di applicazioni web ed è composto, nativamente, da varie librerie Python come MochiKit, SQLObject, CherryPy, Kid e Nose.
È stato creato nel 2005 da Kevin Dangoor come web framework per l'ancora inedito prodotto Zesty News. Quando, alla fine del settembre 2005, fu rilasciato come prodotto open source, ricevette più di 30000 download.
TurboGears è progettato rispettando il pattern MVC, model-view-controller, come Struts o Ruby on Rails, e pensato per rendere più rapido lo sviluppo di applicazioni web e per renderne più facile la manutenzione.

## Componenti di Turbogears

Ecco un elenco dei principali componenti, che vengono installati nativamente, di TurboGears:
* SQLObject (è il Model): si interfaccia al database, trasformando le chiamate ad oggetti in chiamate relazionali e viceversa (ORM). Può creare da zero il database o interfacciarsi ad uno esistente.
* SQLAlchemy può essere usato come alternativa a SQLObject, ma dalla versione 1.1 diventa l'ORM di default.
* Kid (è il View): è la parte di frontend, ciò che viene renderizzato, dove tutti i templates sono file XHMTL o XML. Permette l'inclusione di codice Python usando le specifiche XMLish.
* Genshi è un'alternativa a Kid. È molto simile alla sintassi del kid. Per ulteriori dettagli vedi il paragrafo 'template plugin'.
* CherryPy (è la Controller): è un middleware che permette di programmare applicazioni web scrivendo gestori di eventi (event handler) che ritornano i dati (nel caso di Turbogears) al template. Questi possono essere anche in formato JSON.
* Pylons / Paste sostituiranno CherryPy come controller nelle future release di turbogears.
* MochiKit è una parte opzionale di TurboGears. È una libreria JavaScript che permette lo sviluppo con questo linguaggio in maniera più Pythonica. È soprattutto usata per implementare funzionalità AJAX e fornisce un'interfaccia asincrona per gli stream di dati forniti in formato JSON.
* Nose come libreria per i test.

## Template plugin

Sistemi di template diversi da Kid possono essere usati tramite un sistema di plugin. Attualmente esistono plugin per Genshi, Cheetah, Django templates, Mako e Jinja.
Nello stesso sistema possono essere usati diversi tipi di template.

## Storia

Nel gennaio del 2007 Kevin Dangoor lascia il progetto e Alberto Valverde diventa il suo successore: di seguito si dimette a causa di altri impegni personali. Alberto è ancora coinvolto nella comunità TurboGears attraverso il suo progetto ToscaWidgets. Il progetto TurboGears attualmente è gestito da un gruppo di sviluppatori, coordinati da Mark Ramm (come sviluppatore leader di TurboGears 2) e Florent Aide (come il responsabile del rilascio Turbogears 1.x).
Nel giugno 2007 la comunità ha iniziato a sperimentare l'utilizzo delle API di Turbogears sui componenti e protocolli usati in Pylons (si dice che i due framework alla fine verranno "fusi" insieme). Comunque la documentazione di Turbogears 2 smentisce questo.
Alla fine del 2008 Turbogears può vantarsi di avere una comunità attiva con più di 3000 utenti sulla sua mailing list, di avere un libro edito da Prentice Hall e pubblicato nel novembre del 2006 e di avere progetti open source e progetti proprietari attualmente utilizzati nel mondo reale. Lo sviluppo procede ad un ritmo moderato ma costante ed è stato alimentato anche da un recente successo di partecipazione al progetto come Google Summer of Code, organizzazione nel 2008. TurboGears 1.1 è finalmente avviato, con diverse versioni beta, nel 2008 (attualmente è ancora in beta), ed TurboGears 2 è entrato nella fase release candidate nel mese di marzo 2009.

## Futuro di Turbogears

Attualmente lo sviluppo avviene in due branch principali:
1. Il branch di TurboGears 1.x, basato sul codice originale e che usa CherryPy come web application server.
2. TurboGears 2 (trunk), che fondamentalmente riscrive le API di Turbogears 1 per riadattarle alla libreria Pylons.
TurboGears 1.1 sarà una versione più recente di TurboGears 1.0, che continua ad utilizzare le stesse API. Le principali differenze fra la versione 1.1 e 1.0 sono la scelta di un differente sistema, di default, per template(da Kid a Genshi) ed un diverso ORM(da SQLObject a SQLAlchemy). La versione 1.1 serve come passaggio intermedio fra 1.0 e la versione 2.0 (basata sulla libreria Pylons).
Recentemente, tuttavia, sono stati compiuti buoni progressi per adeguare il codice di base 1.x di CherryPy 3.0 ed è stato creato un nuovo branch, il 1.5, che è attualmente in stato di alpha.
Una versione stabile di TurboGears 2 dovrebbe essere rilasciata fra il primo ed il secondo trimestre del 2009.