Find a file
2022-08-24 18:45:05 +00:00
make_post_sell Stripe Customer Sources to SetupIntents & Element JS 2022-08-24 18:45:05 +00:00
.gitignore w00t this Caddyfile was able to work in development! 2022-06-29 13:19:01 -04:00
.gitlab-ci.deploy.yml try to use a child pipeline to fix artifact link race condition. 2022-06-10 19:27:13 -04:00
.gitlab-ci.yml expire_in: 1 month 2022-06-29 21:26:22 +00:00
Caddyfile Enable gzip & fix favicon 2022-06-29 14:03:41 -04:00
development.ini UX 2022-07-02 15:02:07 -04:00
journal.rst low mood today. journal entry. 2022-07-19 16:59:16 -04:00
Makefile modified: Makefile 2022-05-25 18:08:20 -04:00
MANIFEST.in Time to open the sauce : ) 2021-12-31 21:39:40 -05:00
pytest.ini Time to open the sauce : ) 2021-12-31 21:39:40 -05:00
README.rst Stripe Customer Sources to SetupIntents & Element JS 2022-08-24 18:45:05 +00:00
requirements-dev.txt Time to open the sauce : ) 2021-12-31 21:39:40 -05:00
requirements-prod.txt Time to open the sauce : ) 2021-12-31 21:39:40 -05:00
requirements-test.txt Time to open the sauce : ) 2021-12-31 21:39:40 -05:00
requirements.py3.txt sunset miscutils! 2022-07-05 14:50:20 -04:00
requirements.txt sunset miscutils! 2022-07-05 14:50:20 -04:00
setup.py fix duplicate parameter key 2022-01-10 15:09:54 -05:00
test.ini shop_id & active on cart table 2022-07-13 18:11:40 +00:00

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()