Can I use my function like decorator?

36 views
Skip to first unread message

Константин Комков

unread,
May 22, 2019, 9:05:49 AM5/22/19
to web2py-users
Can I use my function like decorator? How take access for pages?
def emailConfirmed():
    if session.abit_email is None:
        redirect(URL('default','index'))
    else:
        confirmed = db_xml((db_xml.abit_validation_codes.A_EMAIL==session.abit_email) & (db_xml.abit_validation_codes.CONFIRMED==1)).select().first()
        if confirmed is None:
            redirect(URL('default','index'))
        else:
            #Here I want to take access for pages (but don't know how)

@emailConfirmed()
def swed():
    #code

@emailConfirmed()
def docs():
    #code


Leonel Câmara

unread,
May 22, 2019, 9:20:30 AM5/22/19
to web2py-users
Note that decorators need a function as an argument and should return another function, given that knowledge you just need to change your function a bit

def emailConfirmed(fun):
   
def decorated():

       
if session.abit_email is None:
            redirect
(URL('default','index'))
       
else:
            confirmed
= db_xml((db_xml.abit_validation_codes.A_EMAIL==session.abit_email) & (db_xml.abit_validation_codes.CONFIRMED==1)).select().first()
           
if confirmed is None:
                redirect
(URL('default','index'))
           
else:

               
return fun()
   
return decorated



Константин Комков

unread,
May 23, 2019, 2:43:19 AM5/23/19
to web2py-users
Thank you. What is argument (fun)? Is it my functions swed() and docs()? If I do like that I have error that emailConfirmed() takes exactly 1 argument (0 given):
def emailConfirmed(fun):
   
def decorated():

       
if session.abit_email is None:
            redirect
(URL('default','index'))
       
else:
            confirmed
= db_xml((db_xml.abit_validation_codes.A_EMAIL==session.abit_email) & (db_xml.abit_validation_codes.CONFIRMED==1)).select().first()
           
if confirmed is None:
                redirect
(URL('default','index'))
           
else:
                return fun()
   
return decorated

@emailConfirmed()
def swed():
    #code


Leonel Câmara

unread,
May 23, 2019, 6:23:14 AM5/23/19
to web2py-users
You should decorate like this

@emailConfirmed

not like this

@emailConfirmed()

fun is the function it is decorating, so yes it's your swed and docs functions
Reply all
Reply to author
Forward
0 new messages