Thanks for this! If you could send the patch as an attachment or stick it in a ticket on trac.turbogears.org it would help a lot because e-mail can add line breaks that keep the patch from applying cleanly.
--Mark Ramm On Tue, Feb 10, 2009 at 7:54 PM, anita kean <[email protected]> wrote: > > Hello > > I'm a turbogears newbie and I volunteered to fix some > of the tg1 docs but I needed to learn a bit to get myself > started. So I've been staring at the tg2 docs a while. > > There are a few typos in them, and I'm attaching output of an > svn diff docs/main/*.rst > of mostly spelling/repeated word corrections. > (ispell and good old awk) > > Hope it's ok to attach the file here - it seemed a bit long to try > and copy/paste into pastebin. > > Anita > > ps - the long lines are as I found the docs, but they make it > hard spotting the changes. > > Index: SimpleWidgetForm.rst > =================================================================== > --- SimpleWidgetForm.rst (revision 6277) > +++ SimpleWidgetForm.rst (working copy) > @@ -60,7 +60,7 @@ > Simple form field widgets generally correspond to the default browser inputs > but some, like the date picker, have extra smarts to make your user's lives > easier. You can get an overview of which widgets are available on your > install > -by checking out paster tg-info, and you can find more detaills about > particular widgets by using the the toscawidgets widget browser: > +by checking out paster tg-info, and you can find more details about > particular widgets by using the toscawidgets widget browser: > > http://toscawidgets.org/documentation/WidgetBrowser/ > > @@ -85,7 +85,7 @@ > """The WidgetsList defines the fields of the form.""" > > name = forms.TextField(validator=validators.NotEmpty()) > - email = fomss.TextField(validator=validators.Email(not_empty=True), > + email = forms.TextField(validator=validators.Email(not_empty=True), > attrs={'size':30}) > comment = forms.TextArea(validator=validators.NotEmpty()) > notify = forms.CheckBox(label="Notify me") > @@ -224,7 +224,7 @@ > Validation ensures that the values you're getting are the values your method > is expecting. Sometimes this is critically important, other times it's > convenient, but quite a bit of time in web programming is traditionally tied > -up in displaying a form, processing the form, validating it's values, and -- > +up in displaying a form, processing the form, validating its values, and -- > in the event of errors-- redisplaying the form with the errors marked. > TurboGears widgets were created explicitly to solve this problem. > > @@ -243,7 +243,7 @@ > """The WidgetsList defines the fields of the form.""" > > name = forms.TextField(validator=validators.NotEmpty()) > - email = fomss.TextField(validator=validators.Email(not_empty=True), > + email = forms.TextField(validator=validators.Email(not_empty=True), > attrs={'size':30}) > comment = forms.TextArea(validator=validators.NotEmpty()) > notify = forms.CheckBox(label="Notify me") > Index: License.rst > =================================================================== > --- License.rst (revision 6277) > +++ License.rst (working copy) > @@ -5,7 +5,7 @@ > > :Status: Official > > -**Summary: There's no GPL incompatible provisos sneaked into any of these > licenses, and all of TG2 and it's underlying components are not copy_left > licensed, so you can include them in your projects -- even if they are > propritary** > +**Summary: There's no GPL incompatible provisos sneaked into any of these > licenses, and all of TG2 and its underlying components are not copy_left > licensed, so you can include them in your projects -- even if they are > proprietary** > > Note that the following paragraphs are **not legal advice**. They are one > person's interpretations of the software licenses involved. If you have any > questions or concerns about the licenses, you should consult a lawyer. > > Index: DevStatus.rst > =================================================================== > --- DevStatus.rst (revision 6277) > +++ DevStatus.rst (working copy) > @@ -3,7 +3,7 @@ > > TurboGears 2 arose out of some discussions about how similar the TurboGears > 1 and Pylons frameworks were to each other. We shared similar philosophies, > and some similar implementation choices (we both used SQLObject and switched > to SQLAlchemy for example). > > -TurboGears is currently based on the as yet unreleased Pylons 0.9.7. We > plan to do a preview release of TG2 (version 1.9.7a1) shortly after the > Pylons release. We will will then track Pylons as they approach 1.0, with > the intention of releasing TurboGears 2 at essentially the same time as > Pylons 1.0. > +TurboGears is currently based on the as yet unreleased Pylons 0.9.7. We > plan to do a preview release of TG2 (version 1.9.7a1) shortly after the > Pylons release. We will then track Pylons as they approach 1.0, with the > intention of releasing TurboGears 2 at essentially the same time as Pylons > 1.0. > > Current plans are to have the first official release 1.9.7a1 sometime early > in April, and to have a full 2.0 release by the end of the year. But open > source projects are notoriously difficult to schedule, and it's possible that > 2.0 will come out significantly before then, or that it will take longer. > > Index: FormBasics.rst > =================================================================== > --- FormBasics.rst (revision 6277) > +++ FormBasics.rst (working copy) > @@ -26,7 +26,7 @@ > #. Make it easy to re-display form results with associated error messages. > > Rather than re-invent the wheel for these three things TurboGears has brought > -together and integrated a some tools that specialize these things. > +together and integrated some tools that specialize these things. > > Validation is handled by FormEncode, form generation by ToscaWidgets, and > model > introspection+automatic form and validator generation can be provided by > DBSprockets. > @@ -42,7 +42,7 @@ > > login_form = make_form(User, identifier='myLoginForm', action='/login', > limitFields=['user_name', 'password']) > > -This form is actually a ToscaWidgets CompoundWidget object, with member > widgets for each of the form fields, and with some code to wrap them up in a > form and display them to the user. DBSprockets takes the User object > introspects it's table information, and makes a form for you. In this case, > we're limiting the fields that show up on the form to those needed for the > user_name and password columns. > +This form is actually a ToscaWidgets CompoundWidget object, with member > widgets for each of the form fields, and with some code to wrap them up in a > form and display them to the user. DBSprockets takes the User object > introspects its table information, and makes a form for you. In this case, > we're limiting the fields that show up on the form to those needed for the > user_name and password columns. > > We can then add that widget to the list of widgets available in the template > by adding it to tmpl_context in your controller:: > > @@ -61,13 +61,13 @@ > def login(self, user_name, password): > return dict() > > -If there are errors, they will be saved in ``tmpl_context.form_errors`` > which is automatically available in your template. And the widget is > designed to look trough tmpl_context.form_errors for error messages and > display them along side the form when it's displayed. That way you can use > the same template, and the same widget to redisplay the form along with the > errors whenever there are form validation errors. > +If there are errors, they will be saved in ``tmpl_context.form_errors`` > which is automatically available in your template. And the widget is > designed to look through tmpl_context.form_errors for error messages and > display them along side the form when it's displayed. That way you can use > the same template, and the same widget to redisplay the form along with the > errors whenever there are form validation errors. > > -To take advantage of this we can assign our original ``display_login`` page > as the ``error_handler`` for this form. like this:: > +To take advantage of this we can assign our original ``display_login`` page > as the ``error_handler`` for this form, like this:: > > @validate(form=login_form, error_handler=display_login) > def login(self, user_name, password): > return dict() > > -If there's a validation error, control will be passed to display_login, but > this time there will be some data in tmpl_context so that when the form > widget is rendered, it will get those validation error messages and display > them for you: > +If there's a validation error, control will be passed to display_login, but > this time there will be some data in tmpl_context so that when the form > widget is rendered, it will get those validation error messages and display > them for you. > > Index: Validation.rst > =================================================================== > --- Validation.rst (revision 6277) > +++ Validation.rst (working copy) > @@ -37,7 +37,7 @@ > @expose('json') > @validate(validators={"a":validators.Int(), "b":validators.Email}) > def two_validators(self, a=None, b=None, *args): > - errors = [{key, value} in pylons.c.form_errors.itteritems()] > + errors = [{key, value} in pylons.c.form_errors.iteritems()] > values = pylons.c.form_values > return dict(a=a, b=b, errors=str(errors), values=str(values)) > > @@ -152,7 +152,7 @@ > > @validate(forms.myform, error_handler=process_form_errors) > > -The method in question will be called, with the unvalidated data as it's > params. > +The method in question will be called, with the unvalidated data as its > params. > And error validation messages will be stored in pylons.tmpl_context. > > Here's a quick example of how this all works: > @@ -208,9 +208,9 @@ > fields. > > Again, for information about ``Invalid`` exception objects, creating your own > -validators, schema and FormEncode in general, a refer to the `FormEncode > +validators, schema and FormEncode in general, refer to the `FormEncode > Validator`_ documentation and don't be afraid to check the > -``Formencode.validators`` source. It's often more clear than the docs. > +``Formencode.validators`` source. It's often clearer than the docs. > > .. _`FormEncode Validator`: http://formencode.org/docs/Validator.html > > @@ -239,4 +239,4 @@ > users. In the end, it's usually far simpler to use the > validation framework. > > -.. _FormEncode: http://formencode.org/ > \ No newline at end of file > +.. _FormEncode: http://formencode.org/ > Index: QuickStart.rst > =================================================================== > --- QuickStart.rst (revision 6277) > +++ QuickStart.rst (working copy) > @@ -44,7 +44,7 @@ > > $ paster setup-app development.ini > > -As soon as that's done. Point your browser at http://localhost:8080/, and > you'll see a nice welcome page with the inform(flash) message and current > time. > +As soon as that's done, point your browser at http://localhost:8080/, and > you'll see a nice welcome page with the inform(flash) message and current > time. > > If you're exploring TurboGears 2 after using TurboGears 1, you may notice > that the old config file `dev.cfg` file is now `development.ini`. > And by default the 'paster serve' is not in auto-reload mode. > @@ -61,7 +61,7 @@ > > * development.ini : The system configuration is laid on development.ini for > development configuration > * helloworld/controllers/root.py gets called to handle URL, and do whatever > needs doing to create the data for the welcome page. > - * helloworld/templates/index.html is the template turbogears uses to > render the the welcome page from the dictionary returned by the root > controller. It's an standard XHTML with some simple namespaced attributes. > + * helloworld/templates/index.html is the template turbogears uses to > render the welcome page from the dictionary returned by the root controller. > It's standard XHTML with some simple namespaced attributes. > * helloworld/public/ is the place to hold static files, such as pictures, > javascript, or css files. > > You can easily edit development.ini to change the default server port used > by the built-in web server:: > Index: BasicMoves.rst > =================================================================== > --- BasicMoves.rst (revision 6277) > +++ BasicMoves.rst (working copy) > @@ -83,7 +83,7 @@ > > So far we're getting somewhere, we've been returning plain text for every > incoming request. But you might have noticed how the default welcome page > work. > > -We can edit index template, use controllers to define new url's. But let's > take it one step further and create yet another new URL, plug plug real > templates into the controllers, and this time rather than returning a string, > we'll return a dictionary: > +We can edit index template, use controllers to define new urls. But let's > take it one step further and create yet another new URL, plug real templates > into the controllers, and this time rather than returning a string, we'll > return a dictionary: > > .. code-block:: python > > @@ -112,7 +112,7 @@ > > Browse http://localhost:8080 to see the change. > > -TurboGears 2 uses the Genshi templating system by deault for controlling > dynamic content in your markup. > +TurboGears 2 uses the Genshi templating system by default for controlling > dynamic content in your markup. > Template arguments are used to pass variables and other dynamic content to > the template. > > To create more skeletons for your templates, just copy the default > index.html template that was generated when your project was created. > Index: WhatsNew.rst > =================================================================== > --- WhatsNew.rst (revision 6277) > +++ WhatsNew.rst (working copy) > @@ -20,7 +20,7 @@ > > Well, Pylons is committed to being officially template engine agnostic, ORM > agnostic, etc. On the other hand TurboGears is committed to providing a > "Full-Stack" for web development. So, the two communities have different, > but compatible priorities. If you think about it Pylons provides a great set > of tools for building a full stack framework, and people had been asking for > a full-stack Pylons implementation for a long time. And TurboGears 2 will > provide that. > > -There are a lot of benefits to having a full-stack. You can build form > helpers which do all sorts of interesting things (introspect model objects to > make web-based forms, automatically display form errors, etc) because you can > make some assumptions about what tools will be available and what will be > used. In particular, you can start building plugable website components > much more easily, because you are building on a known set of tools. > +There are a lot of benefits to having a full-stack. You can build form > helpers which do all sorts of interesting things (introspect model objects to > make web-based forms, automatically display form errors, etc) because you can > make some assumptions about what tools will be available and what will be > used. In particular, you can start building pluggable website components > much more easily, because you are building on a known set of tools. > > Why not use CherryPy 3? > ~~~~~~~~~~~~~~~~~~~~~~~ > @@ -69,7 +69,7 @@ > * All template engines now have search paths to find the templates. > The default template directory is on the search path so using dotted > notation in @expose decorators has been deprecated. > - * Object dispatch does not support dots in URL's the way TurboGears 1 did. > + * Object dispatch does not support dots in URLs the way TurboGears 1 did. > * CherryPy request and response objects replaces with WebOb request and > response objects. > > Command changes > Index: SQLAlchemy.rst > =================================================================== > --- SQLAlchemy.rst (revision 6277) > +++ SQLAlchemy.rst (working copy) > @@ -20,10 +20,10 @@ > > Your quickstarted project will have a subpackage called `model`, made up of > the following files: > > -* `__init__.py`: This is where the database access is setup. Your tables > should be imported into this module, and you're highly encouaged to define > them in a separate module - `entities`, for example. > +* `__init__.py`: This is where the database access is set up. Your tables > should be imported into this module, and you're highly encouraged to define > them in a separate module - `entities`, for example. > * `auth.py`: This file will be created if you enabled authentication and > authorization in the quickstart. It defines the three tables > :mod:`repoze.what.quickstart` relies on: `User` (for the registered members > in your website), `Group` (for the teams a member may belong to, and to which > you can assign permissions) and `Permission` (a permission granted to one or > more groups); it also defines two intermediary tables: One for the > many-to-many relationship between the groups and the permissions, and another > one for the many-to-many relationship between the users and the groups. > > -Auto-reflection of tables has to happen after all the configuration is read, > and the app is setup, so we provide simple init_model method (defined in > `model/__init__.py`) that is not called until after everything is setup for > you. > +Auto-reflection of tables has to happen after all the configuration is read, > and the app is set up, so we provide simple init_model method (defined in > `model/__init__.py`) that is not called until after everything is set up for > you. > > > Defining your own tables > @@ -50,9 +50,9 @@ > Choosing data Types > --------------------- > > -When you're setting up the column types for your tables, you don't have to > think about your target database and it's type system. SQLAlchemy provides > a flexible underlying type system that, along with the table definition > syntax above, allows you to database independent table objects. > +When you're setting up the column types for your tables, you don't have to > think about your target database and its type system. SQLAlchemy provides a > flexible underlying type system that, along with the table definition syntax > above, allows you to define database-independent table objects. > > -SQLAlchemy provides a number of built-in types which it automatically maps > to underling database types. If you want the latest and greatest listing > just type: > +SQLAlchemy provides a number of built-in types which it automatically maps > to underlying database types. If you want the latest and greatest listing > just type: > > .. code-block:: python > > @@ -81,7 +81,7 @@ > Properties > ~~~~~~~~~~~ > > -While you define the Columns, you could specify several properties to > control the column's behaviors. > +As you define a column, you can specify several properties to control the > column's behavior. > > ============ ========== > property value > @@ -109,7 +109,7 @@ > If you don't define the __init__ method. You will need to update the > properties of a movie object after it's been created. like this:: > > >>> entry = Movie() > - >>> entry.title = 'Dragula' > + >>> entry.title = 'Dracula' > >>> entry.year = '1931' > >>> entry.description = 'vampire movie' > > @@ -144,7 +144,7 @@ > > Pylons (the TurboGears 2 underground framework) defines a setup-app function > that paster will connect to the database and create all the tables we've > defined. > > -The default database setup configurations are defined in development.ini. So > if you just run the script without modification of development.ini, the > script will create a single-file database, which called 'devdata.db', in your > project directory. If you change your data model and want to apply the new > database, go delete 'devdata.db' and run the 'paster setup-app' command again. > +The default database setup configurations are defined in development.ini. So > if you just run the script without modification of development.ini, the > script will create a single-file database called 'devdata.db' in your project > directory. If you change your data model and want to apply the new database, > delete 'devdata.db' and run the 'paster setup-app' command again. > > TurboGears 2 does support database migrations. But that's another tutorial. > > Index: OfflineInstall.rst > =================================================================== > --- OfflineInstall.rst (revision 6277) > +++ OfflineInstall.rst (working copy) > @@ -14,7 +14,7 @@ > $ cd eggs > $ easy_install tg.devtools > > -To get the latest versions from SVN and install offline you can do a a SVN > +To get the latest versions from SVN and install offline you can do an SVN > checkout of the TG2 sources, and a mercurial checkout of Pylons, and install > those on top of the above eggs. > > Index: Genshi.rst > =================================================================== > --- Genshi.rst (revision 6277) > +++ Genshi.rst (working copy) > @@ -7,7 +7,7 @@ > Simple genshi example > -------------------------- > > -Genshi is an XML template language based on Kid, which in turn was inspired > by zope's TAL. Genshi is the default template language of TurboGears2, and > it provides a very similar API to it's predecessor. > +Genshi is an XML template language based on Kid, which in turn was inspired > by zope's TAL. Genshi is the default template language of TurboGears2, and > it provides a very similar API to its predecessor. > > Genshi Templates look like XHTML. Here's a sample genshi template: > > @@ -34,7 +34,7 @@ > </body> > </html> > > -This particular template does a couple of things, but it's main function is > to take each variable that's been made available in the template namespace > and display it's name and it's value. > +This particular template does a couple of things, but its main function is > to take each variable that's been made available in the template namespace > and display its name and its value. > > Every template language in the world needs to provide a variable > substitution syntax, and the standard way in python seems to be ``${item}``, > and that's exactly what you do in Genshi. Take a variable wrap it in curly > braces and throw a $ in front, and the value of the variable will be > substituted in when the template is rendered. Genshi is nice in that it > allows you to use full python expressions in the substitution. > > @@ -44,11 +44,11 @@ > > it evaluates the python expression ``repr(locals()['data'][item])`` and > provides the string representation of the proper item. > > -And if you look a line up, you'll see where item is defined as one of the > list of keys in the dictionary representing the local variables. The way this > works is that py:for acts just like a standard python for loop, repeating the > <div> that it's (and it's children if there were any) once for each item in > the dictionary. > +And if you look a line up, you'll see where item is defined as one of the > list of keys in the dictionary representing the local variables. The way this > works is that py:for acts just like a standard python for loop, repeating the > <div> that it's in (and its children if there were any) once for each item in > the dictionary. > > -In TurboGears 2 the template namespace is going to be populated with the > items you return in your controller's return dictionary, along with a few > extras. This particular template can be very helpful when debugging a > controller's return values, and is included in the default quickstarted > project for you. > +In TurboGears 2 the template namespace is going to be populated with the > items you return in your controller's return dictionary, along with a few > extras. This particular template can be very helpful when debugging a > controller's return values, and is included in default quickstarted projects > for you as `project_name/templates/debug.html`. > > -The general way that Genshi works it that it allows you to add special > attributes to your xml elements, called *Template Directives*. Each of these > template directives should be given a value, which can be ANY python > expression. So, learning Genshi is pretty much about leanring how those > directives work, since the rest is just python. And like py:for, most of > the directives are very "python like". > +The general way that Genshi works it that it allows you to add special > attributes to your xml elements, called *Template Directives*. Each of these > template directives should be given a value, which can be ANY python > expression. So, learning Genshi is pretty much about leaning how those > directives work, since the rest is just python. And like py:for, most of > the directives are very "python like". > > Available Processing Directives: > ------------------------------------------ > @@ -56,13 +56,13 @@ > Here's a list of all the Template Directives in Genshi, along with a brief > description. > > ======================= ====================== > -Gensh Directive Definition > +Genshi Directive Definition > ======================= ====================== > -``py:if`` Displays the element and it's children if the > condition is true. > +``py:if`` Displays the element and its children if the > condition is true. > ``py:choose`` Used with py:when and py:otherwise to select one of > several options to be rendered. > -``py:when`` Used with py:choose -- displays an element and it's > children when the condition is true. > +``py:when`` Used with py:choose -- displays an element and its > children when the condition is true. > ``py:otherwise`` Used with py:when and py:choose, displays if non of > the when clauses are true. > -``py:for`` Repeats the element (and it's children) for each > item in some iterable > +``py:for`` Repeats the element (and its children) for each item > in some iterable > ``py:with`` Lets you assign expressions to variables > ``py:replace`` Replaces the element with the contents of the > expression, stripping out the element itself. > ``py:def`` Creates a re-usable "template function" that can be > used to render template > @@ -70,11 +70,11 @@ > ``py:match`` given an XPath expression, it finds and replaces > every element in the > template that matches the expression -- with the > content of the element > containing the py:match. > -``py:strip`` Removes just the containing element (not it's > children) if the condition is true. > +``py:strip`` Removes just the containing element (not its > children) if the condition is true. > ======================= ====================== > > > -There are examples of how each of these template directives work on the > Genshi web site. > +There are examples of how each of these template directives works on the > Genshi web site. > > http://genshi.edgewall.org/wiki/Documentation/xml-templates.html > > Index: DatabaseMigration.rst > =================================================================== > --- DatabaseMigration.rst (revision 6277) > +++ DatabaseMigration.rst (working copy) > @@ -83,7 +83,7 @@ > > Our repository is ready. Now we must create a table > for maintaining revision state in our managed database. The ``migrate`` > -script providesnd for this step as well: > +script provides for this step as well: > > $ migrate version_control sqlite:///devdata.db migration > > Index: Session.rst > =================================================================== > --- Session.rst (revision 6277) > +++ Session.rst (working copy) > @@ -36,7 +36,7 @@ > > from tg import session > > -What you get is a Session instance that is always request-local, in other > words, it's the session for this particular user. The session can be > manipulated in much the same way as a standard python dictionnary. > +What you get is a Session instance that is always request-local, in other > words, it's the session for this particular user. The session can be > manipulated in much the same way as a standard python dictionary. > > Here is how you search for a key in the session:: > > Index: RoutesIntegration.rst > =================================================================== > --- RoutesIntegration.rst (revision 6277) > +++ RoutesIntegration.rst (working copy) > @@ -14,7 +14,7 @@ > RootController, which sees that the action is route, and does object > dispatch in the same way that TurboGears 1 did. > > -But if you want to create special routes that overide Object Dispatch, > +But if you want to create special routes that override Object Dispatch, > you can easily do that, just by providing your own function to setup the > routes map. You can update the routes defaults by overriding the setup_routes > method of the base_config object in app_cfg.py. > @@ -24,7 +24,7 @@ > def setup_routes(self): > """Setup the default TG2 routes > > - Overide this and setup your own routes maps if you want to use > routes. > + Override this and setup your own routes maps if you want to use > routes. > """ > map = Mapper(directory=config['pylons.paths']['controllers'], > always_scan=config['debug']) > Index: CommandLine.rst > =================================================================== > --- CommandLine.rst (revision 6277) > +++ CommandLine.rst (working copy) > @@ -1,6 +1,6 @@ > .. _commandline-reference: > > -TurboGears2 delegates it's command line tasks to Paste, in TG1.x this was a > build in command which was drop in favor of the more robust Paste > infraestructure. > +TurboGears2 delegates its command line tasks to Paste, in TG1.x this was a > build in command which was drop in favor of the more robust Paste > infrastructure. > > What is PasteScript? > ==================== > Index: DownloadInstall.rst > =================================================================== > --- DownloadInstall.rst (revision 6277) > +++ DownloadInstall.rst (working copy) > @@ -28,8 +28,7 @@ > * Python 2.4, 2.5, or 2.6 > * Appropriate python development package (python*-devel python*-dev) > > -.. hint:: > - Python 2.4 users will also need to install pysqlite themselves in > +.. hint:: Python 2.4 users will also need to install pysqlite themselves in > order to use the sqlite database setup in the default development.ini > but you're also free to just install and use your database of choice. > > @@ -68,7 +67,7 @@ > > On Unix: > > -You will likely need root permissions to install virtualenv in you your > system's > +You will likely need root permissions to install virtualenv in your system's > site-packages directory: > > .. code-block:: bash > @@ -147,11 +146,11 @@ > > $ easy_install -U -i > http://www.turbogears.org/2.0/downloads/current/index tg.devtools > > -All of turbogears, and all of its dependencies should download and install > themselves. > +All of turbogears and all of its dependencies should download and install > themselves. > (This may take a several min.) > > Validate the installation: > -~~~~~~~~~~~~~~~ > +~~~~~~~~~~~~~~~~~~~~~~~~~~ > > To check if you installed TurboGears 2 correctly, type > > @@ -195,7 +194,7 @@ > to get a picture of what's changed in TurboGears2 so far. > > Special Considerations: > -~~~~~~~~~~~~~~ > +~~~~~~~~~~~~~~~~~~~~~~~ > > **Cygwin** does not include the necessary binary file **sqlite3.dll**; > if you want to run Cygwin you'll need to install a different database. > @@ -205,7 +204,7 @@ > > > Installing the development version of Turbogears 2 (from source) > --------------------------------------------------------------- > +---------------------------------------------------------------- > > See `Contributing to Turbogears 2`_ > > Index: movie_tutorial.rst > =================================================================== > --- movie_tutorial.rst (revision 6277) > +++ movie_tutorial.rst (working copy) > @@ -135,18 +135,18 @@ > of a movie object after it's been created like this:: > > >>> entry = Movie() > - >>> entry.title = 'Dragula' > + >>> entry.title = 'Dracula' > >>> entry.year = '1931' > >>> entry.description = 'vampire movie' > > But if the __init__ method we defined allows you to initialize the properties > at the same time you create the object:: > > - >>> entry = Movie(title='Drakula', year='1931', description='vampire > movie') > + >>> entry = Movie(title='Dracula', year='1931', description='vampire > movie') > > or :: > > - >>> entry = Movie('Drakula', '1931', 'vampire movie') > + >>> entry = Movie('Dracula', '1931', 'vampire movie') > > Bootstrapping the application with CRUD > ======================================== > Index: Internationalization.rst > =================================================================== > --- Internationalization.rst (revision 6277) > +++ Internationalization.rst (working copy) > @@ -45,7 +45,7 @@ > ('public/**', 'ignore', None)]}, > > This is an extraction method mapping that indicates to distutils which files > -should be search for strings to be translated. > +should be searched for strings to be translated. > TurboGears2 uses Babel to extract messages to a .pot file in your project's > i18n directory. > Don't forget to add it to your revision control system if you use one. > @@ -67,7 +67,7 @@ > 3. Edit your language in il8n/[country code]/LC_MESSAGES/[project-name].po > > If you're not an expert in i18n or if you would like to give the files to > -someone else so that he helps you we recommand that you use the really nice > +someone else so that he helps you we recommend that you use the really nice > poedit program. This program works nicely on GNU/Linux and Windows > and provides a nice user-interface to edit po files. > > @@ -95,7 +95,7 @@ > --------- > > > -To fresh start a translation, you could use following command to handle your > +To fresh start a translation, you could use the following command to handle > your > locales: > > init_catalog > Index: Config.rst > =================================================================== > --- Config.rst (revision 6277) > +++ Config.rst (working copy) > @@ -9,7 +9,7 @@ > Like TurboGears 1, the application configuration is separated from the > deployment specific information. In TG2 there is a config module, containing > several configuration specific python files -- these are done in python not > -as INI files, because they actually setup the TG2 application and it's > associated WSGI middleware. And these files are intended to be edited only > by application developers, not by those deploying the application. > +as INI files, because they actually setup the TG2 application and its > associated WSGI middleware. And these files are intended to be edited only > by application developers, not by those deploying the application. > > At the same time the deployment level configuration is done in simple .ini > files. > > @@ -45,7 +45,7 @@ > app_cfg.py exists primarily so that middleware.py and environment.py can > import and use the ``base_config`` object. > > The ``base_config`` object is an ``AppConfig()`` instance which allows you to > -access it's attributes like a normal object, or like a standard python > dictionary. One of the reasons for this is that ``AppConfig()`` provides > some defaults in it's ``__init__``. But equally important it provides us > with several methods that work on the config values to produce the two > functions that setup your TurboGears app. Since this is all done in your > code, you can subclass or overide ``AppConfig`` to get exactly the setup you > want. > +access its attributes like a normal object, or like a standard python > dictionary. One of the reasons for this is that ``AppConfig()`` provides > some defaults in its ``__init__``. But equally important it provides us with > several methods that work on the config values to produce the two functions > that set up your TurboGears app. Since this is all done in your code, you > can subclass or override ``AppConfig`` to get exactly the setup you want. > > The ``base_config`` object that is created in ``app_cfg.py`` should be used > to set whatever configuration values that belong to the application itself > and are required for all instances of this app, as distinct from the > configuration values that you set in the ``development.ini`` or > ``deployment.ini`` files that are intended to be editable by those who deploy > the app. > > Index: Controllers.rst > =================================================================== > --- Controllers.rst (revision 6277) > +++ Controllers.rst (working copy) > @@ -280,7 +280,7 @@ > about the way WSGI works. But it's also the right thing to do from the > perspective of URL joins. Because you didn't have a trailing slash, there's > no > way to know you meant to be in the movie directory, so redirection to > relative > -URL's will be based on the last / in the URL. In this case the root of the > site. > +URLs will be based on the last / in the URL. In this case the root of the > site. > > It's easy enough to get around this, all you have to do is write your > redirect > like this:: > @@ -377,7 +377,7 @@ > del users[id] > redirect('./') > > -For the "edit" method the template might contatin something like this: > +For the "edit" method the template might contain something like this: > > .. code-block:: html > > @@ -394,7 +394,7 @@ > <input type="text" name="name" value="$value"/> > </form> > > -And finally a "delete" template containting this: > +And finally a "delete" template containing this: > > .. code-block:: html > > @@ -405,7 +405,7 @@ > > Rest methods work just like any other controller method in TurboGears, > which means you can validate, or expose them in any method of your choosing. > -It is very common to use content-type dispatch allong with get_all to return > +It is very common to use content-type dispatch along with get_all to return > both a page containing a table and some JavaScript links along with > You may have noticed the "_method" hidden field within the forms. This is > needed because > browsers do not yet support all of the HTTP verbs required to provide a > @@ -432,7 +432,7 @@ > > > So if you visit jsonexample/users you will get the results of a rendered > template, but if you visit > -jsonexaple/users.json, you get a json stream containing the users data. > Notice that we don't return > +jsonexample/users.json, you get a json stream containing the users data. > Notice that we don't return > the list of users. Most of the time, json streams are comprised of > dictionaries for security reasons. > It is important to note that the mime-type associated with the request's > response type are stored at > pylons.request.response_type, and the extension used to generate that > mime-type is stored at > Index: Contributing.rst > =================================================================== > --- Contributing.rst (revision 6277) > +++ Contributing.rst (working copy) > @@ -78,7 +78,7 @@ > > TurboGears 2 is composed of 2 packages. You also need 2 more package with > are the authorization framework > > -Check out the latest code from the subversion respositories: > +Check out the latest code from the subversion repositories: > > .. code-block:: bash > > @@ -253,8 +253,8 @@ > `(tg2dev)` will be prefixed to your prompt to indicate that the > `tg2dev` virtualenv is activated. > > -Check out the latest version of the docs soruces from the subversion > -respositories: > +Check out the latest version of the docs sources from the subversion > +repositories: > > .. code-block:: bash > > > > > -- Mark Ramm-Christensen email: mark at compoundthinking dot com blog: www.compoundthinking.com/blog --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "TurboGears Docs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/turbogears-docs?hl=en -~----------~----~----~----~------~----~------~--~---
