Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
18
Merge Requests
18
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Jobs
Commits
Open sidebar
nexedi
slapos.core
Commits
fa8f6d8a
Commit
fa8f6d8a
authored
Jun 11, 2022
by
Jérome Perrin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
console: set __file__ like python interpreter would do
parent
b9904d9f
Pipeline
#22127
failed with stage
in 0 seconds
Changes
3
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
43 additions
and
8 deletions
+43
-8
slapos/cli/console.py
slapos/cli/console.py
+1
-0
slapos/client.py
slapos/client.py
+1
-0
slapos/tests/test_cli.py
slapos/tests/test_cli.py
+41
-8
No files found.
slapos/cli/console.py
View file @
fa8f6d8a
...
@@ -94,6 +94,7 @@ class ConsoleCommand(ClientConfigCommand):
...
@@ -94,6 +94,7 @@ class ConsoleCommand(ClientConfigCommand):
if
args
.
script_file
:
if
args
.
script_file
:
with
open
(
args
.
script_file
)
as
f
:
with
open
(
args
.
script_file
)
as
f
:
code
=
compile
(
f
.
read
(),
args
.
script_file
,
'exec'
)
code
=
compile
(
f
.
read
(),
args
.
script_file
,
'exec'
)
local
[
'__file__'
]
=
args
.
script_file
return
exec_
(
code
,
globals
(),
local
)
return
exec_
(
code
,
globals
(),
local
)
if
not
any
([
args
.
python
,
args
.
ipython
,
args
.
bpython
]):
if
not
any
([
args
.
python
,
args
.
ipython
,
args
.
bpython
]):
...
...
slapos/client.py
View file @
fa8f6d8a
...
@@ -93,6 +93,7 @@ def init(conf, logger):
...
@@ -93,6 +93,7 @@ def init(conf, logger):
key_file
=
conf
.
key_file
,
cert_file
=
conf
.
cert_file
,
key_file
=
conf
.
key_file
,
cert_file
=
conf
.
cert_file
,
slapgrid_rest_uri
=
conf
.
master_rest_url
)
slapgrid_rest_uri
=
conf
.
master_rest_url
)
local
=
globals
().
copy
()
local
=
globals
().
copy
()
local
.
pop
(
'__file__'
,
None
)
local
[
'slap'
]
=
slap
local
[
'slap'
]
=
slap
# Create global shortcut functions to request instance and software
# Create global shortcut functions to request instance and software
def
shorthandRequest
(
*
args
,
**
kwargs
):
def
shorthandRequest
(
*
args
,
**
kwargs
):
...
...
slapos/tests/test_cli.py
View file @
fa8f6d8a
...
@@ -718,7 +718,7 @@ class TestCliSupervisorctl(CliMixin):
...
@@ -718,7 +718,7 @@ class TestCliSupervisorctl(CliMixin):
class
TestCliConsole
(
unittest
.
TestCase
):
class
TestCliConsole
(
unittest
.
TestCase
):
script
=
"""
\
default_
script
=
"""
\
print(request('software_release', 'instance').getInstanceParameterDict()['parameter_name'])
print(request('software_release', 'instance').getInstanceParameterDict()['parameter_name'])
"""
"""
...
@@ -732,22 +732,55 @@ print(request('software_release', 'instance').getInstanceParameterDict()['parame
...
@@ -732,22 +732,55 @@ print(request('software_release', 'instance').getInstanceParameterDict()['parame
tempfile
.
NamedTemporaryFile
()
as
config_file
:
tempfile
.
NamedTemporaryFile
()
as
config_file
:
config_file
.
write
(
b'[slapos]
\
n
master_url=null
\
n
'
)
config_file
.
write
(
b'[slapos]
\
n
master_url=null
\
n
'
)
config_file
.
flush
()
config_file
.
flush
()
yield
slapos
.
cli
.
entry
.
SlapOSApp
(),
config_file
.
name
yield
slapos
.
cli
.
entry
.
SlapOSApp
(),
\
config_file
.
name
,
\
mock_request
,
\
app_stdout
def
test_console_interactive
(
self
):
with
self
.
_test_console
()
as
(
app
,
config_file
,
mock_request
,
stdout
),
\
patch
.
object
(
sys
,
'stdin'
,
StringIO
(
self
.
default_script
)):
app
.
run
((
'console'
,
'--cfg'
,
config_file
))
self
.
assertIn
(
'parameter_value'
,
stdout
.
getvalue
())
mock_request
.
assert_called_once_with
(
mock_request
.
assert_called_once_with
(
'software_release'
,
'instance'
)
'software_release'
,
'instance'
)
self
.
assertIn
(
'parameter_value'
,
app_stdout
.
getvalue
())
def
test_console_interactive
(
self
):
def
test_console_interactive_no__file__
(
self
):
with
self
.
_test_console
()
as
(
app
,
config_file
),
\
script
=
'''if 1:
patch
.
object
(
sys
,
'stdin'
,
StringIO
(
self
.
script
)):
try:
print('FAIL __file__ is set to', __file__)
except NameError:
print('OK __file__ is not set')
'''
with
self
.
_test_console
()
as
(
app
,
config_file
,
_
,
stdout
),
\
patch
.
object
(
sys
,
'stdin'
,
StringIO
(
script
)):
app
.
run
((
'console'
,
'--cfg'
,
config_file
))
app
.
run
((
'console'
,
'--cfg'
,
config_file
))
self
.
assertIn
(
'OK __file__ is not set'
,
stdout
.
getvalue
())
def
test_console_script
(
self
):
def
test_console_script
(
self
):
with
self
.
_test_console
()
as
(
app
,
config_file
),
\
with
self
.
_test_console
()
as
(
app
,
config_file
,
mock_request
,
stdout
),
\
tempfile
.
NamedTemporaryFile
(
'w'
)
as
script
:
tempfile
.
NamedTemporaryFile
(
'w'
)
as
script
:
script
.
write
(
self
.
script
)
script
.
write
(
self
.
default_script
)
script
.
flush
()
app
.
run
((
'console'
,
'--cfg'
,
config_file
,
script
.
name
))
self
.
assertIn
(
'parameter_value'
,
stdout
.
getvalue
())
mock_request
.
assert_called_once_with
(
'software_release'
,
'instance'
)
def
test_console_script__file__
(
self
):
with
self
.
_test_console
()
as
(
app
,
config_file
,
_
,
stdout
),
\
tempfile
.
NamedTemporaryFile
(
'w'
)
as
script
:
script
.
write
(
'''if 1:
if __file__ == %r:
print('OK __file__ is set to script')
else:
print('FAIL __file__ is set to', __file__)
'''
%
script
.
name
)
script
.
flush
()
script
.
flush
()
app
.
run
((
'console'
,
'--cfg'
,
config_file
,
script
.
name
))
app
.
run
((
'console'
,
'--cfg'
,
config_file
,
script
.
name
))
self
.
assertIn
(
'OK __file__ is set to script'
,
stdout
.
getvalue
())
class
TestCliComplete
(
CliMixin
):
class
TestCliComplete
(
CliMixin
):
...
...
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