fix: use wuttaweb logic for util.get_form_data()

This commit is contained in:
Lance Edgar 2024-08-04 14:56:12 -05:00
parent 5ec899cf08
commit 3b92bb3a9e
6 changed files with 65 additions and 17 deletions

6
docs/api/util.rst Normal file
View file

@ -0,0 +1,6 @@
``tailbone.util``
=================
.. automodule:: tailbone.util
:members:

View file

@ -52,6 +52,7 @@ Package API:
api/grids.core api/grids.core
api/progress api/progress
api/subscribers api/subscribers
api/util
api/views/batch api/views/batch
api/views/batch.vendorcatalog api/views/batch.vendorcatalog
api/views/core api/views/core

View file

@ -35,7 +35,7 @@ from sqlalchemy import orm
from sqlalchemy.ext.associationproxy import AssociationProxy, ASSOCIATION_PROXY from sqlalchemy.ext.associationproxy import AssociationProxy, ASSOCIATION_PROXY
from wuttjamaican.util import UNSPECIFIED from wuttjamaican.util import UNSPECIFIED
from rattail.util import prettify, pretty_boolean from rattail.util import pretty_boolean
from rattail.db.util import get_fieldnames from rattail.db.util import get_fieldnames
import colander import colander
@ -47,8 +47,10 @@ from pyramid_deform import SessionFileUploadTempStore
from pyramid.renderers import render from pyramid.renderers import render
from webhelpers2.html import tags, HTML from webhelpers2.html import tags, HTML
from wuttaweb.util import get_form_data
from tailbone.db import Session from tailbone.db import Session
from tailbone.util import raw_datetime, get_form_data, render_markdown from tailbone.util import raw_datetime, render_markdown
from tailbone.forms import types from tailbone.forms import types
from tailbone.forms.widgets import (ReadonlyWidget, PlainDateWidget, from tailbone.forms.widgets import (ReadonlyWidget, PlainDateWidget,
JQueryDateWidget, JQueryTimeWidget, JQueryDateWidget, JQueryTimeWidget,
@ -570,7 +572,9 @@ class Form(object):
self.schema[key].title = label self.schema[key].title = label
def get_label(self, key): def get_label(self, key):
return self.labels.get(key, prettify(key)) config = self.request.rattail_config
app = config.get_app()
return self.labels.get(key, app.make_title(key))
def set_readonly(self, key, readonly=True): def set_readonly(self, key, readonly=True):
if readonly: if readonly:

View file

@ -39,6 +39,8 @@ from pyramid.renderers import get_renderer
from pyramid.interfaces import IRoutesMapper from pyramid.interfaces import IRoutesMapper
from webhelpers2.html import HTML, tags from webhelpers2.html import HTML, tags
from wuttaweb.util import get_form_data as wutta_get_form_data
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -75,17 +77,13 @@ def csrf_token(request, name='_csrf'):
def get_form_data(request): def get_form_data(request):
""" """
Returns the effective form data for the given request. Mostly DEPECATED - use :func:`wuttaweb:wuttaweb.util.get_form_data()`
this is a convenience, to return either POST or JSON depending on instead.
the type of request.
""" """
# nb. we prefer JSON only if no POST is present warnings.warn("tailbone.util.get_form_data() is deprecated; "
# TODO: this seems to work for our use case at least, but perhaps "please use wuttaweb.util.get_form_data() instead",
# there is a better way? see also DeprecationWarning, stacklevel=2)
# https://docs.pylonsproject.org/projects/pyramid/en/latest/api/request.html#pyramid.request.Request.is_xhr return wutta_get_form_data(request)
if (request.is_xhr or request.content_type == 'application/json') and not request.POST:
return request.json_body
return request.POST
def get_global_search_options(request): def get_global_search_options(request):

View file

@ -25,22 +25,22 @@ Views for 'receiving' (purchasing) batches
""" """
import os import os
import re
import decimal import decimal
import logging import logging
from collections import OrderedDict from collections import OrderedDict
import humanize # import humanize
from rattail import pod from rattail import pod
from rattail.util import prettify, simple_error from rattail.util import simple_error
import colander import colander
from deform import widget as dfwidget from deform import widget as dfwidget
from webhelpers2.html import tags, HTML from webhelpers2.html import tags, HTML
from wuttaweb.util import get_form_data
from tailbone import forms, grids from tailbone import forms, grids
from tailbone.util import get_form_data
from tailbone.views.purchasing import PurchasingBatchView from tailbone.views.purchasing import PurchasingBatchView

39
tests/test_util.py Normal file
View file

@ -0,0 +1,39 @@
# -*- coding: utf-8; -*-
from unittest import TestCase
from pyramid import testing
from rattail.config import RattailConfig
from tailbone import util
class TestGetFormData(TestCase):
def setUp(self):
self.config = RattailConfig()
def make_request(self, **kwargs):
kwargs.setdefault('wutta_config', self.config)
kwargs.setdefault('rattail_config', self.config)
kwargs.setdefault('is_xhr', None)
kwargs.setdefault('content_type', None)
kwargs.setdefault('POST', {'foo1': 'bar'})
kwargs.setdefault('json_body', {'foo2': 'baz'})
return testing.DummyRequest(**kwargs)
def test_default(self):
request = self.make_request()
data = util.get_form_data(request)
self.assertEqual(data, {'foo1': 'bar'})
def test_is_xhr(self):
request = self.make_request(POST=None, is_xhr=True)
data = util.get_form_data(request)
self.assertEqual(data, {'foo2': 'baz'})
def test_content_type(self):
request = self.make_request(POST=None, content_type='application/json')
data = util.get_form_data(request)
self.assertEqual(data, {'foo2': 'baz'})