fix: format all code with black
and from now on should not deviate from that...
This commit is contained in:
parent
eb9291fce7
commit
1b4ba2089a
19 changed files with 248 additions and 205 deletions
28
docs/conf.py
28
docs/conf.py
|
@ -8,32 +8,32 @@
|
||||||
|
|
||||||
from importlib.metadata import version as get_version
|
from importlib.metadata import version as get_version
|
||||||
|
|
||||||
project = 'Wutta-COREPOS'
|
project = "Wutta-COREPOS"
|
||||||
copyright = '2025, Lance Edgar'
|
copyright = "2025, Lance Edgar"
|
||||||
author = 'Lance Edgar'
|
author = "Lance Edgar"
|
||||||
release = get_version('Wutta-COREPOS')
|
release = get_version("Wutta-COREPOS")
|
||||||
|
|
||||||
# -- General configuration ---------------------------------------------------
|
# -- General configuration ---------------------------------------------------
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||||
|
|
||||||
extensions = [
|
extensions = [
|
||||||
'sphinx.ext.autodoc',
|
"sphinx.ext.autodoc",
|
||||||
'sphinx.ext.intersphinx',
|
"sphinx.ext.intersphinx",
|
||||||
'sphinx.ext.viewcode',
|
"sphinx.ext.viewcode",
|
||||||
'sphinx.ext.todo',
|
"sphinx.ext.todo",
|
||||||
]
|
]
|
||||||
|
|
||||||
templates_path = ['_templates']
|
templates_path = ["_templates"]
|
||||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
|
||||||
|
|
||||||
intersphinx_mapping = {
|
intersphinx_mapping = {
|
||||||
'wuttaweb': ('https://docs.wuttaproject.org/wuttaweb/', None),
|
"wuttaweb": ("https://docs.wuttaproject.org/wuttaweb/", None),
|
||||||
'wuttjamaican': ('https://docs.wuttaproject.org/wuttjamaican/', None),
|
"wuttjamaican": ("https://docs.wuttaproject.org/wuttjamaican/", None),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output -------------------------------------------------
|
# -- Options for HTML output -------------------------------------------------
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
||||||
|
|
||||||
html_theme = 'furo'
|
html_theme = "furo"
|
||||||
html_static_path = ['_static']
|
html_static_path = ["_static"]
|
||||||
|
|
|
@ -3,4 +3,4 @@
|
||||||
from importlib.metadata import version
|
from importlib.metadata import version
|
||||||
|
|
||||||
|
|
||||||
__version__ = version('Wutta-COREPOS')
|
__version__ = version("Wutta-COREPOS")
|
||||||
|
|
|
@ -41,9 +41,11 @@ class WuttaCoreposAppProvider(AppProvider):
|
||||||
|
|
||||||
:rtype: :class:`~wutta_corepos.handler.CoreposHandler`
|
:rtype: :class:`~wutta_corepos.handler.CoreposHandler`
|
||||||
"""
|
"""
|
||||||
if not hasattr(self, 'corepos_handler'):
|
if not hasattr(self, "corepos_handler"):
|
||||||
spec = self.config.get(f'{self.appname}.corepos_handler',
|
spec = self.config.get(
|
||||||
default='wutta_corepos.handler:CoreposHandler')
|
f"{self.appname}.corepos_handler",
|
||||||
|
default="wutta_corepos.handler:CoreposHandler",
|
||||||
|
)
|
||||||
factory = self.app.load_object(spec)
|
factory = self.app.load_object(spec)
|
||||||
self.corepos_handler = factory(self.config, **kwargs)
|
self.corepos_handler = factory(self.config, **kwargs)
|
||||||
return self.corepos_handler
|
return self.corepos_handler
|
||||||
|
|
|
@ -103,48 +103,56 @@ class WuttaCoreposConfigExtension(WuttaConfigExtension):
|
||||||
etc. If present, the ``default`` key will correspond to
|
etc. If present, the ``default`` key will correspond to
|
||||||
:data:`core_lane_trans_engine`.
|
:data:`core_lane_trans_engine`.
|
||||||
"""
|
"""
|
||||||
key = 'wutta_corepos'
|
|
||||||
|
key = "wutta_corepos"
|
||||||
|
|
||||||
def configure(self, config):
|
def configure(self, config):
|
||||||
""" """
|
""" """
|
||||||
|
|
||||||
# office_op
|
# office_op
|
||||||
from corepos.db.office_op import Session
|
from corepos.db.office_op import Session
|
||||||
engines = get_engines(config, 'corepos.db.office_op')
|
|
||||||
|
engines = get_engines(config, "corepos.db.office_op")
|
||||||
config.core_office_op_engines = engines
|
config.core_office_op_engines = engines
|
||||||
config.core_office_op_engine = engines.get('default')
|
config.core_office_op_engine = engines.get("default")
|
||||||
Session.configure(bind=config.core_office_op_engine)
|
Session.configure(bind=config.core_office_op_engine)
|
||||||
|
|
||||||
# office_trans
|
# office_trans
|
||||||
from corepos.db.office_trans import Session
|
from corepos.db.office_trans import Session
|
||||||
engines = get_engines(config, 'corepos.db.office_trans')
|
|
||||||
|
engines = get_engines(config, "corepos.db.office_trans")
|
||||||
config.core_office_trans_engines = engines
|
config.core_office_trans_engines = engines
|
||||||
config.core_office_trans_engine = engines.get('default')
|
config.core_office_trans_engine = engines.get("default")
|
||||||
Session.configure(bind=config.core_office_trans_engine)
|
Session.configure(bind=config.core_office_trans_engine)
|
||||||
|
|
||||||
# office_arch
|
# office_arch
|
||||||
from corepos.db.office_arch import Session
|
from corepos.db.office_arch import Session
|
||||||
engines = get_engines(config, 'corepos.db.office_arch')
|
|
||||||
|
engines = get_engines(config, "corepos.db.office_arch")
|
||||||
config.core_office_arch_engines = engines
|
config.core_office_arch_engines = engines
|
||||||
config.core_office_arch_engine = engines.get('default')
|
config.core_office_arch_engine = engines.get("default")
|
||||||
Session.configure(bind=config.core_office_arch_engine)
|
Session.configure(bind=config.core_office_arch_engine)
|
||||||
|
|
||||||
# lane_op
|
# lane_op
|
||||||
from corepos.db.lane_op import Session
|
from corepos.db.lane_op import Session
|
||||||
engines = get_engines(config, 'corepos.db.lane_op')
|
|
||||||
|
engines = get_engines(config, "corepos.db.lane_op")
|
||||||
config.core_lane_op_engines = engines
|
config.core_lane_op_engines = engines
|
||||||
config.core_lane_op_engine = engines.get('default')
|
config.core_lane_op_engine = engines.get("default")
|
||||||
Session.configure(bind=config.core_lane_op_engine)
|
Session.configure(bind=config.core_lane_op_engine)
|
||||||
|
|
||||||
# lane_trans
|
# lane_trans
|
||||||
from corepos.db.lane_trans import Session
|
from corepos.db.lane_trans import Session
|
||||||
engines = get_engines(config, 'corepos.db.lane_trans')
|
|
||||||
|
engines = get_engines(config, "corepos.db.lane_trans")
|
||||||
config.core_lane_trans_engines = engines
|
config.core_lane_trans_engines = engines
|
||||||
config.core_lane_trans_engine = engines.get('default')
|
config.core_lane_trans_engine = engines.get("default")
|
||||||
Session.configure(bind=config.core_lane_trans_engine)
|
Session.configure(bind=config.core_lane_trans_engine)
|
||||||
|
|
||||||
# define some schema columns "late" unless not supported
|
# define some schema columns "late" unless not supported
|
||||||
if config.get_bool('corepos.db.office_op.use_latest_columns',
|
if config.get_bool(
|
||||||
default=True, usedb=False):
|
"corepos.db.office_op.use_latest_columns", default=True, usedb=False
|
||||||
|
):
|
||||||
from corepos.db.office_op.model import use_latest_columns
|
from corepos.db.office_op.model import use_latest_columns
|
||||||
|
|
||||||
use_latest_columns()
|
use_latest_columns()
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
"""initial user extension
|
"""initial user extension
|
||||||
|
|
||||||
Revision ID: 0f94089f1af1
|
Revision ID: 0f94089f1af1
|
||||||
Revises:
|
Revises:
|
||||||
Create Date: 2025-01-24 21:13:14.359200
|
Create Date: 2025-01-24 21:13:14.359200
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Sequence, Union
|
from typing import Sequence, Union
|
||||||
|
|
||||||
from alembic import op
|
from alembic import op
|
||||||
|
@ -13,25 +14,31 @@ import wuttjamaican.db.util
|
||||||
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision: str = '0f94089f1af1'
|
revision: str = "0f94089f1af1"
|
||||||
down_revision: Union[str, None] = None
|
down_revision: Union[str, None] = None
|
||||||
branch_labels: Union[str, Sequence[str], None] = ('wutta_corepos',)
|
branch_labels: Union[str, Sequence[str], None] = ("wutta_corepos",)
|
||||||
depends_on: Union[str, Sequence[str], None] = None
|
depends_on: Union[str, Sequence[str], None] = None
|
||||||
|
|
||||||
|
|
||||||
def upgrade() -> None:
|
def upgrade() -> None:
|
||||||
|
|
||||||
# corepos_user
|
# corepos_user
|
||||||
op.create_table('corepos_user',
|
op.create_table(
|
||||||
sa.Column('uuid', wuttjamaican.db.util.UUID(), nullable=False),
|
"corepos_user",
|
||||||
sa.Column('corepos_employee_number', sa.Integer(), nullable=False),
|
sa.Column("uuid", wuttjamaican.db.util.UUID(), nullable=False),
|
||||||
sa.ForeignKeyConstraint(['uuid'], ['user.uuid'], name=op.f('fk_corepos_user_uuid_user')),
|
sa.Column("corepos_employee_number", sa.Integer(), nullable=False),
|
||||||
sa.PrimaryKeyConstraint('uuid', name=op.f('pk_corepos_user')),
|
sa.ForeignKeyConstraint(
|
||||||
sa.UniqueConstraint('corepos_employee_number', name=op.f('uq_corepos_user_corepos_employee_number'))
|
["uuid"], ["user.uuid"], name=op.f("fk_corepos_user_uuid_user")
|
||||||
)
|
),
|
||||||
|
sa.PrimaryKeyConstraint("uuid", name=op.f("pk_corepos_user")),
|
||||||
|
sa.UniqueConstraint(
|
||||||
|
"corepos_employee_number",
|
||||||
|
name=op.f("uq_corepos_user_corepos_employee_number"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def downgrade() -> None:
|
def downgrade() -> None:
|
||||||
|
|
||||||
# corepos_user
|
# corepos_user
|
||||||
op.drop_table('corepos_user')
|
op.drop_table("corepos_user")
|
||||||
|
|
|
@ -36,9 +36,9 @@ class CoreUser(model.Base):
|
||||||
:class:`~wuttjamaican:wuttjamaican.db.model.auth.User`.
|
:class:`~wuttjamaican:wuttjamaican.db.model.auth.User`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__tablename__ = 'corepos_user'
|
__tablename__ = "corepos_user"
|
||||||
|
|
||||||
uuid = model.uuid_column(sa.ForeignKey('user.uuid'), default=None)
|
uuid = model.uuid_column(sa.ForeignKey("user.uuid"), default=None)
|
||||||
user = orm.relationship(
|
user = orm.relationship(
|
||||||
model.User,
|
model.User,
|
||||||
cascade_backrefs=False,
|
cascade_backrefs=False,
|
||||||
|
@ -48,20 +48,27 @@ class CoreUser(model.Base):
|
||||||
this record extends.
|
this record extends.
|
||||||
""",
|
""",
|
||||||
backref=orm.backref(
|
backref=orm.backref(
|
||||||
'_corepos',
|
"_corepos",
|
||||||
uselist=False,
|
uselist=False,
|
||||||
cascade='all, delete-orphan',
|
cascade="all, delete-orphan",
|
||||||
cascade_backrefs=False,
|
cascade_backrefs=False,
|
||||||
doc="""
|
doc="""
|
||||||
Reference to the CORE-POS extension record for the user.
|
Reference to the CORE-POS extension record for the user.
|
||||||
""")
|
""",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
corepos_employee_number = sa.Column(sa.Integer(), nullable=False, unique=True, doc="""
|
corepos_employee_number = sa.Column(
|
||||||
|
sa.Integer(),
|
||||||
|
nullable=False,
|
||||||
|
unique=True,
|
||||||
|
doc="""
|
||||||
``employees.emp_no`` value for the user within CORE-POS.
|
``employees.emp_no`` value for the user within CORE-POS.
|
||||||
""")
|
""",
|
||||||
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.user)
|
return str(self.user)
|
||||||
|
|
||||||
CoreUser.make_proxy(model.User, '_corepos', 'corepos_employee_number')
|
|
||||||
|
CoreUser.make_proxy(model.User, "_corepos", "corepos_employee_number")
|
||||||
|
|
|
@ -78,7 +78,7 @@ class CoreposHandler(GenericHandler):
|
||||||
|
|
||||||
return model
|
return model
|
||||||
|
|
||||||
def make_session_office_op(self, dbkey='default', **kwargs):
|
def make_session_office_op(self, dbkey="default", **kwargs):
|
||||||
"""
|
"""
|
||||||
Make a new :term:`db session` for the CORE Office 'op' DB.
|
Make a new :term:`db session` for the CORE Office 'op' DB.
|
||||||
|
|
||||||
|
@ -87,11 +87,11 @@ class CoreposHandler(GenericHandler):
|
||||||
"""
|
"""
|
||||||
from corepos.db.office_op import Session
|
from corepos.db.office_op import Session
|
||||||
|
|
||||||
if 'bind' not in kwargs:
|
if "bind" not in kwargs:
|
||||||
kwargs['bind'] = self.config.core_office_op_engines[dbkey]
|
kwargs["bind"] = self.config.core_office_op_engines[dbkey]
|
||||||
return Session(**kwargs)
|
return Session(**kwargs)
|
||||||
|
|
||||||
def make_session_office_trans(self, dbkey='default', **kwargs):
|
def make_session_office_trans(self, dbkey="default", **kwargs):
|
||||||
"""
|
"""
|
||||||
Make a new :term:`db session` for the CORE Office 'trans' DB.
|
Make a new :term:`db session` for the CORE Office 'trans' DB.
|
||||||
|
|
||||||
|
@ -100,11 +100,11 @@ class CoreposHandler(GenericHandler):
|
||||||
"""
|
"""
|
||||||
from corepos.db.office_trans import Session
|
from corepos.db.office_trans import Session
|
||||||
|
|
||||||
if 'bind' not in kwargs:
|
if "bind" not in kwargs:
|
||||||
kwargs['bind'] = self.config.core_office_trans_engines[dbkey]
|
kwargs["bind"] = self.config.core_office_trans_engines[dbkey]
|
||||||
return Session(**kwargs)
|
return Session(**kwargs)
|
||||||
|
|
||||||
def make_session_office_arch(self, dbkey='default', **kwargs):
|
def make_session_office_arch(self, dbkey="default", **kwargs):
|
||||||
"""
|
"""
|
||||||
Make a new :term:`db session` for the CORE Office 'arch' DB.
|
Make a new :term:`db session` for the CORE Office 'arch' DB.
|
||||||
|
|
||||||
|
@ -113,11 +113,11 @@ class CoreposHandler(GenericHandler):
|
||||||
"""
|
"""
|
||||||
from corepos.db.office_arch import Session
|
from corepos.db.office_arch import Session
|
||||||
|
|
||||||
if 'bind' not in kwargs:
|
if "bind" not in kwargs:
|
||||||
kwargs['bind'] = self.config.core_office_arch_engines[dbkey]
|
kwargs["bind"] = self.config.core_office_arch_engines[dbkey]
|
||||||
return Session(**kwargs)
|
return Session(**kwargs)
|
||||||
|
|
||||||
def make_session_lane_op(self, dbkey='default', **kwargs):
|
def make_session_lane_op(self, dbkey="default", **kwargs):
|
||||||
"""
|
"""
|
||||||
Make a new :term:`db session` for the CORE Lane 'op' DB.
|
Make a new :term:`db session` for the CORE Lane 'op' DB.
|
||||||
|
|
||||||
|
@ -126,11 +126,11 @@ class CoreposHandler(GenericHandler):
|
||||||
"""
|
"""
|
||||||
from corepos.db.lane_op import Session
|
from corepos.db.lane_op import Session
|
||||||
|
|
||||||
if 'bind' not in kwargs:
|
if "bind" not in kwargs:
|
||||||
kwargs['bind'] = self.config.core_lane_op_engines[dbkey]
|
kwargs["bind"] = self.config.core_lane_op_engines[dbkey]
|
||||||
return Session(**kwargs)
|
return Session(**kwargs)
|
||||||
|
|
||||||
def make_session_lane_trans(self, dbkey='default', **kwargs):
|
def make_session_lane_trans(self, dbkey="default", **kwargs):
|
||||||
"""
|
"""
|
||||||
Make a new :term:`db session` for the CORE Lane 'trans' DB.
|
Make a new :term:`db session` for the CORE Lane 'trans' DB.
|
||||||
|
|
||||||
|
@ -139,8 +139,8 @@ class CoreposHandler(GenericHandler):
|
||||||
"""
|
"""
|
||||||
from corepos.db.lane_trans import Session
|
from corepos.db.lane_trans import Session
|
||||||
|
|
||||||
if 'bind' not in kwargs:
|
if "bind" not in kwargs:
|
||||||
kwargs['bind'] = self.config.core_lane_trans_engines[dbkey]
|
kwargs["bind"] = self.config.core_lane_trans_engines[dbkey]
|
||||||
return Session(**kwargs)
|
return Session(**kwargs)
|
||||||
|
|
||||||
def get_office_url(self, require=False):
|
def get_office_url(self, require=False):
|
||||||
|
@ -154,15 +154,11 @@ class CoreposHandler(GenericHandler):
|
||||||
|
|
||||||
:returns: URL as string.
|
:returns: URL as string.
|
||||||
"""
|
"""
|
||||||
url = self.config.get('corepos.office.url', require=require)
|
url = self.config.get("corepos.office.url", require=require)
|
||||||
if url:
|
if url:
|
||||||
return url.rstrip('/')
|
return url.rstrip("/")
|
||||||
|
|
||||||
def get_office_department_url(
|
def get_office_department_url(self, dept_id, office_url=None, require=False):
|
||||||
self,
|
|
||||||
dept_id,
|
|
||||||
office_url=None,
|
|
||||||
require=False):
|
|
||||||
"""
|
"""
|
||||||
Returns the CORE Office URL for a Department.
|
Returns the CORE Office URL for a Department.
|
||||||
|
|
||||||
|
@ -178,13 +174,9 @@ class CoreposHandler(GenericHandler):
|
||||||
if not office_url:
|
if not office_url:
|
||||||
office_url = self.get_office_url(require=require)
|
office_url = self.get_office_url(require=require)
|
||||||
if office_url:
|
if office_url:
|
||||||
return f'{office_url}/item/departments/DepartmentEditor.php?did={dept_id}'
|
return f"{office_url}/item/departments/DepartmentEditor.php?did={dept_id}"
|
||||||
|
|
||||||
def get_office_employee_url(
|
def get_office_employee_url(self, employee_id, office_url=None, require=False):
|
||||||
self,
|
|
||||||
employee_id,
|
|
||||||
office_url=None,
|
|
||||||
require=False):
|
|
||||||
"""
|
"""
|
||||||
Returns the CORE Office URL for an Employee.
|
Returns the CORE Office URL for an Employee.
|
||||||
|
|
||||||
|
@ -200,13 +192,9 @@ class CoreposHandler(GenericHandler):
|
||||||
if not office_url:
|
if not office_url:
|
||||||
office_url = self.get_office_url(require=require)
|
office_url = self.get_office_url(require=require)
|
||||||
if office_url:
|
if office_url:
|
||||||
return f'{office_url}/admin/Cashiers/CashierEditor.php?emp_no={employee_id}'
|
return f"{office_url}/admin/Cashiers/CashierEditor.php?emp_no={employee_id}"
|
||||||
|
|
||||||
def get_office_likecode_url(
|
def get_office_likecode_url(self, likecode_id, office_url=None, require=False):
|
||||||
self,
|
|
||||||
likecode_id,
|
|
||||||
office_url=None,
|
|
||||||
require=False):
|
|
||||||
"""
|
"""
|
||||||
Returns the CORE Office URL for a Like Code.
|
Returns the CORE Office URL for a Like Code.
|
||||||
|
|
||||||
|
@ -222,13 +210,9 @@ class CoreposHandler(GenericHandler):
|
||||||
if not office_url:
|
if not office_url:
|
||||||
office_url = self.get_office_url(require=require)
|
office_url = self.get_office_url(require=require)
|
||||||
if office_url:
|
if office_url:
|
||||||
return f'{office_url}/item/likecodes/LikeCodeEditor.php?start={likecode_id}'
|
return f"{office_url}/item/likecodes/LikeCodeEditor.php?start={likecode_id}"
|
||||||
|
|
||||||
def get_office_product_url(
|
def get_office_product_url(self, upc, office_url=None, require=False):
|
||||||
self,
|
|
||||||
upc,
|
|
||||||
office_url=None,
|
|
||||||
require=False):
|
|
||||||
"""
|
"""
|
||||||
Returns the CORE Office URL for a Product.
|
Returns the CORE Office URL for a Product.
|
||||||
|
|
||||||
|
@ -244,13 +228,9 @@ class CoreposHandler(GenericHandler):
|
||||||
if not office_url:
|
if not office_url:
|
||||||
office_url = self.get_office_url(require=require)
|
office_url = self.get_office_url(require=require)
|
||||||
if office_url:
|
if office_url:
|
||||||
return f'{office_url}/item/ItemEditorPage.php?searchupc={upc}'
|
return f"{office_url}/item/ItemEditorPage.php?searchupc={upc}"
|
||||||
|
|
||||||
def get_office_vendor_url(
|
def get_office_vendor_url(self, vend_id, office_url=None, require=False):
|
||||||
self,
|
|
||||||
vend_id,
|
|
||||||
office_url=None,
|
|
||||||
require=False):
|
|
||||||
"""
|
"""
|
||||||
Returns the CORE Office URL for a Vendor.
|
Returns the CORE Office URL for a Vendor.
|
||||||
|
|
||||||
|
@ -266,4 +246,4 @@ class CoreposHandler(GenericHandler):
|
||||||
if not office_url:
|
if not office_url:
|
||||||
office_url = self.get_office_url(require=require)
|
office_url = self.get_office_url(require=require)
|
||||||
if office_url:
|
if office_url:
|
||||||
return f'{office_url}/item/vendors/VendorIndexPage.php?vid={vend_id}'
|
return f"{office_url}/item/vendors/VendorIndexPage.php?vid={vend_id}"
|
||||||
|
|
|
@ -26,4 +26,4 @@ Wutta-COREPOS -- wuttaweb features
|
||||||
|
|
||||||
|
|
||||||
def includeme(config):
|
def includeme(config):
|
||||||
config.include('wutta_corepos.web.views')
|
config.include("wutta_corepos.web.views")
|
||||||
|
|
|
@ -26,4 +26,4 @@ Wutta-COREPOS -- wuttaweb views
|
||||||
|
|
||||||
|
|
||||||
def includeme(config):
|
def includeme(config):
|
||||||
config.include('wutta_corepos.web.views.corepos')
|
config.include("wutta_corepos.web.views.corepos")
|
||||||
|
|
|
@ -28,5 +28,5 @@ from .master import CoreOpMasterView
|
||||||
|
|
||||||
|
|
||||||
def includeme(config):
|
def includeme(config):
|
||||||
config.include('wutta_corepos.web.views.corepos.members')
|
config.include("wutta_corepos.web.views.corepos.members")
|
||||||
config.include('wutta_corepos.web.views.corepos.products')
|
config.include("wutta_corepos.web.views.corepos.products")
|
||||||
|
|
|
@ -33,6 +33,7 @@ class CoreOpMasterView(MasterView):
|
||||||
"""
|
"""
|
||||||
Base class for master views which use the CORE Office 'op' DB.
|
Base class for master views which use the CORE Office 'op' DB.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
Session = CoreOpSession
|
Session = CoreOpSession
|
||||||
|
|
||||||
def __init__(self, request, context=None):
|
def __init__(self, request, context=None):
|
||||||
|
|
|
@ -43,10 +43,11 @@ class MemberView(CoreOpMasterView):
|
||||||
* ``/corepos/members/``
|
* ``/corepos/members/``
|
||||||
* ``/corepos/members/XXX``
|
* ``/corepos/members/XXX``
|
||||||
"""
|
"""
|
||||||
|
|
||||||
model_class = MemberInfo
|
model_class = MemberInfo
|
||||||
model_title = "CORE-POS Member"
|
model_title = "CORE-POS Member"
|
||||||
route_prefix = 'corepos_members'
|
route_prefix = "corepos_members"
|
||||||
url_prefix = '/corepos/members'
|
url_prefix = "/corepos/members"
|
||||||
|
|
||||||
# nb. this is just for readonly lookup
|
# nb. this is just for readonly lookup
|
||||||
creatable = False
|
creatable = False
|
||||||
|
@ -54,36 +55,37 @@ class MemberView(CoreOpMasterView):
|
||||||
deletable = False
|
deletable = False
|
||||||
|
|
||||||
grid_columns = [
|
grid_columns = [
|
||||||
'card_number',
|
"card_number",
|
||||||
'first_name',
|
"first_name",
|
||||||
'last_name',
|
"last_name",
|
||||||
'street',
|
"street",
|
||||||
'city',
|
"city",
|
||||||
'state',
|
"state",
|
||||||
'zip',
|
"zip",
|
||||||
'phone',
|
"phone",
|
||||||
'email',
|
"email",
|
||||||
]
|
]
|
||||||
|
|
||||||
filter_defaults = {
|
filter_defaults = {
|
||||||
'card_number': {'active': True, 'verb': 'equal'},
|
"card_number": {"active": True, "verb": "equal"},
|
||||||
'first_name': {'active': True, 'verb': 'contains'},
|
"first_name": {"active": True, "verb": "contains"},
|
||||||
'last_name': {'active': True, 'verb': 'contains'},
|
"last_name": {"active": True, "verb": "contains"},
|
||||||
}
|
}
|
||||||
|
|
||||||
sort_defaults = 'card_number'
|
sort_defaults = "card_number"
|
||||||
|
|
||||||
def get_query(self, session=None):
|
def get_query(self, session=None):
|
||||||
""" """
|
""" """
|
||||||
query = super().get_query(session=session)
|
query = super().get_query(session=session)
|
||||||
|
|
||||||
op_model = self.corepos_handler.get_model_office_op()
|
op_model = self.corepos_handler.get_model_office_op()
|
||||||
query = query.outerjoin(op_model.CustomerClassic,
|
query = query.outerjoin(
|
||||||
sa.and_(
|
op_model.CustomerClassic,
|
||||||
op_model.CustomerClassic.card_number == op_model.MemberInfo.card_number,
|
sa.and_(
|
||||||
op_model.CustomerClassic.person_number == 1,
|
op_model.CustomerClassic.card_number == op_model.MemberInfo.card_number,
|
||||||
))\
|
op_model.CustomerClassic.person_number == 1,
|
||||||
.options(orm.joinedload(op_model.MemberInfo.customers))
|
),
|
||||||
|
).options(orm.joinedload(op_model.MemberInfo.customers))
|
||||||
|
|
||||||
return query
|
return query
|
||||||
|
|
||||||
|
@ -93,18 +95,18 @@ class MemberView(CoreOpMasterView):
|
||||||
op_model = self.corepos_handler.get_model_office_op()
|
op_model = self.corepos_handler.get_model_office_op()
|
||||||
|
|
||||||
# first_name
|
# first_name
|
||||||
g.set_renderer('first_name', self.render_customer_attr)
|
g.set_renderer("first_name", self.render_customer_attr)
|
||||||
g.set_sorter('first_name', op_model.CustomerClassic.first_name)
|
g.set_sorter("first_name", op_model.CustomerClassic.first_name)
|
||||||
|
|
||||||
# last_name
|
# last_name
|
||||||
g.set_renderer('last_name', self.render_customer_attr)
|
g.set_renderer("last_name", self.render_customer_attr)
|
||||||
g.set_sorter('last_name', op_model.CustomerClassic.last_name)
|
g.set_sorter("last_name", op_model.CustomerClassic.last_name)
|
||||||
|
|
||||||
# links
|
# links
|
||||||
if self.has_perm('view'):
|
if self.has_perm("view"):
|
||||||
g.set_link('card_number')
|
g.set_link("card_number")
|
||||||
g.set_link('first_name')
|
g.set_link("first_name")
|
||||||
g.set_link('last_name')
|
g.set_link("last_name")
|
||||||
|
|
||||||
def render_customer_attr(self, member, key, value):
|
def render_customer_attr(self, member, key, value):
|
||||||
""" """
|
""" """
|
||||||
|
@ -115,7 +117,7 @@ class MemberView(CoreOpMasterView):
|
||||||
def defaults(config, **kwargs):
|
def defaults(config, **kwargs):
|
||||||
base = globals()
|
base = globals()
|
||||||
|
|
||||||
MemberView = kwargs.get('MemberView', base['MemberView'])
|
MemberView = kwargs.get("MemberView", base["MemberView"])
|
||||||
MemberView.defaults(config)
|
MemberView.defaults(config)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -40,10 +40,11 @@ class ProductView(CoreOpMasterView):
|
||||||
* ``/corepos/products/``
|
* ``/corepos/products/``
|
||||||
* ``/corepos/products/XXX``
|
* ``/corepos/products/XXX``
|
||||||
"""
|
"""
|
||||||
|
|
||||||
model_class = Product
|
model_class = Product
|
||||||
model_title = "CORE-POS Product"
|
model_title = "CORE-POS Product"
|
||||||
route_prefix = 'corepos_products'
|
route_prefix = "corepos_products"
|
||||||
url_prefix = '/corepos/products'
|
url_prefix = "/corepos/products"
|
||||||
|
|
||||||
# nb. this is just for readonly lookup
|
# nb. this is just for readonly lookup
|
||||||
creatable = False
|
creatable = False
|
||||||
|
@ -51,45 +52,45 @@ class ProductView(CoreOpMasterView):
|
||||||
deletable = False
|
deletable = False
|
||||||
|
|
||||||
labels = {
|
labels = {
|
||||||
'upc': "UPC",
|
"upc": "UPC",
|
||||||
}
|
}
|
||||||
|
|
||||||
grid_columns = [
|
grid_columns = [
|
||||||
'upc',
|
"upc",
|
||||||
'brand',
|
"brand",
|
||||||
'description',
|
"description",
|
||||||
'size',
|
"size",
|
||||||
'department',
|
"department",
|
||||||
'vendor',
|
"vendor",
|
||||||
'normal_price',
|
"normal_price",
|
||||||
]
|
]
|
||||||
|
|
||||||
filter_defaults = {
|
filter_defaults = {
|
||||||
'upc': {'active': True, 'verb': 'contains'},
|
"upc": {"active": True, "verb": "contains"},
|
||||||
'brand': {'active': True, 'verb': 'contains'},
|
"brand": {"active": True, "verb": "contains"},
|
||||||
'description': {'active': True, 'verb': 'contains'},
|
"description": {"active": True, "verb": "contains"},
|
||||||
}
|
}
|
||||||
|
|
||||||
sort_defaults = 'upc'
|
sort_defaults = "upc"
|
||||||
|
|
||||||
def configure_grid(self, g):
|
def configure_grid(self, g):
|
||||||
""" """
|
""" """
|
||||||
super().configure_grid(g)
|
super().configure_grid(g)
|
||||||
|
|
||||||
# normal_price
|
# normal_price
|
||||||
g.set_renderer('normal_price', 'currency')
|
g.set_renderer("normal_price", "currency")
|
||||||
|
|
||||||
# links
|
# links
|
||||||
g.set_link('upc')
|
g.set_link("upc")
|
||||||
g.set_link('brand')
|
g.set_link("brand")
|
||||||
g.set_link('description')
|
g.set_link("description")
|
||||||
g.set_link('size')
|
g.set_link("size")
|
||||||
|
|
||||||
|
|
||||||
def defaults(config, **kwargs):
|
def defaults(config, **kwargs):
|
||||||
base = globals()
|
base = globals()
|
||||||
|
|
||||||
ProductView = kwargs.get('ProductView', base['ProductView'])
|
ProductView = kwargs.get("ProductView", base["ProductView"])
|
||||||
ProductView.defaults(config)
|
ProductView.defaults(config)
|
||||||
|
|
||||||
|
|
||||||
|
|
10
tasks.py
10
tasks.py
|
@ -15,10 +15,10 @@ def release(c, skip_tests=False):
|
||||||
Release a new version of Wutta-COREPOS
|
Release a new version of Wutta-COREPOS
|
||||||
"""
|
"""
|
||||||
if not skip_tests:
|
if not skip_tests:
|
||||||
c.run('pytest')
|
c.run("pytest")
|
||||||
|
|
||||||
if os.path.exists('dist'):
|
if os.path.exists("dist"):
|
||||||
shutil.rmtree('dist')
|
shutil.rmtree("dist")
|
||||||
|
|
||||||
c.run('python -m build --sdist')
|
c.run("python -m build --sdist")
|
||||||
c.run('twine upload dist/*')
|
c.run("twine upload dist/*")
|
||||||
|
|
|
@ -9,8 +9,8 @@ from wutta_corepos.db import model as mod
|
||||||
class TestCoreUser(ConfigTestCase):
|
class TestCoreUser(ConfigTestCase):
|
||||||
|
|
||||||
def test_str(self):
|
def test_str(self):
|
||||||
user = User(username='barney')
|
user = User(username="barney")
|
||||||
self.assertEqual(str(user), 'barney')
|
self.assertEqual(str(user), "barney")
|
||||||
|
|
||||||
ext = mod.CoreUser(user=user, corepos_employee_number=42)
|
ext = mod.CoreUser(user=user, corepos_employee_number=42)
|
||||||
self.assertEqual(str(ext), 'barney')
|
self.assertEqual(str(ext), "barney")
|
||||||
|
|
|
@ -13,11 +13,11 @@ class TestWuttaCoreposConfigExtension(TestCase):
|
||||||
config = WuttaConfig()
|
config = WuttaConfig()
|
||||||
|
|
||||||
# no engines by default
|
# no engines by default
|
||||||
self.assertFalse(hasattr(config, 'core_office_op_engine'))
|
self.assertFalse(hasattr(config, "core_office_op_engine"))
|
||||||
self.assertFalse(hasattr(config, 'core_office_trans_engine'))
|
self.assertFalse(hasattr(config, "core_office_trans_engine"))
|
||||||
self.assertFalse(hasattr(config, 'core_office_arch_engine'))
|
self.assertFalse(hasattr(config, "core_office_arch_engine"))
|
||||||
self.assertFalse(hasattr(config, 'core_lane_op_engine'))
|
self.assertFalse(hasattr(config, "core_lane_op_engine"))
|
||||||
self.assertFalse(hasattr(config, 'core_lane_trans_engine'))
|
self.assertFalse(hasattr(config, "core_lane_trans_engine"))
|
||||||
ext = mod.WuttaCoreposConfigExtension()
|
ext = mod.WuttaCoreposConfigExtension()
|
||||||
ext.configure(config)
|
ext.configure(config)
|
||||||
self.assertIsNone(config.core_office_op_engine)
|
self.assertIsNone(config.core_office_op_engine)
|
||||||
|
@ -27,10 +27,10 @@ class TestWuttaCoreposConfigExtension(TestCase):
|
||||||
self.assertIsNone(config.core_lane_trans_engine)
|
self.assertIsNone(config.core_lane_trans_engine)
|
||||||
|
|
||||||
# but config can change that
|
# but config can change that
|
||||||
config.setdefault('corepos.db.office_op.default.url', 'sqlite://')
|
config.setdefault("corepos.db.office_op.default.url", "sqlite://")
|
||||||
config.setdefault('corepos.db.lane_trans.default.url', 'sqlite://')
|
config.setdefault("corepos.db.lane_trans.default.url", "sqlite://")
|
||||||
ext.configure(config)
|
ext.configure(config)
|
||||||
self.assertIsNotNone(config.core_office_op_engine)
|
self.assertIsNotNone(config.core_office_op_engine)
|
||||||
self.assertEqual(str(config.core_office_op_engine.url), 'sqlite://')
|
self.assertEqual(str(config.core_office_op_engine.url), "sqlite://")
|
||||||
self.assertIsNotNone(config.core_lane_trans_engine)
|
self.assertIsNotNone(config.core_lane_trans_engine)
|
||||||
self.assertEqual(str(config.core_lane_trans_engine.url), 'sqlite://')
|
self.assertEqual(str(config.core_lane_trans_engine.url), "sqlite://")
|
||||||
|
|
|
@ -18,75 +18,91 @@ class TestCoreposHandler(ConfigTestCase):
|
||||||
|
|
||||||
def test_get_model_office_op(self):
|
def test_get_model_office_op(self):
|
||||||
from corepos.db.office_op import model
|
from corepos.db.office_op import model
|
||||||
|
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
op_model = handler.get_model_office_op()
|
op_model = handler.get_model_office_op()
|
||||||
self.assertIs(op_model, model)
|
self.assertIs(op_model, model)
|
||||||
|
|
||||||
def test_get_model_office_trans(self):
|
def test_get_model_office_trans(self):
|
||||||
from corepos.db.office_trans import model
|
from corepos.db.office_trans import model
|
||||||
|
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
trans_model = handler.get_model_office_trans()
|
trans_model = handler.get_model_office_trans()
|
||||||
self.assertIs(trans_model, model)
|
self.assertIs(trans_model, model)
|
||||||
|
|
||||||
def test_get_model_office_arch(self):
|
def test_get_model_office_arch(self):
|
||||||
from corepos.db.office_arch import model
|
from corepos.db.office_arch import model
|
||||||
|
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
arch_model = handler.get_model_office_arch()
|
arch_model = handler.get_model_office_arch()
|
||||||
self.assertIs(arch_model, model)
|
self.assertIs(arch_model, model)
|
||||||
|
|
||||||
def test_get_model_lane_op(self):
|
def test_get_model_lane_op(self):
|
||||||
from corepos.db.lane_op import model
|
from corepos.db.lane_op import model
|
||||||
|
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
op_model = handler.get_model_lane_op()
|
op_model = handler.get_model_lane_op()
|
||||||
self.assertIs(op_model, model)
|
self.assertIs(op_model, model)
|
||||||
|
|
||||||
def test_get_model_lane_trans(self):
|
def test_get_model_lane_trans(self):
|
||||||
from corepos.db.lane_trans import model
|
from corepos.db.lane_trans import model
|
||||||
|
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
trans_model = handler.get_model_lane_trans()
|
trans_model = handler.get_model_lane_trans()
|
||||||
self.assertIs(trans_model, model)
|
self.assertIs(trans_model, model)
|
||||||
|
|
||||||
def test_make_session_office_op(self):
|
def test_make_session_office_op(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
engine = sa.create_engine('sqlite://')
|
engine = sa.create_engine("sqlite://")
|
||||||
with patch.object(self.config, 'core_office_op_engines', create=True,
|
with patch.object(
|
||||||
new={'default': engine}):
|
self.config, "core_office_op_engines", create=True, new={"default": engine}
|
||||||
|
):
|
||||||
op_session = handler.make_session_office_op()
|
op_session = handler.make_session_office_op()
|
||||||
self.assertIsInstance(op_session, orm.Session)
|
self.assertIsInstance(op_session, orm.Session)
|
||||||
self.assertIs(op_session.bind, engine)
|
self.assertIs(op_session.bind, engine)
|
||||||
|
|
||||||
def test_make_session_office_trans(self):
|
def test_make_session_office_trans(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
engine = sa.create_engine('sqlite://')
|
engine = sa.create_engine("sqlite://")
|
||||||
with patch.object(self.config, 'core_office_trans_engines', create=True,
|
with patch.object(
|
||||||
new={'default': engine}):
|
self.config,
|
||||||
|
"core_office_trans_engines",
|
||||||
|
create=True,
|
||||||
|
new={"default": engine},
|
||||||
|
):
|
||||||
trans_session = handler.make_session_office_trans()
|
trans_session = handler.make_session_office_trans()
|
||||||
self.assertIsInstance(trans_session, orm.Session)
|
self.assertIsInstance(trans_session, orm.Session)
|
||||||
self.assertIs(trans_session.bind, engine)
|
self.assertIs(trans_session.bind, engine)
|
||||||
|
|
||||||
def test_make_session_office_arch(self):
|
def test_make_session_office_arch(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
engine = sa.create_engine('sqlite://')
|
engine = sa.create_engine("sqlite://")
|
||||||
with patch.object(self.config, 'core_office_arch_engines', create=True,
|
with patch.object(
|
||||||
new={'default': engine}):
|
self.config,
|
||||||
|
"core_office_arch_engines",
|
||||||
|
create=True,
|
||||||
|
new={"default": engine},
|
||||||
|
):
|
||||||
arch_session = handler.make_session_office_arch()
|
arch_session = handler.make_session_office_arch()
|
||||||
self.assertIsInstance(arch_session, orm.Session)
|
self.assertIsInstance(arch_session, orm.Session)
|
||||||
self.assertIs(arch_session.bind, engine)
|
self.assertIs(arch_session.bind, engine)
|
||||||
|
|
||||||
def test_make_session_lane_op(self):
|
def test_make_session_lane_op(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
engine = sa.create_engine('sqlite://')
|
engine = sa.create_engine("sqlite://")
|
||||||
with patch.object(self.config, 'core_lane_op_engines', create=True,
|
with patch.object(
|
||||||
new={'default': engine}):
|
self.config, "core_lane_op_engines", create=True, new={"default": engine}
|
||||||
|
):
|
||||||
op_session = handler.make_session_lane_op()
|
op_session = handler.make_session_lane_op()
|
||||||
self.assertIsInstance(op_session, orm.Session)
|
self.assertIsInstance(op_session, orm.Session)
|
||||||
self.assertIs(op_session.bind, engine)
|
self.assertIs(op_session.bind, engine)
|
||||||
|
|
||||||
def test_make_session_lane_trans(self):
|
def test_make_session_lane_trans(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
engine = sa.create_engine('sqlite://')
|
engine = sa.create_engine("sqlite://")
|
||||||
with patch.object(self.config, 'core_lane_trans_engines', create=True,
|
with patch.object(
|
||||||
new={'default': engine}):
|
self.config, "core_lane_trans_engines", create=True, new={"default": engine}
|
||||||
|
):
|
||||||
trans_session = handler.make_session_lane_trans()
|
trans_session = handler.make_session_lane_trans()
|
||||||
self.assertIsInstance(trans_session, orm.Session)
|
self.assertIsInstance(trans_session, orm.Session)
|
||||||
self.assertIs(trans_session.bind, engine)
|
self.assertIs(trans_session.bind, engine)
|
||||||
|
@ -101,9 +117,11 @@ class TestCoreposHandler(ConfigTestCase):
|
||||||
self.assertRaises(ConfigurationError, handler.get_office_url, require=True)
|
self.assertRaises(ConfigurationError, handler.get_office_url, require=True)
|
||||||
|
|
||||||
# config can specify (traliing slash is stripped)
|
# config can specify (traliing slash is stripped)
|
||||||
self.config.setdefault('corepos.office.url', 'http://localhost/fannie/')
|
self.config.setdefault("corepos.office.url", "http://localhost/fannie/")
|
||||||
self.assertEqual(handler.get_office_url(), 'http://localhost/fannie')
|
self.assertEqual(handler.get_office_url(), "http://localhost/fannie")
|
||||||
self.assertEqual(handler.get_office_url(require=True), 'http://localhost/fannie')
|
self.assertEqual(
|
||||||
|
handler.get_office_url(require=True), "http://localhost/fannie"
|
||||||
|
)
|
||||||
|
|
||||||
def test_get_office_department_url(self):
|
def test_get_office_department_url(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
|
@ -112,8 +130,11 @@ class TestCoreposHandler(ConfigTestCase):
|
||||||
self.assertIsNone(handler.get_office_department_url(7))
|
self.assertIsNone(handler.get_office_department_url(7))
|
||||||
|
|
||||||
# typical
|
# typical
|
||||||
self.config.setdefault('corepos.office.url', 'http://localhost/fannie/')
|
self.config.setdefault("corepos.office.url", "http://localhost/fannie/")
|
||||||
self.assertEqual(handler.get_office_department_url(7), 'http://localhost/fannie/item/departments/DepartmentEditor.php?did=7')
|
self.assertEqual(
|
||||||
|
handler.get_office_department_url(7),
|
||||||
|
"http://localhost/fannie/item/departments/DepartmentEditor.php?did=7",
|
||||||
|
)
|
||||||
|
|
||||||
def test_get_office_employee_url(self):
|
def test_get_office_employee_url(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
|
@ -122,8 +143,11 @@ class TestCoreposHandler(ConfigTestCase):
|
||||||
self.assertIsNone(handler.get_office_employee_url(7))
|
self.assertIsNone(handler.get_office_employee_url(7))
|
||||||
|
|
||||||
# typical
|
# typical
|
||||||
self.config.setdefault('corepos.office.url', 'http://localhost/fannie/')
|
self.config.setdefault("corepos.office.url", "http://localhost/fannie/")
|
||||||
self.assertEqual(handler.get_office_employee_url(7), 'http://localhost/fannie/admin/Cashiers/CashierEditor.php?emp_no=7')
|
self.assertEqual(
|
||||||
|
handler.get_office_employee_url(7),
|
||||||
|
"http://localhost/fannie/admin/Cashiers/CashierEditor.php?emp_no=7",
|
||||||
|
)
|
||||||
|
|
||||||
def test_get_office_likecode_url(self):
|
def test_get_office_likecode_url(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
|
@ -132,18 +156,24 @@ class TestCoreposHandler(ConfigTestCase):
|
||||||
self.assertIsNone(handler.get_office_likecode_url(7))
|
self.assertIsNone(handler.get_office_likecode_url(7))
|
||||||
|
|
||||||
# typical
|
# typical
|
||||||
self.config.setdefault('corepos.office.url', 'http://localhost/fannie/')
|
self.config.setdefault("corepos.office.url", "http://localhost/fannie/")
|
||||||
self.assertEqual(handler.get_office_likecode_url(7), 'http://localhost/fannie/item/likecodes/LikeCodeEditor.php?start=7')
|
self.assertEqual(
|
||||||
|
handler.get_office_likecode_url(7),
|
||||||
|
"http://localhost/fannie/item/likecodes/LikeCodeEditor.php?start=7",
|
||||||
|
)
|
||||||
|
|
||||||
def test_get_office_product_url(self):
|
def test_get_office_product_url(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
|
|
||||||
# null
|
# null
|
||||||
self.assertIsNone(handler.get_office_product_url('07430500132'))
|
self.assertIsNone(handler.get_office_product_url("07430500132"))
|
||||||
|
|
||||||
# typical
|
# typical
|
||||||
self.config.setdefault('corepos.office.url', 'http://localhost/fannie/')
|
self.config.setdefault("corepos.office.url", "http://localhost/fannie/")
|
||||||
self.assertEqual(handler.get_office_product_url('07430500132'), 'http://localhost/fannie/item/ItemEditorPage.php?searchupc=07430500132')
|
self.assertEqual(
|
||||||
|
handler.get_office_product_url("07430500132"),
|
||||||
|
"http://localhost/fannie/item/ItemEditorPage.php?searchupc=07430500132",
|
||||||
|
)
|
||||||
|
|
||||||
def test_get_office_vendor_url(self):
|
def test_get_office_vendor_url(self):
|
||||||
handler = self.make_handler()
|
handler = self.make_handler()
|
||||||
|
@ -152,5 +182,8 @@ class TestCoreposHandler(ConfigTestCase):
|
||||||
self.assertIsNone(handler.get_office_vendor_url(7))
|
self.assertIsNone(handler.get_office_vendor_url(7))
|
||||||
|
|
||||||
# typical
|
# typical
|
||||||
self.config.setdefault('corepos.office.url', 'http://localhost/fannie/')
|
self.config.setdefault("corepos.office.url", "http://localhost/fannie/")
|
||||||
self.assertEqual(handler.get_office_vendor_url(7), 'http://localhost/fannie/item/vendors/VendorIndexPage.php?vid=7')
|
self.assertEqual(
|
||||||
|
handler.get_office_vendor_url(7),
|
||||||
|
"http://localhost/fannie/item/vendors/VendorIndexPage.php?vid=7",
|
||||||
|
)
|
||||||
|
|
|
@ -29,16 +29,18 @@ class TestMemberView(WebTestCase):
|
||||||
def test_configure_grid(self):
|
def test_configure_grid(self):
|
||||||
view = self.make_view()
|
view = self.make_view()
|
||||||
grid = view.make_grid(model_class=view.model_class)
|
grid = view.make_grid(model_class=view.model_class)
|
||||||
self.assertNotIn('first_name', grid.renderers)
|
self.assertNotIn("first_name", grid.renderers)
|
||||||
self.assertNotIn('first_name', grid.linked_columns)
|
self.assertNotIn("first_name", grid.linked_columns)
|
||||||
with patch.object(self.request, 'is_root', new=True):
|
with patch.object(self.request, "is_root", new=True):
|
||||||
view.configure_grid(grid)
|
view.configure_grid(grid)
|
||||||
self.assertIn('first_name', grid.renderers)
|
self.assertIn("first_name", grid.renderers)
|
||||||
self.assertIn('first_name', grid.linked_columns)
|
self.assertIn("first_name", grid.linked_columns)
|
||||||
|
|
||||||
def test_render_customer_attr(self):
|
def test_render_customer_attr(self):
|
||||||
view = self.make_view()
|
view = self.make_view()
|
||||||
member = op_model.MemberInfo()
|
member = op_model.MemberInfo()
|
||||||
customer = op_model.CustomerClassic(first_name="Fred")
|
customer = op_model.CustomerClassic(first_name="Fred")
|
||||||
member.customers.append(customer)
|
member.customers.append(customer)
|
||||||
self.assertEqual(view.render_customer_attr(member, 'first_name', 'nope'), "Fred")
|
self.assertEqual(
|
||||||
|
view.render_customer_attr(member, "first_name", "nope"), "Fred"
|
||||||
|
)
|
||||||
|
|
|
@ -16,6 +16,6 @@ class TestProductView(WebTestCase):
|
||||||
def test_configure_grid(self):
|
def test_configure_grid(self):
|
||||||
view = self.make_view()
|
view = self.make_view()
|
||||||
grid = view.make_grid(model_class=view.model_class)
|
grid = view.make_grid(model_class=view.model_class)
|
||||||
self.assertNotIn('upc', grid.linked_columns)
|
self.assertNotIn("upc", grid.linked_columns)
|
||||||
view.configure_grid(grid)
|
view.configure_grid(grid)
|
||||||
self.assertIn('upc', grid.linked_columns)
|
self.assertIn("upc", grid.linked_columns)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue