Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
4a4490ff
Commit
4a4490ff
authored
May 06, 2017
by
Paul Sokolovsky
Browse files
py/modio: resource_stream: Implement "package" param handling.
parent
c1e0eb7a
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/modio.c
View file @
4a4490ff
...
...
@@ -133,13 +133,39 @@ STATIC const mp_obj_type_t bufwriter_type = {
#if MICROPY_MODULE_FROZEN_STR
STATIC
mp_obj_t
resource_stream
(
mp_obj_t
package_in
,
mp_obj_t
path_in
)
{
VSTR_FIXED
(
path_buf
,
MICROPY_ALLOC_PATH_MAX
);
size_t
len
;
// As an extension to pkg_resources.resource_stream(), we support
// package parameter being None, the path_in is interpreted as a
// raw path.
if
(
package_in
!=
mp_const_none
)
{
mp_not_implemented
(
""
);
mp_obj_t
args
[
5
];
args
[
0
]
=
package_in
;
args
[
1
]
=
mp_const_none
;
// TODO should be globals
args
[
2
]
=
mp_const_none
;
// TODO should be locals
args
[
3
]
=
mp_const_true
;
// Pass sentinel "non empty" value to force returning of leaf module
args
[
4
]
=
MP_OBJ_NEW_SMALL_INT
(
0
);
// TODO lookup __import__ and call that instead of going straight to builtin implementation
mp_obj_t
pkg
=
mp_builtin___import__
(
5
,
args
);
mp_obj_t
dest
[
2
];
mp_load_method_maybe
(
pkg
,
MP_QSTR___path__
,
dest
);
if
(
dest
[
0
]
==
MP_OBJ_NULL
)
{
mp_raise_TypeError
(
NULL
);
}
const
char
*
path
=
mp_obj_str_get_data
(
dest
[
0
],
&
len
);
vstr_add_strn
(
&
path_buf
,
path
,
len
);
vstr_add_byte
(
&
path_buf
,
'/'
);
}
size_t
len
;
const
char
*
path
=
mp_obj_str_get_data
(
path_in
,
&
len
);
const
char
*
data
=
mp_find_frozen_str
(
path
,
&
len
);
vstr_add_strn
(
&
path_buf
,
path
,
len
);
len
=
path_buf
.
len
;
const
char
*
data
=
mp_find_frozen_str
(
path_buf
.
buf
,
&
len
);
if
(
data
!=
NULL
)
{
mp_obj_stringio_t
*
o
=
m_new_obj
(
mp_obj_stringio_t
);
o
->
base
.
type
=
&
mp_type_bytesio
;
...
...
@@ -150,7 +176,8 @@ STATIC mp_obj_t resource_stream(mp_obj_t package_in, mp_obj_t path_in) {
return
MP_OBJ_FROM_PTR
(
o
);
}
return
mp_builtin_open
(
1
,
&
path_in
,
(
mp_map_t
*
)
&
mp_const_empty_map
);
mp_obj_t
path_out
=
mp_obj_new_str
(
path_buf
.
buf
,
path_buf
.
len
,
false
);
return
mp_builtin_open
(
1
,
&
path_out
,
(
mp_map_t
*
)
&
mp_const_empty_map
);
}
MP_DEFINE_CONST_FUN_OBJ_2
(
resource_stream_obj
,
resource_stream
);
#endif
...
...
tests/io/resource_stream.py
View file @
4a4490ff
...
...
@@ -7,10 +7,8 @@ except AttributeError:
print
(
'SKIP'
)
sys
.
exit
()
try
:
buf
=
uio
.
resource_stream
(
"data"
,
"file2"
)
except
NotImplementedError
:
pass
buf
=
uio
.
resource_stream
(
"data"
,
"file2"
)
print
(
buf
.
read
())
# resource_stream(None, ...) look ups from current dir, hence sys.path[0] hack
buf
=
uio
.
resource_stream
(
None
,
sys
.
path
[
0
]
+
"/data/file2"
)
...
...
tests/io/resource_stream.py.exp
View file @
4a4490ff
1234
1234
Write
Preview
Supports
Markdown
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