Make Post Sell
==============
The `Make Post Sell <https://www.makepostsell.com>`_ monolith platform service.
You can use the SaaS or self-host!
Our `blog acts as our user guide <https://blog.makepostsell.com/>`_ & also uses ``make_post_sell``!
Quick Start: Operating a Server with PyPI or Source Code
==========================================================
Before you start, navigate to the directory where you want to install ``make_post_sell`` database & files.
This Makefile-based workflow lets you choose between installing ``make_post_sell`` from PyPI packages or directly from the source code (editable mode). Both flows create a virtual environment in ``./env`` and store configuration and SQLite data in the persistent ``./data`` directory.
1. **Install make_post_sell**
- **PyPI Installation:**
Download the Makefile and run::
wget "https://git.unturf.com/engineering/make-post-sell/make_post_sell/-/raw/master/Makefile"
make install-from-pypi
- **Source Installation (Editable Mode):**
Clone the repository and run::
git clone ssh://git@git.unturf.com:2222/engineering/make-post-sell/make_post_sell.git
make install-from-source
- **Production Installation (Non‑Editable):**
For production use (non‑editable even from source), run::
git clone ssh://git@git.unturf.com:2222/engineering/make-post-sell/make_post_sell.git
make install-from-source-prod
2. **Activate the Virtual Environment**
Before running any commands, activate the virtual environment::
source env/bin/activate
3. **Start the Development Server**
You'll want to configure the system in ``data/development.ini``.
Typically I control most stuff with environment vars, for example ``vars.sh``::
# boto3 style credentials for s3/digital-ocean spaces.
# this is for storing content & physical products.
export MPS_APP_MAIN_BUCKET="removed"
export MPS_APP_SECURE_UPLOADS_ACCESS_KEY="removed"
export MPS_APP_SECURE_UPLOADS_SECRET_KEY="removed"
# stripe keys for collecting credit cards & crypto.
export MPS_TEST_STRIPE_PUBLIC_API_KEY="pk_test_removed"
export MPS_TEST_STRIPE_SECRET_API_KEY="sk_test_removed"
# the root domain acts as a SaaS for many shop domains!
export MAKE_POST_SELL_ROOT_DOMAIN="example.com"
export MAKE_POST_SELL_ROOT_URL="http://example.com:6501"
With the virtual environment active, start the server::
source vars.sh
make serve
Then browse to `http://127.0.0.1:6501/ <http://127.0.0.1:6501/>`_ to view 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.
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()
Contributing
===================
* Establish communication with Russell or another admin to bless your git.unturf.com gitlab account & put you into the proper roles.
* Russell should see your account request but due to spam you have to ask him directly for approval via email or some other means of comms.
* Clone repo & make commits
* Create merge requests, we automatically run the unit & headless functional tests on each commit
* On merge we release to the production site & see the change across users.
Optionally, format your code.
This is not set in stone, but if you want to use a formatter this is the path for now!
**Python**
black (manual)
**Jinja2**
None (not needed, neither is an HTML formatter)
**JavaScript**
Prettier or biome (manual)
**CSS**
Prettier or biome (manual)
Licence
==============================================
All contributed code is placed in the public domain.
source code: `https://git.unturf.com/engineering/make-post-sell/make_post_sell <https://git.unturf.com/engineering/make-post-sell/make_post_sell>`_
MakePostSell & make-post-sell are trademarked, do not misrepresent the brand.
Feel free to white label any code or themes into your own brand.
**Original Developer:**
`Russell Ballestrini <https://russell.ballestrini.net>`_
Raw data
{
"_id": null,
"home_page": "https://www.makepostsell.com",
"name": "make-post-sell",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "make post sell web pyramid pylons ecommerce digital downloads physical goods content marketing youtube alternative",
"author": "Russell Ballestrini",
"author_email": "russell@ballestrini.net",
"download_url": "https://files.pythonhosted.org/packages/1f/30/6fb1b0ed1183317045e5ec7d43f24a83701a2f0099b012894cd7f74124c3/make_post_sell-1.0.8.tar.gz",
"platform": null,
"description": "Make Post Sell\n==============\n\nThe `Make Post Sell <https://www.makepostsell.com>`_ monolith platform service.\n\nYou can use the SaaS or self-host!\n\nOur `blog acts as our user guide <https://blog.makepostsell.com/>`_ & also uses ``make_post_sell``!\n\n\nQuick Start: Operating a Server with PyPI or Source Code\n==========================================================\n\nBefore you start, navigate to the directory where you want to install ``make_post_sell`` database & files.\n\nThis Makefile-based workflow lets you choose between installing ``make_post_sell`` from PyPI packages or directly from the source code (editable mode). Both flows create a virtual environment in ``./env`` and store configuration and SQLite data in the persistent ``./data`` directory.\n\n1. **Install make_post_sell**\n\n - **PyPI Installation:** \n Download the Makefile and run::\n \n wget \"https://git.unturf.com/engineering/make-post-sell/make_post_sell/-/raw/master/Makefile\"\n make install-from-pypi\n\n - **Source Installation (Editable Mode):** \n Clone the repository and run::\n \n git clone ssh://git@git.unturf.com:2222/engineering/make-post-sell/make_post_sell.git\n make install-from-source\n\n - **Production Installation (Non\u2011Editable):** \n For production use (non\u2011editable even from source), run::\n \n git clone ssh://git@git.unturf.com:2222/engineering/make-post-sell/make_post_sell.git\n make install-from-source-prod\n\n2. **Activate the Virtual Environment**\n\n Before running any commands, activate the virtual environment::\n \n source env/bin/activate\n\n3. **Start the Development Server**\n\n You'll want to configure the system in ``data/development.ini``.\n\n Typically I control most stuff with environment vars, for example ``vars.sh``::\n\n # boto3 style credentials for s3/digital-ocean spaces.\n # this is for storing content & physical products.\n export MPS_APP_MAIN_BUCKET=\"removed\"\n export MPS_APP_SECURE_UPLOADS_ACCESS_KEY=\"removed\"\n export MPS_APP_SECURE_UPLOADS_SECRET_KEY=\"removed\"\n\n # stripe keys for collecting credit cards & crypto.\n export MPS_TEST_STRIPE_PUBLIC_API_KEY=\"pk_test_removed\"\n export MPS_TEST_STRIPE_SECRET_API_KEY=\"sk_test_removed\"\n\n # the root domain acts as a SaaS for many shop domains!\n export MAKE_POST_SELL_ROOT_DOMAIN=\"example.com\"\n export MAKE_POST_SELL_ROOT_URL=\"http://example.com:6501\"\n\n With the virtual environment active, start the server::\n\n source vars.sh\n make serve\n\n Then browse to `http://127.0.0.1:6501/ <http://127.0.0.1:6501/>`_ to view the app.\n\n\nRunning Tests\n-------------\n\nWe currently use `pytest`:\n\n.. code-block:: bash\n\n make test\n\n\nSQL Migrations\n===============\n\nIf your deployment is brand new, you don't need to run any migrations.\n\nOtherwise, it should be safe to run this at anytime to catch your database up:\n\n.. code-block:: bash\n\n alembic -c development.ini upgrade head\n\nTo look at the current revision and the history run these:\n\n.. code-block:: bash\n\n alembic -c development.ini history\n alembic -c development.ini current\n\nIf you ever want to cut a new migration script, you can run this:\n\n.. code-block:: bash\n\n alembic -c development.ini revision -m \"Added email_id column to User table.\"\n\nThen you can edit / modify the generated ``.py`` file with your changes.\n\nYou can also autogenerate a new migration script using `--autogenerate`.\nAlembic will prepare a migration script by comparing the state of the\ndatabase with the state of the model:\n\n.. code-block:: bash\n\n alembic -c development.ini revision --autogenerate -m \"autogenerated indicies.\"\n\nYou should review the recommended migration script before `upgrade`.\n\nmisc\n====\n\nYou may source the new Python virtual environment during development:\n\n.. code-block:: bash\n\n # source env/bin/activate.fish\n . env/bin/activate\n\n\nPython Pyramid Shell\n==========================\n\nIf you want to use an interactive Python interpreter to interact with Make Post Sell app/models & DB:\n\n.. code-block:: bash\n\n pshell development.ini\n\nFor example, we needed to migrate production data using this script:\n\n.. code-block:: python\n\n # begin the database transaction.\n request.tm.begin()\n\n suses = models.stripe_user_shop.get_all_stripe_user_shop_objects(request.dbsession)\n for sus in suses:\n try:\n sus.active_card_id = sus.stripe_customer_default_source.id\n request.dbsession.add(sus)\n except AttributeError:\n pass\n\n # flush / commit all changes stored the the sqlachemy session.\n request.dbsession.flush()\n\n # commit/close the database transaction to really make changes.\n request.tm.commit()\n\n\nContributing\n===================\n\n* Establish communication with Russell or another admin to bless your git.unturf.com gitlab account & put you into the proper roles.\n* Russell should see your account request but due to spam you have to ask him directly for approval via email or some other means of comms.\n* Clone repo & make commits\n* Create merge requests, we automatically run the unit & headless functional tests on each commit\n* On merge we release to the production site & see the change across users.\n\nOptionally, format your code.\n\nThis is not set in stone, but if you want to use a formatter this is the path for now!\n\n**Python**\n black (manual)\n\n**Jinja2**\n None (not needed, neither is an HTML formatter)\n\n**JavaScript**\n Prettier or biome (manual)\n\n**CSS**\n Prettier or biome (manual)\n\n\nLicence\n==============================================\n\nAll contributed code is placed in the public domain.\n\nsource code: `https://git.unturf.com/engineering/make-post-sell/make_post_sell <https://git.unturf.com/engineering/make-post-sell/make_post_sell>`_\n\nMakePostSell & make-post-sell are trademarked, do not misrepresent the brand.\n\nFeel free to white label any code or themes into your own brand.\n\n**Original Developer:** \n`Russell Ballestrini <https://russell.ballestrini.net>`_\n",
"bugtrack_url": null,
"license": null,
"summary": "Make Post Sell",
"version": "1.0.8",
"project_urls": {
"Homepage": "https://www.makepostsell.com"
},
"split_keywords": [
"make",
"post",
"sell",
"web",
"pyramid",
"pylons",
"ecommerce",
"digital",
"downloads",
"physical",
"goods",
"content",
"marketing",
"youtube",
"alternative"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "51514ec033d5fbc84c4f0b5cf2d96bce78503f0b31201aad93960c23717297c6",
"md5": "8e2b462cae365668981310ce3e9616cd",
"sha256": "6d26fb25e457efca1f71b70ea396935b74e8fadf18153307a8774c299aa63b2f"
},
"downloads": -1,
"filename": "make_post_sell-1.0.8-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8e2b462cae365668981310ce3e9616cd",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 432027,
"upload_time": "2025-07-28T01:36:03",
"upload_time_iso_8601": "2025-07-28T01:36:03.655084Z",
"url": "https://files.pythonhosted.org/packages/51/51/4ec033d5fbc84c4f0b5cf2d96bce78503f0b31201aad93960c23717297c6/make_post_sell-1.0.8-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1f306fb1b0ed1183317045e5ec7d43f24a83701a2f0099b012894cd7f74124c3",
"md5": "da0ce85970d5bc9f0e3595bd9ec3e26d",
"sha256": "44d11d86b198c4e551da514735d6c0fd3be6416015429a265a1a8c992d9a9775"
},
"downloads": -1,
"filename": "make_post_sell-1.0.8.tar.gz",
"has_sig": false,
"md5_digest": "da0ce85970d5bc9f0e3595bd9ec3e26d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 395686,
"upload_time": "2025-07-28T01:36:05",
"upload_time_iso_8601": "2025-07-28T01:36:05.244256Z",
"url": "https://files.pythonhosted.org/packages/1f/30/6fb1b0ed1183317045e5ec7d43f24a83701a2f0099b012894cd7f74124c3/make_post_sell-1.0.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-28 01:36:05",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "make-post-sell"
}