183 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
 | 
						|
Quick Start
 | 
						|
===========
 | 
						|
 | 
						|
We have two varieties of "quick start" instructions:
 | 
						|
 | 
						|
* :ref:`quick-start-generated`
 | 
						|
* :ref:`quick-start-manual`
 | 
						|
 | 
						|
 | 
						|
.. _quick-start-generated:
 | 
						|
 | 
						|
From Generated Code
 | 
						|
-------------------
 | 
						|
 | 
						|
Note that this section describes an app based on WuttaWeb (i.e. not
 | 
						|
just WuttJamaican).  We'll name it "Poser" for sake of example.
 | 
						|
 | 
						|
Make a parent folder for all source code:
 | 
						|
 | 
						|
.. code-block:: sh
 | 
						|
 | 
						|
   mkdir -p ~/src
 | 
						|
 | 
						|
Make and activate a new :term:`virtual environment` for your project:
 | 
						|
 | 
						|
.. code-block:: sh
 | 
						|
 | 
						|
   cd /path/to/envs
 | 
						|
   python3 -m venv poser
 | 
						|
   source poser/bin/activate
 | 
						|
 | 
						|
Make a new e.g. ``poser`` database in PostgreSQL (or MySQL).  Nothing
 | 
						|
special here but for instructions see :ref:`create-appdb`.
 | 
						|
 | 
						|
Install and run `cookiecutter <https://cookiecutter.readthedocs.io/>`_
 | 
						|
with `wuttaweb template
 | 
						|
<https://forgejo.wuttaproject.org/wutta/cookiecutter-wuttaweb>`_:
 | 
						|
 | 
						|
.. code-block:: sh
 | 
						|
 | 
						|
   pip install cookiecutter
 | 
						|
   cookiecutter -o ~/src git+https://forgejo.wuttaproject.org/wutta/cookiecutter-wuttaweb
 | 
						|
 | 
						|
Assuming you now have project code at ``~/src/poser`` then install
 | 
						|
that and run the app installer.  Note the 2nd command name will depend
 | 
						|
on your project:
 | 
						|
 | 
						|
.. code-block:: sh
 | 
						|
 | 
						|
   pip install -e ~/src/poser
 | 
						|
   poser install
 | 
						|
 | 
						|
If all goes well, you can run the web app with:
 | 
						|
 | 
						|
.. code-block:: sh
 | 
						|
 | 
						|
   cd /path/to/envs/poser
 | 
						|
   bin/wutta -c app/web.conf webapp -r
 | 
						|
 | 
						|
And browse it at http://localhost:9080
 | 
						|
 | 
						|
 | 
						|
.. _quick-start-manual:
 | 
						|
 | 
						|
From Scratch
 | 
						|
------------
 | 
						|
 | 
						|
This shows the *minimum* use case, basically how to make/use the
 | 
						|
:term:`config object` and :term:`app handler`.
 | 
						|
 | 
						|
(See next section for :ref:`db-setup`.)
 | 
						|
 | 
						|
You should have already made a :term:`virtual environment`.  Install
 | 
						|
the package with:
 | 
						|
 | 
						|
.. code-block:: sh
 | 
						|
 | 
						|
   pip install WuttJamaican[db]
 | 
						|
 | 
						|
Create a :term:`config file`, e.g. ``my.conf``:
 | 
						|
 | 
						|
.. code-block:: ini
 | 
						|
 | 
						|
   [foo]
 | 
						|
   bar = A
 | 
						|
   baz = 2
 | 
						|
   feature = true
 | 
						|
   words = the quick brown fox
 | 
						|
 | 
						|
In code, load the config and reference its values as needed, and/or
 | 
						|
invoke other app/handler logic::
 | 
						|
 | 
						|
   from wuttjamaican.conf import make_config
 | 
						|
 | 
						|
   config = make_config('/path/to/my.conf')
 | 
						|
 | 
						|
   # this call..                        ..returns this value
 | 
						|
 | 
						|
   config.get('foo.bar')                # 'A'
 | 
						|
 | 
						|
   config.get('foo.baz')                # '2'
 | 
						|
   config.get_int('foo.baz')            # 2
 | 
						|
 | 
						|
   config.get('foo.feature')            # 'true'
 | 
						|
   config.get_bool('foo.feature')       # True
 | 
						|
 | 
						|
   config.get('foo.words')              # 'the quick brown fox'
 | 
						|
   config.get_list('foo.words')         # ['the', 'quick', 'brown', 'fox']
 | 
						|
 | 
						|
   # now for the app handler..and interacting with DB
 | 
						|
   app = config.get_app()
 | 
						|
   model = app.model
 | 
						|
   session = app.make_session()
 | 
						|
 | 
						|
   # invoke secondary handler to make new user account
 | 
						|
   auth = app.get_auth_handler()
 | 
						|
   user = auth.make_user(session=session, username='barney')
 | 
						|
 | 
						|
   # commit changes to DB
 | 
						|
   session.add(user)
 | 
						|
   session.commit()
 | 
						|
 | 
						|
For more info see:
 | 
						|
 | 
						|
* :func:`~wuttjamaican.conf.make_config()`
 | 
						|
* :class:`~wuttjamaican.conf.WuttaConfig` and especially
 | 
						|
  :meth:`~wuttjamaican.conf.WuttaConfig.get()`
 | 
						|
* :class:`~wuttjamaican.app.AppHandler`
 | 
						|
 | 
						|
 | 
						|
.. _db-setup:
 | 
						|
 | 
						|
Database Setup
 | 
						|
~~~~~~~~~~~~~~
 | 
						|
 | 
						|
You should already have the package installed (see previous section).
 | 
						|
 | 
						|
Next you must create the database, as well as any user account needed,
 | 
						|
within the DB backend.  This is pretty routine but for instructions
 | 
						|
see :ref:`create-appdb`.
 | 
						|
 | 
						|
Now add the DB info to your :term:`config file` (e.g. ``my.conf`` as
 | 
						|
shown above).  Contents for this will look something like (using
 | 
						|
``poserdb`` as the DB name):
 | 
						|
 | 
						|
.. code-block:: ini
 | 
						|
 | 
						|
   [wutta.db]
 | 
						|
 | 
						|
   # postgres
 | 
						|
   default.url = postgresql://USERNAME:PASSWORD@localhost/poserdb
 | 
						|
 | 
						|
   # mysql
 | 
						|
   default.url = mysql+mysqlconnector://USERNAME:PASSWORD@localhost/poserdb
 | 
						|
 | 
						|
You also must add some Alembic config, needed for DB schema
 | 
						|
migrations:
 | 
						|
 | 
						|
.. code-block:: ini
 | 
						|
 | 
						|
   [alembic]
 | 
						|
   script_location = wuttjamaican.db:alembic
 | 
						|
   version_locations = wuttjamaican.db:alembic/versions
 | 
						|
 | 
						|
With config file updated you can run the Alembic command to migrate schema:
 | 
						|
 | 
						|
.. code-block:: sh
 | 
						|
 | 
						|
   alembic -c /path/to/my.conf upgrade heads
 | 
						|
 | 
						|
Now you should have all the tables required for a WuttJamaican
 | 
						|
:term:`app database`.
 | 
						|
 | 
						|
If you wish to store :term:`config settings <config setting>` in the
 | 
						|
DB, don't forget to add to your config file (see also
 | 
						|
:ref:`where-config-settings-come-from`):
 | 
						|
 | 
						|
.. code-block:: ini
 | 
						|
 | 
						|
   [wutta.config]
 | 
						|
   usedb = true
 | 
						|
   preferdb = true
 |