From f611a5a5215b769505a3d0e0f747a310617c59c3 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Sat, 11 Feb 2023 22:05:45 -0600 Subject: [PATCH] Refactor `Query.get()` => `Session.get()` per SQLAlchemy 1.4 --- tailbone/api/batch/core.py | 28 ++++++++---------- tailbone/api/batch/receiving.py | 15 ++++------ tailbone/api/common.py | 6 ++-- tailbone/api/master.py | 4 +-- tailbone/api/products.py | 11 +++----- tailbone/auth.py | 6 ++-- tailbone/forms/common.py | 6 ++-- tailbone/forms/receiving.py | 6 ++-- tailbone/forms/types.py | 14 ++++----- tailbone/forms/widgets.py | 2 +- tailbone/subscribers.py | 2 +- tailbone/views/asgi/__init__.py | 4 +-- tailbone/views/batch/core.py | 19 ++++++------- tailbone/views/batch/importer.py | 2 +- tailbone/views/batch/inventory.py | 6 ++-- tailbone/views/batch/vendorcatalog.py | 4 +-- tailbone/views/common.py | 2 +- tailbone/views/core.py | 2 +- tailbone/views/customers.py | 10 +++---- tailbone/views/custorders/items.py | 2 +- tailbone/views/custorders/orders.py | 39 ++++++++++++-------------- tailbone/views/employees.py | 4 +-- tailbone/views/master.py | 14 ++++----- tailbone/views/messages.py | 2 +- tailbone/views/people.py | 34 +++++++++++----------- tailbone/views/products.py | 20 ++++++------- tailbone/views/purchases/credits.py | 2 +- tailbone/views/purchasing/batch.py | 14 ++++----- tailbone/views/purchasing/costing.py | 6 ++-- tailbone/views/purchasing/ordering.py | 4 +-- tailbone/views/purchasing/receiving.py | 18 ++++++------ tailbone/views/reports.py | 6 ++-- tailbone/views/settings.py | 2 +- tailbone/views/shifts/lib.py | 17 +++++------ tailbone/views/shifts/schedule.py | 8 ++---- tailbone/views/shifts/timesheet.py | 8 ++---- tailbone/views/tempmon/dashboard.py | 4 +-- tailbone/views/users.py | 21 ++++++-------- 38 files changed, 169 insertions(+), 205 deletions(-) diff --git a/tailbone/api/batch/core.py b/tailbone/api/batch/core.py index 5b6102ed..a1c06ee6 100644 --- a/tailbone/api/batch/core.py +++ b/tailbone/api/batch/core.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2022 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,13 +24,9 @@ Tailbone Web API - Batch Views """ -from __future__ import unicode_literals, absolute_import - import logging import warnings -import six - from cornice import Service from tailbone.api import APIMasterView @@ -104,25 +100,25 @@ class APIBatchView(APIBatchMixin, APIMasterView): return { 'uuid': batch.uuid, - '_str': six.text_type(batch), + '_str': str(batch), 'id': batch.id, 'id_str': batch.id_str, 'description': batch.description, 'notes': batch.notes, 'params': batch.params or {}, 'rowcount': batch.rowcount, - 'created': six.text_type(created), + 'created': str(created), 'created_display': self.pretty_datetime(created), 'created_by_uuid': batch.created_by.uuid, - 'created_by_display': six.text_type(batch.created_by), + 'created_by_display': str(batch.created_by), 'complete': batch.complete, 'status_code': batch.status_code, 'status_display': batch.STATUS.get(batch.status_code, - six.text_type(batch.status_code)), - 'executed': six.text_type(executed) if executed else None, + str(batch.status_code)), + 'executed': str(executed) if executed else None, 'executed_display': self.pretty_datetime(executed) if executed else None, 'executed_by_uuid': batch.executed_by_uuid, - 'executed_by_display': six.text_type(batch.executed_by or ''), + 'executed_by_display': str(batch.executed_by or ''), 'mutable': self.batch_handler.is_mutable(batch), } @@ -273,8 +269,8 @@ class APIBatchRowView(APIBatchMixin, APIMasterView): batch = row.batch return { 'uuid': row.uuid, - '_str': six.text_type(row), - '_parent_str': six.text_type(batch), + '_str': str(row), + '_parent_str': str(batch), '_parent_uuid': batch.uuid, 'batch_uuid': batch.uuid, 'batch_id': batch.id, @@ -285,7 +281,7 @@ class APIBatchRowView(APIBatchMixin, APIMasterView): 'batch_mutable': self.batch_handler.is_mutable(batch), 'sequence': row.sequence, 'status_code': row.status_code, - 'status_display': row.STATUS.get(row.status_code, six.text_type(row.status_code)), + 'status_display': row.STATUS.get(row.status_code, str(row.status_code)), } def update_object(self, row, data): @@ -320,7 +316,7 @@ class APIBatchRowView(APIBatchMixin, APIMasterView): data = self.request.json_body uuid = data['batch_uuid'] - batch = self.Session.query(self.get_batch_class()).get(uuid) + batch = self.Session.get(self.get_batch_class(), uuid) if not batch: raise self.notfound() @@ -332,7 +328,7 @@ class APIBatchRowView(APIBatchMixin, APIMasterView): log.warning("quick entry failed for '%s' batch %s: %s", self.batch_handler.batch_key, batch.id_str, entry, exc_info=True) - msg = six.text_type(error) + msg = str(error) if not msg and isinstance(error, NotImplementedError): msg = "Feature is not implemented" return {'error': msg} diff --git a/tailbone/api/batch/receiving.py b/tailbone/api/batch/receiving.py index c755de65..339fc43f 100644 --- a/tailbone/api/batch/receiving.py +++ b/tailbone/api/batch/receiving.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2022 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,11 +24,8 @@ Tailbone Web API - Receiving Batches """ -from __future__ import unicode_literals, absolute_import - import logging -import six import humanize from rattail.db import model @@ -64,10 +61,10 @@ class ReceivingBatchViews(APIBatchView): data = super(ReceivingBatchViews, self).normalize(batch) data['vendor_uuid'] = batch.vendor.uuid - data['vendor_display'] = six.text_type(batch.vendor) + data['vendor_display'] = str(batch.vendor) data['department_uuid'] = batch.department_uuid - data['department_display'] = six.text_type(batch.department) if batch.department else None + data['department_display'] = str(batch.department) if batch.department else None data['po_total'] = batch.po_total data['invoice_total'] = batch.invoice_total @@ -115,7 +112,7 @@ class ReceivingBatchViews(APIBatchView): def eligible_purchases(self): uuid = self.request.params.get('vendor_uuid') - vendor = self.Session.query(model.Vendor).get(uuid) if uuid else None + vendor = self.Session.get(model.Vendor, uuid) if uuid else None if not vendor: return {'error': "Vendor not found"} @@ -289,7 +286,7 @@ class ReceivingBatchRowViews(APIBatchRowView): data['product_uuid'] = row.product_uuid data['item_id'] = row.item_id - data['upc'] = six.text_type(row.upc) + data['upc'] = str(row.upc) data['upc_pretty'] = row.upc.pretty() if row.upc else None data['brand_name'] = row.brand_name data['description'] = row.description @@ -415,7 +412,7 @@ class ReceivingBatchRowViews(APIBatchRowView): return {'error': "Form did not validate"} # fetch / validate row object - row = self.Session.query(model.PurchaseBatchRow).get(form.validated['row']) + row = self.Session.get(model.PurchaseBatchRow, form.validated['row']) if row is not self.get_object(): return {'error': "Specified row does not match the route!"} diff --git a/tailbone/api/common.py b/tailbone/api/common.py index 3e96609a..b82bafd0 100644 --- a/tailbone/api/common.py +++ b/tailbone/api/common.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2022 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,8 +24,6 @@ Tailbone Web API - "Common" Views """ -from __future__ import unicode_literals, absolute_import - import rattail from rattail.db import model from rattail.mail import send_email @@ -97,7 +95,7 @@ class CommonView(APIView): if self.request.user: data['user'] = self.request.user elif data['user']: - data['user'] = Session.query(model.User).get(data['user']) + data['user'] = Session.get(model.User, data['user']) # TODO: should provide URL to view user if data['user']: diff --git a/tailbone/api/master.py b/tailbone/api/master.py index 8cb2cdee..dabc31ff 100644 --- a/tailbone/api/master.py +++ b/tailbone/api/master.py @@ -339,7 +339,7 @@ class APIMasterView(APIView): if not uuid: uuid = self.request.matchdict['uuid'] - obj = self.Session.query(self.get_model_class()).get(uuid) + obj = self.Session.get(self.get_model_class(), uuid) if obj: return obj @@ -390,7 +390,7 @@ class APIMasterView(APIView): """ if not uuid: uuid = self.request.matchdict['uuid'] - obj = self.Session.query(self.get_model_class()).get(uuid) + obj = self.Session.get(self.get_model_class(), uuid) if not obj: raise self.notfound() diff --git a/tailbone/api/products.py b/tailbone/api/products.py index 4c3df983..a2e2db73 100644 --- a/tailbone/api/products.py +++ b/tailbone/api/products.py @@ -24,11 +24,8 @@ Tailbone Web API - Product Views """ -from __future__ import unicode_literals, absolute_import - import logging -import six import sqlalchemy as sa from sqlalchemy import orm @@ -84,7 +81,7 @@ class ProductView(APIMasterView): # but must supplement cost = product.cost data.update({ - 'upc': six.text_type(product.upc), + 'upc': str(product.upc), 'scancode': product.scancode, 'item_id': product.item_id, 'item_type': product.item_type, @@ -135,12 +132,12 @@ class ProductView(APIMasterView): data = self.request.json_body uuid = data.get('label_profile_uuid') - profile = self.Session.query(model.LabelProfile).get(uuid) if uuid else None + profile = self.Session.get(model.LabelProfile, uuid) if uuid else None if not profile: return {'error': "Label profile not found"} uuid = data.get('product_uuid') - product = self.Session.query(model.Product).get(uuid) if uuid else None + product = self.Session.get(model.Product, uuid) if uuid else None if not product: return {'error': "Product not found"} @@ -157,7 +154,7 @@ class ProductView(APIMasterView): printer.print_labels([({'product': product}, quantity)]) except Exception as error: log.warning("error occurred while printing labels", exc_info=True) - return {'error': six.text_type(error)} + return {'error': str(error)} return {'ok': True} diff --git a/tailbone/auth.py b/tailbone/auth.py index 88fbab0b..0c90003a 100644 --- a/tailbone/auth.py +++ b/tailbone/auth.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2021 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,8 +24,6 @@ Authentication & Authorization """ -from __future__ import unicode_literals, absolute_import - import logging from rattail import enum @@ -107,7 +105,7 @@ class TailboneAuthorizationPolicy(object): # re-creating the database, which means new user uuids. # TODO: the odds of this query returning a user in that # case, are probably nil, and we should just skip this bit? - user = Session.query(model.User).get(userid) + user = Session.get(model.User, userid) if user: if auth.has_permission(Session(), user, permission): return True diff --git a/tailbone/forms/common.py b/tailbone/forms/common.py index 4d58b943..6183d17f 100644 --- a/tailbone/forms/common.py +++ b/tailbone/forms/common.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2022 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,8 +24,6 @@ Common Forms """ -from __future__ import unicode_literals, absolute_import - from rattail.db import model import colander @@ -35,7 +33,7 @@ import colander def validate_user(node, kw): session = kw['session'] def validate(node, value): - user = session.query(model.User).get(value) + user = session.get(model.User, value) if not user: raise colander.Invalid(node, "User not found") return user.uuid diff --git a/tailbone/forms/receiving.py b/tailbone/forms/receiving.py index 40fa35fe..20c4774f 100644 --- a/tailbone/forms/receiving.py +++ b/tailbone/forms/receiving.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2019 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,8 +24,6 @@ Forms for Receiving """ -from __future__ import unicode_literals, absolute_import - from rattail.db import model import colander @@ -35,7 +33,7 @@ import colander def valid_purchase_batch_row(node, kw): session = kw['session'] def validate(node, value): - row = session.query(model.PurchaseBatchRow).get(value) + row = session.get(model.PurchaseBatchRow, value) if not row: raise colander.Invalid(node, "Batch row not found") if row.batch.executed: diff --git a/tailbone/forms/types.py b/tailbone/forms/types.py index d9f7e828..0d87ae3f 100644 --- a/tailbone/forms/types.py +++ b/tailbone/forms/types.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2019 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,13 +24,9 @@ Form Schema Types """ -from __future__ import unicode_literals, absolute_import - import re import datetime -import six - from rattail.db import model from rattail.gpc import GPC @@ -84,7 +80,7 @@ class GPCType(colander.SchemaType): def serialize(self, node, appstruct): if appstruct is colander.null: return colander.null - return six.text_type(appstruct) + return str(appstruct) def deserialize(self, node, cstruct): if not cstruct: @@ -95,7 +91,7 @@ class GPCType(colander.SchemaType): try: return GPC(digits) except Exception as err: - raise colander.Invalid(node, six.text_type(err)) + raise colander.Invalid(node, str(err)) class ProductQuantity(colander.MappingSchema): @@ -133,12 +129,12 @@ class ModelType(colander.SchemaType): def serialize(self, node, appstruct): if appstruct is colander.null: return colander.null - return six.text_type(appstruct) + return str(appstruct) def deserialize(self, node, cstruct): if not cstruct: return None - obj = self.session.query(self.model_class).get(cstruct) + obj = self.session.get(self.model_class, cstruct) if not obj: raise colander.Invalid(node, "{} not found".format(self.model_title)) return obj diff --git a/tailbone/forms/widgets.py b/tailbone/forms/widgets.py index d02d12d1..28b24678 100644 --- a/tailbone/forms/widgets.py +++ b/tailbone/forms/widgets.py @@ -410,7 +410,7 @@ class CustomerAutocompleteWidget(JQueryAutocompleteWidget): # fetch customer to provide button label, if we have a value if cstruct: model = self.request.rattail_config.get_model() - customer = Session.query(model.Customer).get(cstruct) + customer = Session.get(model.Customer, cstruct) if customer: self.field_display = str(customer) diff --git a/tailbone/subscribers.py b/tailbone/subscribers.py index 229296ab..60fba60d 100644 --- a/tailbone/subscribers.py +++ b/tailbone/subscribers.py @@ -74,7 +74,7 @@ def new_request(event): uuid = request.authenticated_userid if uuid: model = request.rattail_config.get_model() - user = Session.query(model.User).get(uuid) + user = Session.get(model.User, uuid) if user: Session().set_continuum_user(user) return user diff --git a/tailbone/views/asgi/__init__.py b/tailbone/views/asgi/__init__.py index d0c12d9c..bebe16f3 100644 --- a/tailbone/views/asgi/__init__.py +++ b/tailbone/views/asgi/__init__.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2022 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -89,7 +89,7 @@ class WebsocketView(object): session=session) as s: # load user proper - return s.query(model.User).get(user_uuid) + return s.get(model.User, user_uuid) def get_user_session(self, scope): settings = self.registry.settings diff --git a/tailbone/views/batch/core.py b/tailbone/views/batch/core.py index 54fe9b0c..2ba7e6da 100644 --- a/tailbone/views/batch/core.py +++ b/tailbone/views/batch/core.py @@ -32,7 +32,6 @@ import logging import socket import subprocess import tempfile -from six import StringIO import json import markdown @@ -236,7 +235,7 @@ class BatchMasterView(MasterView): Thread target for updating a batch from worksheet. """ session = self.make_isolated_session() - batch = session.query(self.model_class).get(batch_uuid) + batch = session.get(self.model_class, batch_uuid) try: self.handler.update_from_worksheet(batch, path, progress=progress) @@ -1020,7 +1019,7 @@ class BatchMasterView(MasterView): def catchup_versions(self, port, batch_uuid, username, *models): with short_session() as s: - batch = s.query(self.model_class).get(batch_uuid) + batch = s.get(self.model_class, batch_uuid) batch_id = batch.id_str description = str(batch) @@ -1047,8 +1046,8 @@ class BatchMasterView(MasterView): """ # mustn't use tailbone web session here session = RattailSession() - batch = session.query(self.model_class).get(batch_uuid) - user = session.query(model.User).get(user_uuid) + batch = session.get(self.model_class, batch_uuid) + user = session.get(model.User, user_uuid) try: self.handler.do_populate(batch, user, progress=progress) session.flush() @@ -1104,8 +1103,8 @@ class BatchMasterView(MasterView): # rattail session here; can't use tailbone because it has web request # transaction binding etc. session = RattailSession() - batch = session.query(self.model_class).get(batch_uuid) - cognizer = session.query(model.User).get(user_uuid) if user_uuid else None + batch = session.get(self.model_class, batch_uuid) + cognizer = session.get(model.User, user_uuid) if user_uuid else None try: self.refresh_data(session, batch, cognizer, progress=progress) session.flush() @@ -1158,7 +1157,7 @@ class BatchMasterView(MasterView): """ session = RattailSession() batches = batches.with_session(session).all() - user = session.query(model.User).get(user_uuid) + user = session.get(model.User, user_uuid) try: self.handler.refresh_many(batches, user=user, progress=progress) @@ -1298,7 +1297,7 @@ class BatchMasterView(MasterView): # transaction binding etc. session = RattailSession() batch = self.get_instance_for_key(key, session) - user = session.query(model.User).get(user_uuid) + user = session.get(model.User, user_uuid) try: result = self.handler.do_execute(batch, user=user, progress=progress, **kwargs) @@ -1373,7 +1372,7 @@ class BatchMasterView(MasterView): """ session = RattailSession() batches = batches.with_session(session).all() - user = session.query(model.User).get(user_uuid) + user = session.get(model.User, user_uuid) try: result = self.handler.execute_many(batches, user=user, progress=progress, **kwargs) diff --git a/tailbone/views/batch/importer.py b/tailbone/views/batch/importer.py index ef22a429..f0b76bf6 100644 --- a/tailbone/views/batch/importer.py +++ b/tailbone/views/batch/importer.py @@ -190,7 +190,7 @@ class ImporterBatchView(BatchMasterView): def get_parent(self, row): uuid = self.current_row_table.name - return self.Session.query(model.ImporterBatch).get(uuid) + return self.Session.get(model.ImporterBatch, uuid) def get_row_instance_title(self, row): if row.object_str: diff --git a/tailbone/views/batch/inventory.py b/tailbone/views/batch/inventory.py index 657d5758..e13dacca 100644 --- a/tailbone/views/batch/inventory.py +++ b/tailbone/views/batch/inventory.py @@ -214,7 +214,7 @@ class InventoryBatchView(BatchMasterView): return super(InventoryBatchView, self).save_edit_row_form(form) def delete_row(self): - row = self.Session.query(model.InventoryBatchRow).get(self.request.matchdict['row_uuid']) + row = self.Session.get(model.InventoryBatchRow, self.request.matchdict['row_uuid']) if not row: raise self.notfound() batch = row.batch @@ -235,7 +235,7 @@ class InventoryBatchView(BatchMasterView): if self.request.method == 'POST': if form.validate(newstyle=True): - product = self.Session.query(model.Product).get(form.validated['product']) + product = self.Session.get(model.Product, form.validated['product']) row = None if self.should_aggregate_products(batch): @@ -515,7 +515,7 @@ class InventoryBatchView(BatchMasterView): def valid_product(node, kw): session = kw['session'] def validate(node, value): - product = session.query(model.Product).get(value) + product = session.get(model.Product, value) if not product: raise colander.Invalid(node, "Product not found") return product.uuid diff --git a/tailbone/views/batch/vendorcatalog.py b/tailbone/views/batch/vendorcatalog.py index 0808eed5..01fa85ea 100644 --- a/tailbone/views/batch/vendorcatalog.py +++ b/tailbone/views/batch/vendorcatalog.py @@ -225,8 +225,8 @@ class VendorCatalogView(FileBatchMasterView): vendor_display = "" if self.request.method == 'POST': if self.request.POST.get('vendor_uuid'): - vendor = self.Session.query(model.Vendor).get( - self.request.POST['vendor_uuid']) + vendor = self.Session.get(model.Vendor, + self.request.POST['vendor_uuid']) if vendor: vendor_display = str(vendor) f.set_widget('vendor_uuid', diff --git a/tailbone/views/common.py b/tailbone/views/common.py index 89abb9a9..6de6bc2b 100644 --- a/tailbone/views/common.py +++ b/tailbone/views/common.py @@ -163,7 +163,7 @@ class CommonView(View): if form.validate(newstyle=True): data = dict(form.validated) if data['user']: - data['user'] = Session.query(model.User).get(data['user']) + data['user'] = Session.get(model.User, data['user']) data['user_url'] = self.request.route_url('users.view', uuid=data['user'].uuid) data['client_ip'] = self.request.client_addr app.send_email('user_feedback', data=data) diff --git a/tailbone/views/core.py b/tailbone/views/core.py index 55b35487..3920b93b 100644 --- a/tailbone/views/core.py +++ b/tailbone/views/core.py @@ -97,7 +97,7 @@ class View(object): if self.request.method == 'POST': uuid = self.request.POST.get('late-login-user') if uuid: - return Session.query(model.User).get(uuid) + return Session.get(model.User, uuid) def user_is_protected(self, user): """ diff --git a/tailbone/views/customers.py b/tailbone/views/customers.py index d4ab1a37..50b93d59 100644 --- a/tailbone/views/customers.py +++ b/tailbone/views/customers.py @@ -187,12 +187,12 @@ class CustomerView(MasterView): return instance # search by CustomerPerson.uuid - instance = self.Session.query(model.CustomerPerson).get(key) + instance = self.Session.get(model.CustomerPerson, key) if instance: return instance.customer # search by CustomerGroupAssignment.uuid - instance = self.Session.query(model.CustomerGroupAssignment).get(key) + instance = self.Session.get(model.CustomerGroupAssignment, key) if instance: return instance.customer @@ -438,7 +438,7 @@ class CustomerView(MasterView): def detach_person(self): customer = self.get_instance() - person = self.Session.query(model.Person).get(self.request.matchdict['person_uuid']) + person = self.Session.get(model.Person, self.request.matchdict['person_uuid']) if not person: return self.notfound() @@ -612,7 +612,7 @@ class PendingCustomerView(MasterView): redirect = self.redirect(self.get_action_url('view', pending)) uuid = self.request.POST['person_uuid'] - person = self.Session.query(model.Person).get(uuid) + person = self.Session.get(model.Person, uuid) if not person: self.request.session.flash("Person not found!", 'error') return redirect @@ -670,7 +670,7 @@ def customer_info(request): View which returns simple dictionary of info for a particular customer. """ uuid = request.params.get('uuid') - customer = Session.query(model.Customer).get(uuid) if uuid else None + customer = Session.get(model.Customer, uuid) if uuid else None if not customer: return {} return { diff --git a/tailbone/views/custorders/items.py b/tailbone/views/custorders/items.py index 8331c864..5dc61e4d 100644 --- a/tailbone/views/custorders/items.py +++ b/tailbone/views/custorders/items.py @@ -408,7 +408,7 @@ class CustomerOrderItemView(MasterView): uuids = self.request.POST['uuids'] if uuids: for uuid in uuids.split(','): - item = self.Session.query(model.CustomerOrderItem).get(uuid) + item = self.Session.get(model.CustomerOrderItem, uuid) if item: order_items.append(item) diff --git a/tailbone/views/custorders/orders.py b/tailbone/views/custorders/orders.py index 8bc53a67..563739ea 100644 --- a/tailbone/views/custorders/orders.py +++ b/tailbone/views/custorders/orders.py @@ -24,12 +24,9 @@ Customer Order Views """ -from __future__ import unicode_literals, absolute_import - import decimal import logging -import six from sqlalchemy import orm from rattail.db import model @@ -195,7 +192,7 @@ class CustomerOrderView(MasterView): person = order.person if not person: return "" - text = six.text_type(person) + text = str(person) url = self.request.route_url('people.view', uuid=person.uuid) return tags.link_to(text, url) @@ -203,7 +200,7 @@ class CustomerOrderView(MasterView): pending = batch.pending_customer if not pending: return - text = six.text_type(pending) + text = str(pending) url = self.request.route_url('pending_customers.view', uuid=pending.uuid) return tags.link_to(text, url, class_='has-background-warning') @@ -275,7 +272,7 @@ class CustomerOrderView(MasterView): def render_row_status_code(self, item, field): text = self.enum.CUSTORDER_ITEM_STATUS.get(item.status_code, - six.text_type(item.status_code)) + str(item.status_code)) if item.status_text: return HTML.tag('span', title=item.status_text, c=[text]) return text @@ -445,7 +442,7 @@ class CustomerOrderView(MasterView): if not uuid: return {'error': "Must specify a customer UUID"} - customer = self.Session.query(model.Customer).get(uuid) + customer = self.Session.get(model.Customer, uuid) if not customer: return {'error': "Customer not found"} @@ -472,14 +469,14 @@ class CustomerOrderView(MasterView): if self.batch_handler.new_order_requires_customer(): - customer = self.Session.query(model.Customer).get(uuid) + customer = self.Session.get(model.Customer, uuid) if not customer: return {'error': "Customer not found"} kwargs['customer'] = customer else: - person = self.Session.query(model.Person).get(uuid) + person = self.Session.get(model.Person, uuid) if not person: return {'error': "Person not found"} kwargs['person'] = person @@ -488,7 +485,7 @@ class CustomerOrderView(MasterView): try: self.batch_handler.assign_contact(batch, **kwargs) except ValueError as error: - return {'error': six.text_type(error)} + return {'error': str(error)} self.Session.flush() context = self.get_context_contact(batch) @@ -590,7 +587,7 @@ class CustomerOrderView(MasterView): self.batch_handler.update_pending_customer(batch, self.request.user, data) except Exception as error: - return {'error': six.text_type(error)} + return {'error': str(error)} self.Session.flush() context = self.get_context_contact(batch) @@ -619,7 +616,7 @@ class CustomerOrderView(MasterView): if not uuid: return {'error': "Must specify a product UUID"} - product = self.Session.query(model.Product).get(uuid) + product = self.Session.get(model.Product, uuid) if not product: return {'error': "Product not found"} @@ -635,7 +632,7 @@ class CustomerOrderView(MasterView): try: info = self.batch_handler.get_product_info(batch, product) except Exception as error: - return {'error': six.text_type(error)} + return {'error': str(error)} else: info['url'] = self.request.route_url('products.view', uuid=info['uuid']) app = self.get_rattail_app() @@ -661,7 +658,7 @@ class CustomerOrderView(MasterView): def normalize_batch(self, batch): return { 'uuid': batch.uuid, - 'total_price': six.text_type(batch.total_price or 0), + 'total_price': str(batch.total_price or 0), 'total_price_display': "${:0.2f}".format(batch.total_price or 0), 'status_code': batch.status_code, 'status_text': batch.status_text, @@ -690,7 +687,7 @@ class CustomerOrderView(MasterView): 'sequence': row.sequence, 'item_entry': row.item_entry, 'product_uuid': row.product_uuid, - 'product_upc': six.text_type(row.product_upc or ''), + 'product_upc': str(row.product_upc or ''), 'product_item_id': row.product_item_id, 'product_scancode': row.product_scancode, 'product_upc_pretty': row.product_upc.pretty() if row.product_upc else None, @@ -727,7 +724,7 @@ class CustomerOrderView(MasterView): data['unit_sale_price_display'] = app.render_currency(row.unit_sale_price) if row.sale_ends: sale_ends = app.localtime(row.sale_ends, from_utc=True).date() - data['sale_ends'] = six.text_type(sale_ends) + data['sale_ends'] = str(sale_ends) data['sale_ends_display'] = app.render_date(sale_ends) if row.unit_sale_price and row.unit_price == row.unit_sale_price: @@ -748,7 +745,7 @@ class CustomerOrderView(MasterView): pending = row.pending_product data['pending_product'] = { 'uuid': pending.uuid, - 'upc': six.text_type(pending.upc) if pending.upc is not None else None, + 'upc': str(pending.upc) if pending.upc is not None else None, 'item_id': pending.item_id, 'scancode': pending.scancode, 'brand_name': pending.brand_name, @@ -826,7 +823,7 @@ class CustomerOrderView(MasterView): if not uuid: return {'error': "Must specify a product UUID"} - product = self.Session.query(model.Product).get(uuid) + product = self.Session.get(model.Product, uuid) if not product: return {'error': "Product not found"} @@ -871,7 +868,7 @@ class CustomerOrderView(MasterView): if not uuid: return {'error': "Must specify a row UUID"} - row = self.Session.query(model.CustomerOrderBatchRow).get(uuid) + row = self.Session.get(model.CustomerOrderBatchRow, uuid) if not row: return {'error': "Row not found"} @@ -888,7 +885,7 @@ class CustomerOrderView(MasterView): if not uuid: return {'error': "Must specify a product UUID"} - product = self.Session.query(model.Product).get(uuid) + product = self.Session.get(model.Product, uuid) if not product: return {'error': "Product not found"} @@ -929,7 +926,7 @@ class CustomerOrderView(MasterView): if not uuid: return {'error': "Must specify a row UUID"} - row = self.Session.query(model.CustomerOrderBatchRow).get(uuid) + row = self.Session.get(model.CustomerOrderBatchRow, uuid) if not row: return {'error': "Row not found"} diff --git a/tailbone/views/employees.py b/tailbone/views/employees.py index 4f788532..37692996 100644 --- a/tailbone/views/employees.py +++ b/tailbone/views/employees.py @@ -249,7 +249,7 @@ class EmployeeView(MasterView): employee._stores.append(model.EmployeeStore(store_uuid=uuid)) for uuid in old_stores: if uuid not in new_stores: - store = self.Session.query(model.Store).get(uuid) + store = self.Session.get(model.Store, uuid) employee.stores.remove(store) def update_departments(self, employee, data): @@ -262,7 +262,7 @@ class EmployeeView(MasterView): employee._departments.append(model.EmployeeDepartment(department_uuid=uuid)) for uuid in old_depts: if uuid not in new_depts: - dept = self.Session.query(model.Department).get(uuid) + dept = self.Session.get(model.Department, uuid) employee.departments.remove(dept) def get_possible_stores(self): diff --git a/tailbone/views/master.py b/tailbone/views/master.py index 01a3405a..e9f35687 100644 --- a/tailbone/views/master.py +++ b/tailbone/views/master.py @@ -1024,7 +1024,7 @@ class MasterView(View): """ # mustn't use tailbone web session here session = RattailSession() - obj = session.query(self.model_class).get(uuid) + obj = session.get(self.model_class, uuid) try: self.populate_object(session, obj, progress=progress) except Exception as error: @@ -1727,7 +1727,7 @@ class MasterView(View): if uuids: uuids = uuids.split(',') # TODO: probably need to allow override of fetcher callable - fetcher = lambda uuid: self.Session.query(self.model_class).get(uuid) + fetcher = lambda uuid: self.Session.get(self.model_class, uuid) objects = [] for uuid in uuids: obj = fetcher(uuid) @@ -1856,7 +1856,7 @@ class MasterView(View): model_key = self.get_model_key(as_tuple=True) if len(model_key) == 1 and model_key[0] == 'uuid': uuid = key[0] - return session.query(self.model_class).get(uuid) + return session.get(self.model_class, uuid) raise NotImplementedError def execute_thread(self, key, user_uuid, progress=None, **kwargs): @@ -1865,7 +1865,7 @@ class MasterView(View): """ session = RattailSession() obj = self.get_instance_for_key(key, session) - user = session.query(model.User).get(user_uuid) + user = session.get(model.User, user_uuid) try: success_msg = self.execute_instance(obj, user, progress=progress, @@ -2021,8 +2021,8 @@ class MasterView(View): if self.request.method == 'POST': uuids = self.request.POST.get('uuids', '').split(',') if len(uuids) == 2: - object_to_remove = self.Session.query(self.get_model_class()).get(uuids[0]) - object_to_keep = self.Session.query(self.get_model_class()).get(uuids[1]) + object_to_remove = self.Session.get(self.get_model_class(), uuids[0]) + object_to_keep = self.Session.get(self.get_model_class(), uuids[1]) if object_to_remove and object_to_keep and self.request.POST.get('commit-merge') == 'yes': msg = str(object_to_remove) @@ -4447,7 +4447,7 @@ class MasterView(View): # TODO: is this right..? # key = self.request.matchdict[self.get_model_key()] key = self.request.matchdict['row_uuid'] - instance = self.Session.query(self.model_row_class).get(key) + instance = self.Session.get(self.model_row_class, key) if not instance: raise self.notfound() return instance diff --git a/tailbone/views/messages.py b/tailbone/views/messages.py index 10851913..6aaf342e 100644 --- a/tailbone/views/messages.py +++ b/tailbone/views/messages.py @@ -279,7 +279,7 @@ class MessageView(MasterView): message.sender = self.request.user for uuid in data['set_recipients']: - user = self.Session.query(model.User).get(uuid) + user = self.Session.get(model.User, uuid) if user: message.add_recipient(user, status=self.enum.MESSAGE_STATUS_INBOX) diff --git a/tailbone/views/people.py b/tailbone/views/people.py index bb43102e..9556f66d 100644 --- a/tailbone/views/people.py +++ b/tailbone/views/people.py @@ -171,10 +171,10 @@ class PersonView(MasterView): # TODO: I don't recall why this fallback check for a vendor contact # exists here, but leaving it intact for now. key = self.request.matchdict['uuid'] - instance = self.Session.query(model.Person).get(key) + instance = self.Session.get(model.Person, key) if instance: return instance - instance = self.Session.query(model.VendorContact).get(key) + instance = self.Session.get(model.VendorContact, key) if instance: return instance.person raise HTTPNotFound @@ -677,7 +677,7 @@ class PersonView(MasterView): person = self.get_instance() data = dict(self.request.json_body) - phone = self.Session.query(model.PersonPhoneNumber).get(data['phone_uuid']) + phone = self.Session.get(model.PersonPhoneNumber, data['phone_uuid']) if not phone: return {'error': "Phone not found."} @@ -708,7 +708,7 @@ class PersonView(MasterView): data = dict(self.request.json_body) # validate phone - phone = self.Session.query(model.PersonPhoneNumber).get(data['phone_uuid']) + phone = self.Session.get(model.PersonPhoneNumber, data['phone_uuid']) if not phone: return {'error': "Phone not found."} if phone not in person.phones: @@ -731,7 +731,7 @@ class PersonView(MasterView): data = dict(self.request.json_body) # validate phone - phone = self.Session.query(model.PersonPhoneNumber).get(data['phone_uuid']) + phone = self.Session.get(model.PersonPhoneNumber, data['phone_uuid']) if not phone: return {'error': "Phone not found."} if phone not in person.phones: @@ -792,7 +792,7 @@ class PersonView(MasterView): person = self.get_instance() data = dict(self.request.json_body) - email = self.Session.query(model.PersonEmailAddress).get(data['email_uuid']) + email = self.Session.get(model.PersonEmailAddress, data['email_uuid']) if not email: return {'error': "Email not found."} @@ -819,7 +819,7 @@ class PersonView(MasterView): data = dict(self.request.json_body) # validate email - email = self.Session.query(model.PersonEmailAddress).get(data['email_uuid']) + email = self.Session.get(model.PersonEmailAddress, data['email_uuid']) if not email: return {'error': "Email not found."} if email not in person.emails: @@ -843,7 +843,7 @@ class PersonView(MasterView): data = dict(self.request.json_body) # validate email - email = self.Session.query(model.PersonEmailAddress).get(data['email_uuid']) + email = self.Session.get(model.PersonEmailAddress, data['email_uuid']) if not email: return {'error': "Email not found."} if email not in person.emails: @@ -944,7 +944,7 @@ class PersonView(MasterView): employee = person.employee uuid = self.request.json_body['uuid'] - history = self.Session.query(model.EmployeeHistory).get(uuid) + history = self.Session.get(model.EmployeeHistory, uuid) if not history or history not in employee.history: return {'error': "Must specify a valid Employee History record for this Person."} @@ -1032,7 +1032,7 @@ class PersonView(MasterView): return self.profile_edit_note_failure(person, form) def update_note(self, person, form): - note = self.Session.query(model.PersonNote).get(form.validated['uuid']) + note = self.Session.get(model.PersonNote, form.validated['uuid']) note.subject = form.validated['note_subject'] note.text = form.validated['note_text'] return note @@ -1054,7 +1054,7 @@ class PersonView(MasterView): return self.profile_delete_note_failure(person, form) def delete_note(self, person, form): - note = self.Session.query(model.PersonNote).get(form.validated['uuid']) + note = self.Session.get(model.PersonNote, form.validated['uuid']) self.Session.delete(note) def profile_delete_note_success(self, person): @@ -1065,7 +1065,7 @@ class PersonView(MasterView): def make_user(self): uuid = self.request.POST['person_uuid'] - person = self.Session.query(model.Person).get(uuid) + person = self.Session.get(model.Person, uuid) if not person: return self.notfound() if person.users: @@ -1355,7 +1355,7 @@ def valid_note_uuid(node, kw): session = kw['session'] person_uuid = kw['person_uuid'] def validate(node, value): - note = session.query(model.PersonNote).get(value) + note = session.get(model.PersonNote, value) if not note: raise colander.Invalid(node, "Note not found") if note.person.uuid != person_uuid: @@ -1425,15 +1425,15 @@ class MergePeopleRequestView(MasterView): def render_referenced_person_name(self, merge_request, field): uuid = getattr(merge_request, field) - person = self.Session.query(self.model.Person).get(uuid) + person = self.Session.get(self.model.Person, uuid) if person: return str(person) return "(person not found)" def get_instance_title(self, merge_request): model = self.model - removing = self.Session.query(model.Person).get(merge_request.removing_uuid) - keeping = self.Session.query(model.Person).get(merge_request.keeping_uuid) + removing = self.Session.get(model.Person, merge_request.removing_uuid) + keeping = self.Session.get(model.Person, merge_request.keeping_uuid) return "{} -> {}".format( removing or "(not found)", keeping or "(not found)") @@ -1446,7 +1446,7 @@ class MergePeopleRequestView(MasterView): def render_referenced_person(self, merge_request, field): uuid = getattr(merge_request, field) - person = self.Session.query(self.model.Person).get(uuid) + person = self.Session.get(self.model.Person, uuid) if person: text = str(person) url = self.request.route_url('people.view', uuid=person.uuid) diff --git a/tailbone/views/products.py b/tailbone/views/products.py index f6deabf4..bace8421 100644 --- a/tailbone/views/products.py +++ b/tailbone/views/products.py @@ -808,10 +808,10 @@ class ProductView(MasterView): def get_instance(self): key = self.request.matchdict['uuid'] - product = self.Session.query(model.Product).get(key) + product = self.Session.get(model.Product, key) if product: return product - price = self.Session.query(model.ProductPrice).get(key) + price = self.Session.get(model.ProductPrice, key) if price: return price.product raise self.notfound() @@ -956,7 +956,7 @@ class ProductView(MasterView): brand_display = "" if self.request.method == 'POST': if self.request.POST.get('brand_uuid'): - brand = self.Session.query(model.Brand).get(self.request.POST['brand_uuid']) + brand = self.Session.get(model.Brand, self.request.POST['brand_uuid']) if brand: brand_display = str(brand) elif self.editing: @@ -1751,12 +1751,12 @@ class ProductView(MasterView): model = self.model profile = self.request.params.get('profile') - profile = self.Session.query(model.LabelProfile).get(profile) if profile else None + profile = self.Session.get(model.LabelProfile, profile) if profile else None if not profile: return {'error': "Label profile not found"} product = self.request.params.get('product') - product = self.Session.query(model.Product).get(product) if product else None + product = self.Session.get(model.Product, product) if product else None if not product: return {'error': "Product not found"} @@ -1901,7 +1901,7 @@ class ProductView(MasterView): } uuid = self.request.GET.get('with_vendor_cost') if uuid: - vendor = self.Session.query(model.Vendor).get(uuid) + vendor = self.Session.get(model.Vendor, uuid) if not vendor: return {'error': "Vendor not found"} cost = product.cost_for_vendor(vendor) @@ -2068,7 +2068,7 @@ class ProductView(MasterView): Threat target for making a batch from current products query. """ session = RattailSession() - user = session.query(model.User).get(user_uuid) + user = session.get(model.User, user_uuid) assert user params['created_by'] = user try: @@ -2288,7 +2288,7 @@ class PendingProductView(MasterView): brand_display = "" if self.request.method == 'POST': if self.request.POST.get('brand_uuid'): - brand = self.Session.query(model.Brand).get(self.request.POST['brand_uuid']) + brand = self.Session.get(model.Brand, self.request.POST['brand_uuid']) if brand: brand_display = str(brand) elif self.editing: @@ -2315,7 +2315,7 @@ class PendingProductView(MasterView): vendor_display = "" if self.request.method == 'POST': if self.request.POST.get('vendor_uuid'): - vendor = self.Session.query(model.Vendor).get(self.request.POST['vendor_uuid']) + vendor = self.Session.get(model.Vendor, self.request.POST['vendor_uuid']) if vendor: vendor_display = str(vendor) f.set_widget('vendor_uuid', forms.widgets.JQueryAutocompleteWidget( @@ -2414,7 +2414,7 @@ class PendingProductView(MasterView): redirect = self.redirect(self.get_action_url('view', pending)) uuid = self.request.POST['product_uuid'] - product = self.Session.query(model.Product).get(uuid) + product = self.Session.get(model.Product, uuid) if not product: self.request.session.flash("Product not found!", 'error') return redirect diff --git a/tailbone/views/purchases/credits.py b/tailbone/views/purchases/credits.py index c3dffc57..ad1079a6 100644 --- a/tailbone/views/purchases/credits.py +++ b/tailbone/views/purchases/credits.py @@ -150,7 +150,7 @@ class PurchaseCreditView(MasterView): for uuid in self.request.POST.get('uuids', '').split(','): uuid = uuid.strip() if uuid: - credit = self.Session.query(model.PurchaseCredit).get(uuid) + credit = self.Session.get(model.PurchaseCredit, uuid) if credit: credits_.append(credit) if not credits_: diff --git a/tailbone/views/purchasing/batch.py b/tailbone/views/purchasing/batch.py index 8cc14ef4..fdbfe38c 100644 --- a/tailbone/views/purchasing/batch.py +++ b/tailbone/views/purchasing/batch.py @@ -271,7 +271,7 @@ class PurchasingBatchView(BatchMasterView): vendor_display = "" if self.request.method == 'POST': if self.request.POST.get('vendor_uuid'): - vendor = self.Session.query(model.Vendor).get(self.request.POST['vendor_uuid']) + vendor = self.Session.get(model.Vendor, self.request.POST['vendor_uuid']) if vendor: vendor_display = str(vendor) vendors_url = self.request.route_url('vendors.autocomplete') @@ -304,7 +304,7 @@ class PurchasingBatchView(BatchMasterView): buyer_display = "" if self.request.method == 'POST': if self.request.POST.get('buyer_uuid'): - buyer = self.Session.query(model.Employee).get(self.request.POST['buyer_uuid']) + buyer = self.Session.get(model.Employee, self.request.POST['buyer_uuid']) if buyer: buyer_display = str(buyer) elif self.creating: @@ -331,8 +331,8 @@ class PurchasingBatchView(BatchMasterView): kwargs = {} if 'vendor_uuid' in self.request.matchdict: - vendor = self.Session.query(model.Vendor).get( - self.request.matchdict['vendor_uuid']) + vendor = self.Session.get(model.Vendor, + self.request.matchdict['vendor_uuid']) if vendor: kwargs['vendor'] = vendor @@ -397,7 +397,7 @@ class PurchasingBatchView(BatchMasterView): def valid_vendor_uuid(self, node, value): model = self.model - vendor = self.Session.query(model.Vendor).get(value) + vendor = self.Session.get(model.Vendor, value) if not vendor: raise colander.Invalid(node, "Invalid vendor selection") @@ -495,7 +495,7 @@ class PurchasingBatchView(BatchMasterView): def eligible_purchases(self, vendor_uuid=None, mode=None): if not vendor_uuid: vendor_uuid = self.request.GET.get('vendor_uuid') - vendor = self.Session.query(model.Vendor).get(vendor_uuid) if vendor_uuid else None + vendor = self.Session.get(model.Vendor, vendor_uuid) if vendor_uuid else None if not vendor: return {'error': "Must specify a vendor."} @@ -572,7 +572,7 @@ class PurchasingBatchView(BatchMasterView): self.enum.PURCHASE_BATCH_MODE_COSTING): purchase = batch.purchase if not purchase and batch.purchase_uuid: - purchase = self.Session.query(model.Purchase).get(batch.purchase_uuid) + purchase = self.Session.get(model.Purchase, batch.purchase_uuid) assert purchase if purchase: kwargs['purchase'] = purchase diff --git a/tailbone/views/purchasing/costing.py b/tailbone/views/purchasing/costing.py index 45391fe0..d5c86908 100644 --- a/tailbone/views/purchasing/costing.py +++ b/tailbone/views/purchasing/costing.py @@ -207,7 +207,7 @@ class CostingBatchView(PurchasingBatchView): vendor_display = "" if self.request.method == 'POST': if self.request.POST.get('vendor'): - vendor = self.Session.query(model.Vendor).get(self.request.POST['vendor']) + vendor = self.Session.get(model.Vendor, self.request.POST['vendor']) if vendor: vendor_display = str(vendor) vendors_url = self.request.route_url('vendors.autocomplete') @@ -258,8 +258,8 @@ class CostingBatchView(PurchasingBatchView): if self.creating and workflow: # display vendor but do not allow changing - vendor = self.Session.query(model.Vendor).get( - self.request.matchdict['vendor_uuid']) + vendor = self.Session.get(model.Vendor, + self.request.matchdict['vendor_uuid']) assert vendor f.set_hidden('vendor_uuid') diff --git a/tailbone/views/purchasing/ordering.py b/tailbone/views/purchasing/ordering.py index a407d6ae..b0b00402 100644 --- a/tailbone/views/purchasing/ordering.py +++ b/tailbone/views/purchasing/ordering.py @@ -241,7 +241,7 @@ class OrderingBatchView(PurchasingBatchView): assert not (batch.executed or batch.complete) uuid = data.get('row_uuid') - row = self.Session.query(self.model_row_class).get(uuid) if uuid else None + row = self.Session.get(self.model_row_class, uuid) if uuid else None if not row: return {'error': "Row not found"} if row.batch is not batch or row.removed: @@ -401,7 +401,7 @@ class OrderingBatchView(PurchasingBatchView): return {'error': "Invalid value for units ordered: {}".format(units_ordered)} uuid = data.get('product_uuid') - product = self.Session.query(model.Product).get(uuid) if uuid else None + product = self.Session.get(model.Product, uuid) if uuid else None if not product: return {'error': "Product not found"} diff --git a/tailbone/views/purchasing/receiving.py b/tailbone/views/purchasing/receiving.py index 4efe494c..b180a9a7 100644 --- a/tailbone/views/purchasing/receiving.py +++ b/tailbone/views/purchasing/receiving.py @@ -280,7 +280,7 @@ class ReceivingBatchView(PurchasingBatchView): # someone e.g. navigates to a URL by accident etc. we want # to gracefully handle and redirect uuid = self.request.matchdict['vendor_uuid'] - vendor = self.Session.query(model.Vendor).get(uuid) + vendor = self.Session.get(model.Vendor, uuid) if not vendor: self.request.session.flash("Invalid vendor selection. " "Please choose an existing vendor.", @@ -337,7 +337,7 @@ class ReceivingBatchView(PurchasingBatchView): vendor_display = "" if self.request.method == 'POST': if self.request.POST.get('vendor'): - vendor = self.Session.query(model.Vendor).get(self.request.POST['vendor']) + vendor = self.Session.get(model.Vendor, self.request.POST['vendor']) if vendor: vendor_display = str(vendor) vendors_url = self.request.route_url('vendors.autocomplete') @@ -417,8 +417,8 @@ class ReceivingBatchView(PurchasingBatchView): if self.creating and workflow: # display vendor but do not allow changing - vendor = self.Session.query(model.Vendor).get( - self.request.matchdict['vendor_uuid']) + vendor = self.Session.get(model.Vendor, + self.request.matchdict['vendor_uuid']) assert vendor f.set_readonly('vendor_uuid') f.set_default('vendor_uuid', str(vendor)) @@ -944,7 +944,7 @@ class ReceivingBatchView(PurchasingBatchView): def validate_purchase(node, kw): session = kw['session'] def validate(node, value): - purchase = session.query(model.Purchase).get(value) + purchase = session.get(model.Purchase, value) if not purchase: raise colander.Invalid(node, "Purchase not found") return purchase.uuid @@ -1439,7 +1439,7 @@ class ReceivingBatchView(PurchasingBatchView): credit = None uuid = data.get('uuid') if uuid: - credit = self.Session.query(model.PurchaseBatchCredit).get(uuid) + credit = self.Session.get(model.PurchaseBatchCredit, uuid) if not credit: return {'error': "Credit not found"} @@ -1479,7 +1479,7 @@ class ReceivingBatchView(PurchasingBatchView): batch = self.get_instance() row_uuid = self.request.params.get('row_uuid') - row = self.Session.query(model.PurchaseBatchRow).get(row_uuid) if row_uuid else None + row = self.Session.get(model.PurchaseBatchRow, row_uuid) if row_uuid else None if row and row.batch is batch and not row.removed: pass # we're good else: @@ -1841,7 +1841,7 @@ class ReceivingBatchView(PurchasingBatchView): # validate row uuid = data.get('row_uuid') - row = self.Session.query(model.PurchaseBatchRow).get(uuid) if uuid else None + row = self.Session.get(model.PurchaseBatchRow, uuid) if uuid else None if not row or row.batch is not batch: return {'error': "Row not found"} @@ -1910,7 +1910,7 @@ class ReceivingBatchView(PurchasingBatchView): Thread target for receiving all items on the given batch. """ session = RattailSession() - batch = session.query(model.PurchaseBatch).get(uuid) + batch = session.get(model.PurchaseBatch, uuid) # user = session.query(model.User).get(user_uuid) try: self.handler.auto_receive_all_items(batch, progress=progress) diff --git a/tailbone/views/reports.py b/tailbone/views/reports.py index a96ac52e..d3345b75 100644 --- a/tailbone/views/reports.py +++ b/tailbone/views/reports.py @@ -81,13 +81,13 @@ class OrderingWorksheet(View): def __call__(self): if self.request.params.get('vendor'): - vendor = Session.query(model.Vendor).get(self.request.params['vendor']) + vendor = Session.get(model.Vendor, self.request.params['vendor']) if vendor: departments = [] uuids = self.request.params.get('departments') if uuids: for uuid in uuids.split(','): - dept = Session.query(model.Department).get(uuid) + dept = Session.get(model.Department, uuid) if dept: departments.append(dept) preferred_only = self.request.params.get('preferred_only') == '1' @@ -495,7 +495,7 @@ class ReportOutputView(ExportMasterView): object. """ session = RattailSession() - user = session.query(model.User).get(user_uuid) + user = session.get(model.User, user_uuid) try: output = self.report_handler.generate_output(session, report, params, user, progress=progress) diff --git a/tailbone/views/settings.py b/tailbone/views/settings.py index 3d05f0a9..5677f579 100644 --- a/tailbone/views/settings.py +++ b/tailbone/views/settings.py @@ -218,7 +218,7 @@ class SettingView(MasterView): f.set_validator('name', self.unique_name) def unique_name(self, node, value): - setting = self.Session.query(model.Setting).get(value) + setting = self.Session.get(model.Setting, value) if setting: raise colander.Invalid(node, "Setting name must be unique") diff --git a/tailbone/views/shifts/lib.py b/tailbone/views/shifts/lib.py index 73d9603a..8cb75f33 100644 --- a/tailbone/views/shifts/lib.py +++ b/tailbone/views/shifts/lib.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2018 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,11 +24,8 @@ Base views for time sheets """ -from __future__ import unicode_literals, absolute_import - import datetime -import six import sqlalchemy as sa from rattail import enum @@ -105,10 +102,10 @@ class TimeSheetView(View): if store_key in self.request.session or department_key in self.request.session: store_uuid = self.request.session.get(store_key) if store_uuid: - store = Session.query(model.Store).get(store_uuid) if store_uuid else None + store = Session.get(model.Store, store_uuid) if store_uuid else None department_uuid = self.request.session.get(department_key) if department_uuid: - department = Session.query(model.Department).get(department_uuid) + department = Session.get(model.Department, department_uuid) else: # no store/department in session if self.default_filter_store: store = self.rattail_config.get('rattail', 'store') @@ -151,7 +148,7 @@ class TimeSheetView(View): employee_key = 'timesheet.{}.employee'.format(self.key) if employee_key in self.request.session: employee_uuid = self.request.session[employee_key] - employee = Session.query(model.Employee).get(employee_uuid) if employee_uuid else None + employee = Session.get(model.Employee, employee_uuid) if employee_uuid else None if not employee: employee = self.request.user.employee @@ -238,7 +235,7 @@ class TimeSheetView(View): form = forms.Form(schema=EmployeeShiftFilter(), request=self.request) if self.request.has_perm('{}.viewall'.format(permission_prefix)): - employee_display = six.text_type(context['employee'] or '') + employee_display = str(context['employee'] or '') employees_url = self.request.route_url('employees.autocomplete') form.set_widget('employee', forms.widgets.JQueryAutocompleteWidget( field_display=employee_display, service_url=employees_url)) @@ -470,7 +467,7 @@ class TimeSheetView(View): if hours_style == 'pretty': display = pretty_hours(hours) else: # decimal - display = six.text_type(hours_as_decimal(hours)) + display = str(hours_as_decimal(hours)) if empday['hours_incomplete']: display = '{} ?'.format(display) empday['{}_hours_display'.format(shift_type)] = display @@ -481,7 +478,7 @@ class TimeSheetView(View): if hours_style == 'pretty': display = pretty_hours(hours) else: # decimal - display = six.text_type(hours_as_decimal(hours)) + display = str(hours_as_decimal(hours)) if hours_incomplete: display = '{} ?'.format(display) setattr(employee, '{}_hours_display'.format(shift_type), display) diff --git a/tailbone/views/shifts/schedule.py b/tailbone/views/shifts/schedule.py index 7a1ccbe5..c8b82724 100644 --- a/tailbone/views/shifts/schedule.py +++ b/tailbone/views/shifts/schedule.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2022 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,8 +24,6 @@ Views for employee schedules """ -from __future__ import unicode_literals, absolute_import - import datetime from rattail.db import model @@ -81,7 +79,7 @@ class ScheduleView(TimeSheetView): deleted = [] for uuid, value in data['delete'].items(): if value == 'delete': - shift = Session.query(model.ScheduledShift).get(uuid) + shift = Session.get(model.ScheduledShift, uuid) if shift: Session.delete(shift) deleted.append(uuid) @@ -103,7 +101,7 @@ class ScheduleView(TimeSheetView): Session.add(shift) created[uuid] = shift else: - shift = Session.query(model.ScheduledShift).get(uuid) + shift = Session.get(model.ScheduledShift, uuid) assert shift updated[uuid] = shift start_time = datetime.datetime.strptime(data['start_time'][uuid], time_format) diff --git a/tailbone/views/shifts/timesheet.py b/tailbone/views/shifts/timesheet.py index 9898cd04..a8874127 100644 --- a/tailbone/views/shifts/timesheet.py +++ b/tailbone/views/shifts/timesheet.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2022 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,8 +24,6 @@ Views for employee time sheets """ -from __future__ import unicode_literals, absolute_import - import datetime from rattail.db import model @@ -74,7 +72,7 @@ class TimeSheetView(BaseTimeSheetView): deleted = [] for uuid, value in list(data['delete'].items()): assert value == 'delete' - shift = Session.query(model.WorkedShift).get(uuid) + shift = Session.get(model.WorkedShift, uuid) assert shift Session.delete(shift) deleted.append(uuid) @@ -93,7 +91,7 @@ class TimeSheetView(BaseTimeSheetView): Session.add(shift) created[uuid] = shift else: - shift = Session.query(model.WorkedShift).get(uuid) + shift = Session.get(model.WorkedShift, uuid) assert shift updated[uuid] = shift diff --git a/tailbone/views/tempmon/dashboard.py b/tailbone/views/tempmon/dashboard.py index 1cf40617..f4d6ed16 100644 --- a/tailbone/views/tempmon/dashboard.py +++ b/tailbone/views/tempmon/dashboard.py @@ -45,7 +45,7 @@ class TempmonDashboardView(View): appliance = None uuid = self.request.POST.get('appliance_uuid') if uuid: - appliance = TempmonSession.query(tempmon.Appliance).get(uuid) + appliance = TempmonSession.get(tempmon.Appliance, uuid) if appliance: self.request.session[self.session_key] = appliance.uuid if not appliance: @@ -91,7 +91,7 @@ class TempmonDashboardView(View): uuid = self.request.params.get('appliance_uuid') if not uuid: return {'error': "Must specify valid appliance_uuid"} - appliance = TempmonSession.query(tempmon.Appliance).get(uuid) + appliance = TempmonSession.get(tempmon.Appliance, uuid) if not appliance: return {'error': "Must specify valid appliance_uuid"} diff --git a/tailbone/views/users.py b/tailbone/views/users.py index 31842d0b..4f3a0070 100644 --- a/tailbone/views/users.py +++ b/tailbone/views/users.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2022 Lance Edgar +# Copyright © 2010-2023 Lance Edgar # # This file is part of Rattail. # @@ -24,9 +24,6 @@ User Views """ -from __future__ import unicode_literals, absolute_import - -import six import sqlalchemy as sa from sqlalchemy import orm @@ -168,7 +165,7 @@ class UserView(PrincipalMasterView): """ if value: model = self.model - person = self.Session.query(model.Person).get(value) + person = self.Session.get(model.Person, value) if not person: raise colander.Invalid(node, "Person not found (you must *select* a record)") @@ -189,11 +186,11 @@ class UserView(PrincipalMasterView): person_display = "" if self.request.method == 'POST': if self.request.POST.get('person_uuid'): - person = self.Session.query(model.Person).get(self.request.POST['person_uuid']) + person = self.Session.get(model.Person, self.request.POST['person_uuid']) if person: - person_display = six.text_type(person) + person_display = str(person) elif self.editing: - person_display = six.text_type(user.person or '') + person_display = str(user.person or '') people_url = self.request.route_url('people.autocomplete') f.set_widget('person_uuid', forms.widgets.JQueryAutocompleteWidget( field_display=person_display, service_url=people_url)) @@ -224,7 +221,7 @@ class UserView(PrincipalMasterView): f.remove_field('roles') else: roles = self.get_possible_roles().all() - role_values = [(s.uuid, six.text_type(s)) for s in roles] + role_values = [(s.uuid, str(s)) for s in roles] f.set_node('roles', colander.Set()) size = len(roles) if size < 3: @@ -358,7 +355,7 @@ class UserView(PrincipalMasterView): for uuid in old_roles: if uuid not in new_roles: if self.request.is_root or uuid != admin.uuid: - role = self.Session.query(model.Role).get(uuid) + role = self.Session.get(model.Role, uuid) user.roles.remove(role) # also record a change to the role, for datasync. @@ -373,7 +370,7 @@ class UserView(PrincipalMasterView): person = user.person if not person: return "" - text = six.text_type(person) + text = str(person) url = self.request.route_url('people.view', uuid=person.uuid) return tags.link_to(person, url) @@ -383,7 +380,7 @@ class UserView(PrincipalMasterView): name = getattr(user, field[:-1], None) if not name: return "" - return six.text_type(name) + return str(name) def render_roles(self, user, field): roles = sorted(user.roles, key=lambda r: r.name)