remarkbox/remarkbox/models/__init__.py
Russell Ballestrini acfbe52a65 Replace deprecated Stripe Sources API with Stripe Checkout
- Add stripe/checkout.py module for Stripe Checkout Sessions
- Add Payment model to track completed payments
- Update billing page with pay-what-you-want, annual, and top-up options
- Keep pay_what_you_can preferences, add Pay Now button for actual payment
- Add webhook handler for Stripe events
- Remove old card management code (deprecated Sources API)
- Update stripe requirement to >=5.0.0
2025-12-19 20:52:38 -05:00

89 lines
2.6 KiB
Python

from sqlalchemy import engine_from_config
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import configure_mappers
import zope.sqlalchemy
# import all models here to ensure they are attached to the
# Base.metadata prior to any initialization routines ( init_db).
from .uri import *
from .user import *
from .namespace import *
from .namespace_user import *
from .namespace_request import *
from .node import *
from .node_cache import *
from .vote import *
from .oauth import *
from .watcher import *
from .event import *
from .notification import *
from .pay_what_you_can import *
from .payment import *
# run configure_mappers after defining all of the models to ensure
# all relationships can be setup
configure_mappers()
def get_engine(settings, prefix="sqlalchemy."):
return engine_from_config(settings, prefix)
def get_session_factory(engine):
factory = sessionmaker()
factory.configure(bind=engine)
return factory
def get_tm_session(session_factory, transaction_manager):
"""
Get a ``sqlalchemy.orm.Session`` instance backed by a transaction.
This function will hook the session to the transaction manager which
will take care of committing any changes.
- When using pyramid_tm it will automatically be committed or aborted
depending on whether an exception is raised.
- When using scripts you should wrap the session in a manager yourself.
For example::
import transaction
engine = get_engine(settings)
session_factory = get_session_factory(engine)
with transaction.manager:
dbsession = get_tm_session(session_factory, transaction.manager)
"""
dbsession = session_factory()
zope.sqlalchemy.register(dbsession, transaction_manager=transaction_manager)
return dbsession
def includeme(config):
"""
Initialize the model for a Pyramid app.
Activate this setup using ``config.include('pyratest.models')``.
"""
settings = config.get_settings()
settings["tm.manager_hook"] = "pyramid_tm.explicit_manager"
# use pyramid_tm to hook the transaction lifecycle to the request
config.include("pyramid_tm")
# use pyramid_retry to retry a request when transient exceptions occur
config.include("pyramid_retry")
session_factory = get_session_factory(get_engine(settings))
config.registry["dbsession_factory"] = session_factory
# make request.dbsession available for use in Pyramid
config.add_request_method(
# r.tm is the transaction manager used by pyramid_tm
lambda r: get_tm_session(session_factory, r.tm),
"dbsession",
reify=True,
)