Question

I will dive straight into the code of the application I'm developing using Google App Engine in Python:

import os
import webapp2
import jinja2
from google.appengine.ext import db

template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True)

class Handler(webapp2.RequestHandler):
    def write(self, *a, **kw):
        self.response.out.write(*a, **kw)
    def render_str(self, template, **params):
        t = jinja_env.get_template(template)
        return t.render(params)
    def render(self, template, **kw):
        self.write(self.render_str(template, **kw))

class Users(db.Model):
    name = db.StringProperty(required = True)
    password = db.StringProperty(required = True)
    email = db.EmailProperty(required = True)
    address = db.PostalAddressProperty(required = True)
    join_date = db.DateTimeProperty(auto_now_add = True)
    dob = db.DateTimeProperty()
    phone = db.PhoneNumberProperty()    

class Orders(db.Model):
    name = db.StringProperty(required = True)
    email = db.EmailProperty(required = True)
    address = db.PostalAddressProperty(required = True)

class MainPage(Handler):
    def get(self):
        self.render("home.html")

class Register(Handler):
    def get(self):
        self.render("signup-form.html")
    def post(self):
        name = self.request.get("username")
        password = self.request.get("password")
        verify = self.request.get("verify")
        email = self.request.get("email")
        address = self.request.get("address")
        phone = self.request.get("phone")

        a = Users(name = name, password = password, email = email, address = address, phone = phone)
        a.put()
        self.response.write("Registration successful!")

class MP(Handler):
    def get(self):
        self.render("mp.html")
    def post(self):
        self.render("order2.html")

class Order2Login(Handler, Register):
    def get(self):
        self.render("orderlogin.html")
    def post(self):
        old_usr = self.request.get("loginname")
        old_pwd = self.request.get("loginpwd")
        ans = a.filter("name =", old_usr).filter("password =", old_pwd)
        if ans:
            self.response.write("You are a registered member!")
        else:
            self.response.write("You are NOT registered.")

class Order2New(Handler):
    def get(self):
        self.response.write("New user yeah")        

app = webapp2.WSGIApplication([('/', MainPage),
                                ('/register', Register),
                                ('/mp', MP),
                                ('/order2new', Order2New),
                                ('/order2login', Order2Login)], debug=True)

Now, in the Order2Login class, I needed to access the database object 'a' so that I can confirm whether a user is already a member of my website. Now, for that, I inherited the Register class in my Order2Login class, since the 'a' object was initially created in the Register class.

However, after running my application on my local machine, I get the following error:

TypeError: Error when calling the metaclass bases

    Cannot create a consistent method resolution

order (MRO) for bases Handler, Register

What seems to be the problem in my code?

Was it helpful?

Solution

Inheriting like that doesn't make any sense at all. Even apart from the metaclass problem, inheriting wouldn't make that variable available anyway, since it's a local variable. And in any case, these are two completely separate requests, so data does not persist between them.

But I have no idea why you think you need access to that variable in any case. The User object was persisted to the datastore: in the login view, you don't want to query a, which is a single instance and doesn't have a filter method anyway, you want to query the User class.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top