mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
...
This commit is contained in:
parent
fc132d6fcc
commit
3ec16fe758
@ -85,6 +85,15 @@ class SelectControl(RadioControl):
|
|||||||
|
|
||||||
class Form(object):
|
class Form(object):
|
||||||
|
|
||||||
|
'''
|
||||||
|
Provides dictionary like access to all the controls in a form.
|
||||||
|
For example::
|
||||||
|
form['username'] = 'some name'
|
||||||
|
form['password'] = 'password'
|
||||||
|
|
||||||
|
See also the :attr:`controls` property and the :meth:`submit_control` method.
|
||||||
|
'''
|
||||||
|
|
||||||
def __init__(self, qwe):
|
def __init__(self, qwe):
|
||||||
self.qwe = qwe
|
self.qwe = qwe
|
||||||
self.attributes = {unicode(x):unicode(qwe.attribute(x)) for x in
|
self.attributes = {unicode(x):unicode(qwe.attribute(x)) for x in
|
||||||
@ -97,6 +106,16 @@ class Form(object):
|
|||||||
selects = list(map(SelectControl, qwe.findAll('select')))
|
selects = list(map(SelectControl, qwe.findAll('select')))
|
||||||
self.select_controls = {x.name:x for x in selects}
|
self.select_controls = {x.name:x for x in selects}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def controls(self):
|
||||||
|
for x in self.input_controls:
|
||||||
|
if x.name:
|
||||||
|
yield x.name
|
||||||
|
for x in (self.radio_controls, self.select_controls):
|
||||||
|
for n in x.iterkeys():
|
||||||
|
if n:
|
||||||
|
yield n
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
for x in self.input_controls:
|
for x in self.input_controls:
|
||||||
if key == x.name:
|
if key == x.name:
|
||||||
@ -108,6 +127,21 @@ class Form(object):
|
|||||||
continue
|
continue
|
||||||
raise KeyError('No control with the name %s in this form'%key)
|
raise KeyError('No control with the name %s in this form'%key)
|
||||||
|
|
||||||
|
def __setitem__(self, key, val):
|
||||||
|
control = None
|
||||||
|
for x in self.input_controls:
|
||||||
|
if key == x.name:
|
||||||
|
control = x
|
||||||
|
break
|
||||||
|
if control is None:
|
||||||
|
for x in (self.radio_controls, self.select_controls):
|
||||||
|
control = x.get(key, None)
|
||||||
|
if control is not None:
|
||||||
|
break
|
||||||
|
if control is None:
|
||||||
|
raise KeyError('No control with the name %s in this form'%key)
|
||||||
|
control.value = val
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
attrs = ['%s=%s'%(k, v) for k, v in self.attributes.iteritems()]
|
attrs = ['%s=%s'%(k, v) for k, v in self.attributes.iteritems()]
|
||||||
return '<form %s>'%(' '.join(attrs))
|
return '<form %s>'%(' '.join(attrs))
|
||||||
|
@ -106,7 +106,7 @@ class Test(unittest.TestCase):
|
|||||||
}
|
}
|
||||||
f = self.browser.select_form('#controls_test')
|
f = self.browser.select_form('#controls_test')
|
||||||
for k, vals in values.iteritems():
|
for k, vals in values.iteritems():
|
||||||
f[k].value = vals[0]
|
f[k] = vals[0]
|
||||||
self.browser.submit()
|
self.browser.submit()
|
||||||
dat = self.server.form_data
|
dat = self.server.form_data
|
||||||
for k, vals in values.iteritems():
|
for k, vals in values.iteritems():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user