Make Post Sell
==============
The `Make Post Sell <https://www.makepostsell.com>`_ monolith platform service.
Getting Started
---------------
Clone this repo and change your working directory to the checkout.
Create a Python virtual environment and install project dependencies:
.. code-block:: bash
make dev
Load schema and default data into the database using a script,
we currently use sqlite3 as a development and test database:
.. code-block:: bash
make init_db config=development.ini
Run a web application server with the project loaded:
.. code-block:: bash
make serve
Open a 2nd shell and run a test SMTP server for intercepting OTP login uri's:
.. code-block:: bash
make smtp
In a web browser navagate to http://127.0.0.1:6501/ and you should see the app.
Running Tests
-------------
We currently use `pytest`:
.. code-block:: bash
make test
SQL Migrations
===============
If your deployment is brand new, you don't need to run any migrations.
You should however run this to stamp the database as ready:
.. code-block:: bash
alembic -c development.ini stamp head
Otherwise, it should be safe to run this at anytime to catch your database up:
.. code-block:: bash
alembic -c development.ini upgrade head
To look at the current revision and the history run these:
.. code-block:: bash
alembic -c development.ini history
alembic -c development.ini current
If you ever want to cut a new migration script, you can run this:
.. code-block:: bash
alembic -c development.ini revision -m "Added email_id column to User table."
Then you can edit / modify the generated ``.py`` file with your changes.
You can also autogenerate a new migration script using `--autogenerate`.
Alembic will prepare a migration script by comparing the state of the
database with the state of the model:
.. code-block:: bash
alembic -c development.ini revision --autogenerate -m "autogenerated indicies."
You should review the recommended migration script before `upgrade`.
misc
====
You may source the new Python virtual environment during development:
.. code-block:: bash
# source env/bin/activate.fish
. env/bin/activate
Python Pyramid Shell
==========================
If you want to use an interactive Python interpreter to interact with Make Post Sell app/models & DB:
.. code-block:: bash
pshell development.ini
For example, we needed to migrate production data using this script:
.. code-block:: python
# begin the database transaction.
request.tm.begin()
suses = models.stripe_user_shop.get_all_stripe_user_shop_objects(request.dbsession)
for sus in suses:
try:
sus.active_card_id = sus.stripe_customer_default_source.id
request.dbsession.add(sus)
except AttributeError:
pass
# flush / commit all changes stored the the sqlachemy session.
request.dbsession.flush()
# commit/close the database transaction to really make changes.
request.tm.commit()