Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
itminedu
snf-image-creator
Commits
baa62724
Commit
baa62724
authored
Mar 18, 2013
by
Nikos Skalkotos
Browse files
Display gathered info in wizard's confirmation box
parent
37d581b8
Changes
1
Hide whitespace changes
Inline
Side-by-side
image_creator/dialog_wizard.py
View file @
baa62724
...
...
@@ -58,6 +58,7 @@ class Wizard:
self
.
session
=
session
self
.
pages
=
[]
self
.
session
[
'wizard'
]
=
{}
self
.
d
=
session
[
'dialog'
]
def
add_page
(
self
,
page
):
self
.
pages
.
append
(
page
)
...
...
@@ -73,29 +74,58 @@ class Wizard:
continue
if
idx
>=
len
(
self
.
pages
):
break
msg
=
"All necessary information has been gathered:
\n\n
"
for
page
in
self
.
pages
:
msg
+=
" * %s
\n
"
%
page
.
info
msg
+=
"
\n
Confirm and Proceed."
ret
=
self
.
d
.
yesno
(
msg
,
width
=
PAGE_WIDTH
,
height
=
12
,
ok_label
=
"Yes"
,
cancel
=
"Back"
,
extra_button
=
1
,
extra_label
=
"Quit"
,
title
=
"Confirmation"
)
if
ret
==
self
.
d
.
DIALOG_CANCEL
:
idx
-=
1
elif
ret
==
self
.
d
.
DIALOG_EXTRA
:
return
False
elif
ret
==
self
.
d
.
DIALOG_OK
:
return
True
if
idx
<
0
:
return
False
return
True
class
WizardPage
:
class
WizardPage
(
object
)
:
NEXT
=
1
PREV
=
-
1
def
__init__
(
self
,
**
kargs
):
if
'validate'
in
kargs
:
validate
=
kargs
[
'validate'
]
else
:
validate
=
lambda
x
:
x
setattr
(
self
,
"validate"
,
validate
)
if
'display'
in
kargs
:
display
=
kargs
[
'display'
]
else
:
display
=
lambda
x
:
x
setattr
(
self
,
"display"
,
display
)
def
run
(
self
,
session
,
index
,
total
):
raise
NotImplementedError
class
WizardRadioListPage
(
WizardPage
):
def
__init__
(
self
,
name
,
message
,
choices
,
**
kargs
):
def
__init__
(
self
,
name
,
printable
,
message
,
choices
,
**
kargs
):
super
(
WizardRadioListPage
,
self
).
__init__
(
**
kargs
)
self
.
name
=
name
self
.
printable
=
printable
self
.
message
=
message
self
.
choices
=
choices
self
.
title
=
kargs
[
'title'
]
if
'title'
in
kargs
else
''
self
.
default
=
kargs
[
'default'
]
if
'default'
in
kargs
else
0
self
.
default
=
kargs
[
'default'
]
if
'default'
in
kargs
else
""
def
run
(
self
,
session
,
index
,
total
):
d
=
session
[
'dialog'
]
...
...
@@ -106,93 +136,69 @@ class WizardRadioListPage(WizardPage):
default
=
1
if
self
.
choices
[
i
][
0
]
==
self
.
default
else
0
choices
.
append
((
self
.
choices
[
i
][
0
],
self
.
choices
[
i
][
1
],
default
))
while
True
:
(
code
,
answer
)
=
\
d
.
radiolist
(
self
.
message
,
height
=
10
,
width
=
PAGE_WIDTH
,
ok_label
=
"Next"
,
cancel
=
"Back"
,
choices
=
choices
,
title
=
"(%d/%d) %s"
%
(
index
+
1
,
total
,
self
.
title
)
)
(
code
,
answer
)
=
d
.
radiolist
(
self
.
message
,
height
=
10
,
width
=
PAGE_WIDTH
,
ok_label
=
"Next"
,
cancel
=
"Back"
,
choices
=
choices
,
title
=
"(%d/%d) %s"
%
(
index
+
1
,
total
,
self
.
title
))
if
code
in
(
d
.
DIALOG_CANCEL
,
d
.
DIALOG_ESC
):
return
self
.
PREV
if
code
in
(
d
.
DIALOG_CANCEL
,
d
.
DIALOG_ESC
):
return
self
.
PREV
w
[
self
.
name
]
=
answer
self
.
default
=
answer
w
[
self
.
name
]
=
self
.
validate
(
answer
)
self
.
default
=
answer
self
.
info
=
"%s: %s"
%
(
self
.
printable
,
self
.
display
(
w
[
self
.
name
]))
return
self
.
NEXT
return
self
.
NEXT
class
WizardInputPage
(
WizardPage
):
def
__init__
(
self
,
name
,
message
,
**
kargs
):
def
__init__
(
self
,
name
,
printable
,
message
,
**
kargs
):
super
(
WizardInputPage
,
self
).
__init__
(
**
kargs
)
self
.
name
=
name
self
.
printable
=
printable
self
.
message
=
message
self
.
title
=
kargs
[
'title'
]
if
'title'
in
kargs
else
''
self
.
init
=
kargs
[
'init'
]
if
'init'
in
kargs
else
''
if
'validate'
in
kargs
:
validate
=
kargs
[
'validate'
]
else
:
validate
=
lambda
x
:
x
setattr
(
self
,
"validate"
,
validate
)
def
run
(
self
,
session
,
index
,
total
):
d
=
session
[
'dialog'
]
w
=
session
[
'wizard'
]
while
True
:
(
code
,
answer
)
=
\
d
.
inputbox
(
self
.
message
,
init
=
self
.
init
,
width
=
PAGE_WIDTH
,
ok_label
=
"Next"
,
cancel
=
"Back"
,
title
=
"(%d/%d) %s"
%
(
index
+
1
,
total
,
self
.
title
))
(
code
,
answer
)
=
d
.
inputbox
(
self
.
message
,
init
=
self
.
init
,
width
=
PAGE_WIDTH
,
ok_label
=
"Next"
,
cancel
=
"Back"
,
title
=
"(%d/%d) %s"
%
(
index
+
1
,
total
,
self
.
title
))
if
code
in
(
d
.
DIALOG_CANCEL
,
d
.
DIALOG_ESC
):
return
self
.
PREV
if
code
in
(
d
.
DIALOG_CANCEL
,
d
.
DIALOG_ESC
):
return
self
.
PREV
value
=
answer
.
strip
()
self
.
init
=
value
w
[
self
.
name
]
=
self
.
validate
(
value
)
break
value
=
answer
.
strip
()
self
.
init
=
value
w
[
self
.
name
]
=
self
.
validate
(
value
)
self
.
info
=
"%s: %s"
%
(
self
.
printable
,
self
.
display
(
w
[
self
.
name
]))
return
self
.
NEXT
class
WizardYesNoPage
(
WizardPage
):
def
__init__
(
self
,
message
,
**
kargs
):
self
.
message
=
message
self
.
title
=
kargs
[
'title'
]
if
'title'
in
kargs
else
''
def
run
(
self
,
session
,
index
,
total
):
d
=
session
[
'dialog'
]
while
True
:
ret
=
d
.
yesno
(
self
.
message
,
width
=
PAGE_WIDTH
,
ok_label
=
"Yes"
,
cancel
=
"Back"
,
extra_button
=
1
,
extra_label
=
"Quit"
,
title
=
"(%d/%d) %s"
%
(
index
+
1
,
total
,
self
.
title
))
if
ret
==
d
.
DIALOG_CANCEL
:
return
self
.
PREV
elif
ret
==
d
.
DIALOG_EXTRA
:
raise
WizardExit
elif
ret
==
d
.
DIALOG_OK
:
return
self
.
NEXT
def
wizard
(
session
):
init_token
=
Kamaki
.
get_token
()
if
init_token
is
None
:
init_token
=
""
name
=
WizardInputPage
(
"ImageName"
,
"Please provide a name for the image:"
,
title
=
"Image Name"
,
init
=
session
[
'device'
].
distro
)
name
=
WizardInputPage
(
"ImageName"
,
"Image Name"
,
"Please provide a name for the image:"
,
title
=
"Image Name"
,
init
=
session
[
'device'
].
distro
)
descr
=
WizardInputPage
(
"ImageDescription"
,
"Please provide a description for the image:"
,
"ImageDescription"
,
"Image Description"
,
"Please provide a description for the image:"
,
title
=
"Image Description"
,
init
=
session
[
'metadata'
][
'DESCRIPTION'
]
if
'DESCRIPTION'
in
session
[
'metadata'
]
else
''
)
registration
=
WizardRadioListPage
(
"ImageRegistration"
,
"Please provide a registration type:"
,
"ImageRegistration"
,
"Registration Type"
,
"Please provide a registration type:"
,
[(
"Private"
,
"Image is accessible only by this user"
),
(
"Public"
,
"Everyone can create VMs from this image"
)],
title
=
"Registration Type"
,
default
=
"Private"
)
...
...
@@ -211,11 +217,10 @@ def wizard(session):
return
account
account
=
WizardInputPage
(
"account"
,
"Please provide your ~okeanos authentication token:"
,
title
=
"~okeanos account"
,
init
=
init_token
,
validate
=
validate_account
)
msg
=
"All necessary information has been gathered. Confirm and Proceed."
proceed
=
WizardYesNoPage
(
msg
,
title
=
"Confirmation"
)
"Account"
,
"Account"
,
"Please provide your ~okeanos authentication token:"
,
title
=
"~okeanos account"
,
init
=
init_token
,
validate
=
validate_account
,
display
=
lambda
account
:
account
[
'username'
])
w
=
Wizard
(
session
)
...
...
@@ -223,7 +228,6 @@ def wizard(session):
w
.
add_page
(
descr
)
w
.
add_page
(
registration
)
w
.
add_page
(
account
)
w
.
add_page
(
proceed
)
if
w
.
run
():
create_image
(
session
)
...
...
@@ -242,7 +246,7 @@ def create_image(session):
wizard
=
session
[
'wizard'
]
# Save Kamaki credentials
Kamaki
.
save_token
(
wizard
[
'
a
ccount'
][
'auth_token'
])
Kamaki
.
save_token
(
wizard
[
'
A
ccount'
][
'auth_token'
])
with_progress
=
OutputWthProgress
(
True
)
out
=
disk
.
out
...
...
@@ -276,7 +280,7 @@ def create_image(session):
out
.
output
()
try
:
out
.
output
(
"Uploading image to pithos:"
)
kamaki
=
Kamaki
(
wizard
[
'
a
ccount'
],
out
)
kamaki
=
Kamaki
(
wizard
[
'
A
ccount'
],
out
)
name
=
"%s-%s.diskdump"
%
(
wizard
[
'ImageName'
],
time
.
strftime
(
"%Y%m%d%H%M"
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment