smartgrid error with Python 3.6.8 when working on Python 2.7.16

23 views
Skip to first unread message

David Manns

unread,
Mar 9, 2020, 10:00:58 AM3/9/20
to web2py-users
I am working on making my app compatible with both Python 2 and 3 (I want to continue running on Python 2.7 until I am sure it is stable, so that I can revert to Python 2 if obscure errors occur after switching to Python 3)

    grid = SQLFORM.smartgrid(db.Events, linked_tables=['Reservations'],
            constraints=dict(Reservations=resconstraint),
            left=dict(Reservations=[db.Members.on(db.Members.id == db.Reservations.Member)]),
            orderby=dict(Events=~db.Events.Date,
                        Reservations=resorder),
            headers=dict(Reservations={'Members.Membership':'Status'}),
            fields=dict(Events=[db.Events.Date, db.Events.Event, db.Events.Venue, db.Events.Speaker,
                                db.Events.Revenue, db.Events.Waitlist, db.Events.Attendees],
                        Reservations=[db.Reservations.Member, db.Members.Membership, db.Members.Paiddate,
                                db.Reservations.Affiliation, db.Reservations.Notes, db.Reservations.Waitlisted,
                                db.Reservations.Confirmed, db.Reservations.Totalcost, db.Reservations.Tbc]),
            links=dict(Events=event_links,
                        Reservations=[dict(header='', body=lambda r: A('Email', _href=URL('composemail', vars=dict(resvid=r.Reservations.id, eventid=request.args[2], next=back)))),
                                    dict(header='', body=lambda r: A('Member', _href=URL('members', args=['Members', 'edit', 'Members', r.Reservations.Member]))),
                                    dict(header='', body=lambda r: A('Expand', _href=URL('reservations', args=[r.Reservations.Member, request.args[2]], vars=dict(back=back)))),
                                    dict(header='', body=lambda r: A('Payment', _href=URL('respayment', args=[r.Reservations.id], vars=dict(back=back))))
                                    ]),
            deletable=dict(Events=False, Reservations=False),
            details=False,
            editable=dict(Events=write, Reservations=False),
            create=dict(Events=write, Reservations=False),
            onvalidation=dict(Events=checktickets),
            searchable=dict(Events=True, Reservations=False),
            advanced_search=False, sortable=False,
            csv = dict(Events=True, Reservations=False),
            exportclasses=dict(Events=dict(csv_with_hidden_cols=(Exporter_Generic, 'CSV file',
                T("Export selected events to Excel")),
                csv=False, xml=False, html=False, json=False, tsv_with_hidden_cols=False, tsv=False)),
            paginate=250 if len(request.args)==3 and request.args[2].isdigit() else 20,
            maxtextlength=150, user_signature = False, represent_none = '')

Displaying the reservations associated with an event works fine on Python 2.7.

On Python 3.6, it fails (see ticket attached). The references to db.Reservations.id fail when building links. The workaround is to include db.Reservations.id in the fields list and explicitly set db.Reservations.id.readable=False.



ticket.pdf
Reply all
Reply to author
Forward
0 new messages