Withdraw the _environ module
This existed solely for testing, so expose it a different way during the unix coverage build Also turn off os.getenv support on samd21.
This commit is contained in:
parent
243ecc2502
commit
3459fe322b
@ -49,8 +49,8 @@
|
||||
#include "shared-bindings/_bleio/ScanEntry.h"
|
||||
#include "shared-bindings/time/__init__.h"
|
||||
|
||||
#if CIRCUITPY_ENVIRON
|
||||
#include "shared-bindings/_environ/__init__.h"
|
||||
#if CIRCUITPY_OS_GETENV
|
||||
#include "shared-bindings/os/__init__.h"
|
||||
#endif
|
||||
|
||||
#define MSEC_TO_UNITS(TIME, RESOLUTION) (((TIME) * 1000) / (RESOLUTION))
|
||||
@ -284,8 +284,8 @@ char default_ble_name[] = { 'C', 'I', 'R', 'C', 'U', 'I', 'T', 'P', 'Y', 0, 0, 0
|
||||
STATIC void bleio_adapter_hci_init(bleio_adapter_obj_t *self) {
|
||||
mp_int_t name_len = 0;
|
||||
|
||||
#if CIRCUITPY_ENVIRON
|
||||
mp_obj_t name = common_hal__environ_get_key("CIRCUITPY_BLE_NAME");
|
||||
#if CIRCUITPY_OS_GETENV
|
||||
mp_obj_t name = common_hal_os_getenv("CIRCUITPY_BLE_NAME", mp_const_none);
|
||||
if (name != mp_const_none) {
|
||||
mp_arg_validate_type_string(name, MP_QSTR_CIRCUITPY_BLE_NAME);
|
||||
self->name = name;
|
||||
|
@ -6,23 +6,33 @@ variables are commonly used to store "secrets" such as Wi-Fi passwords and API
|
||||
keys. This method *does not* make them secure. It only separates them from the
|
||||
code.
|
||||
|
||||
CircuitPython supports these by parsing a subset of the `toml <https://toml.io/>`_ file format internally.
|
||||
CircuitPython uses a file called ``settings.toml`` at the drive root (no
|
||||
folder) as the environment. User code can access the values from the file
|
||||
using `os.getenv()`. It is recommended to save any values used repeatedly in a
|
||||
variable because `os.getenv()` will parse the ``settings.toml`` file contents
|
||||
on every access.
|
||||
|
||||
Here is a simple example:
|
||||
CircuitPython only supports a subset of the full toml specification, see below
|
||||
for more details. The subset is very "Python-like", which is a key reason we
|
||||
selected the format.
|
||||
|
||||
.. code-block:: bash
|
||||
Due to technical limitations it probably also accepts some files that are
|
||||
not valid TOML files; bugs of this nature are subject to change (i.e., be
|
||||
fixed) without the usual deprecation period for incompatible changes.
|
||||
|
||||
KEY1="value1"
|
||||
# Comment
|
||||
KEY2="value2\ncontains a newline"
|
||||
File format example:
|
||||
|
||||
[SECTION] # Only values in the "root table" are parsed
|
||||
SECTION_VALUE = ... # so this value cannot be seen by getenv
|
||||
.. code-block::
|
||||
|
||||
str_key="Hello world" # with trailing comment
|
||||
int_key = 7
|
||||
unicode_key="👨"
|
||||
unicode_key2="\\U0001f468" # same as above
|
||||
escape_codes="supported, including \\r\\n\\"\\\\"
|
||||
# comment
|
||||
[subtable]
|
||||
subvalue="cannot retrieve this using _environ or getenv"
|
||||
|
||||
CircuitPython uses the ``settings.toml`` at the drive root (no folder) as the environment.
|
||||
User code can access the values from the file using `os.getenv()`. It is
|
||||
recommended to save any values used repeatedly in a variable because `os.getenv()`
|
||||
will parse the ``settings.toml`` file contents on every access.
|
||||
|
||||
Details of the toml language subset
|
||||
-----------------------------------
|
||||
@ -36,6 +46,8 @@ Details of the toml language subset
|
||||
* Duplicate keys are not diagnosed.
|
||||
* Comments are supported
|
||||
* Only values from the "root table" can be retrieved
|
||||
* due to technical limitations, the content of multi-line
|
||||
strings can erroneously be parsed as a value.
|
||||
|
||||
CircuitPython behavior
|
||||
----------------------
|
||||
|
@ -33,6 +33,7 @@ CIRCUITPY_BLEIO_HCI = 0
|
||||
CIRCUITPY_BUILTINS_POW3 ?= 0
|
||||
CIRCUITPY_COMPUTED_GOTO_SAVE_SPACE ?= 1
|
||||
CIRCUITPY_COUNTIO ?= 0
|
||||
CIRCUITPY_OS_GETENV ?= 0
|
||||
# Not enough RAM for framebuffers
|
||||
CIRCUITPY_FRAMEBUFFERIO ?= 0
|
||||
CIRCUITPY_FREQUENCYIO ?= 0
|
||||
|
@ -59,8 +59,8 @@
|
||||
#include "esp_bt.h"
|
||||
#include "esp_nimble_hci.h"
|
||||
|
||||
#if CIRCUITPY_ENVIRON
|
||||
#include "shared-module/_environ/__init__.h"
|
||||
#if CIRCUITPY_OS_GETENV
|
||||
#include "shared-module/os/__init__.h"
|
||||
#endif
|
||||
|
||||
bleio_connection_internal_t bleio_connections[BLEIO_TOTAL_CONNECTION_COUNT];
|
||||
@ -101,9 +101,9 @@ void common_hal_bleio_adapter_set_enabled(bleio_adapter_obj_t *self, bool enable
|
||||
ble_hs_cfg.sync_cb = _on_sync;
|
||||
// ble_hs_cfg.store_status_cb = ble_store_util_status_rr;
|
||||
|
||||
#if CIRCUITPY_ENVIRON
|
||||
#if CIRCUITPY_OS_GETENV
|
||||
char ble_name[1 + MYNEWT_VAL_BLE_SVC_GAP_DEVICE_NAME_MAX_LENGTH];
|
||||
_environ_err_t result = _environ_get_key_str("CIRCUITPY_BLE_NAME", ble_name, sizeof(ble_name));
|
||||
os_environ_err_t result = common_hal_os_environ_get_key_str("CIRCUITPY_BLE_NAME", ble_name, sizeof(ble_name));
|
||||
if (result == ENVIRON_OK) {
|
||||
ble_svc_gap_device_name_set(ble_name);
|
||||
} else
|
||||
|
@ -55,7 +55,7 @@
|
||||
#include "shared-bindings/microcontroller/RunMode.h"
|
||||
#include "shared-bindings/rtc/__init__.h"
|
||||
#include "shared-bindings/socketpool/__init__.h"
|
||||
#include "shared-module/_environ/__init__.h"
|
||||
#include "shared-module/os/__init__.h"
|
||||
|
||||
#include "peripherals/rmt.h"
|
||||
#include "peripherals/timer.h"
|
||||
@ -519,7 +519,7 @@ void port_idle_until_interrupt(void) {
|
||||
void port_post_boot_py(bool heap_valid) {
|
||||
if (!heap_valid && filesystem_present()) {
|
||||
mp_int_t reserved;
|
||||
if (_environ_get_key_int("CIRCUITPY_RESERVED_PSRAM", &reserved) == ENVIRON_OK) {
|
||||
if (common_hal_os_environ_get_key_int("CIRCUITPY_RESERVED_PSRAM", &reserved) == ENVIRON_OK) {
|
||||
common_hal_espidf_set_reserved_psram(reserved);
|
||||
}
|
||||
common_hal_espidf_reserve_psram();
|
||||
|
@ -52,8 +52,8 @@
|
||||
#include "shared-bindings/_bleio/ScanEntry.h"
|
||||
#include "shared-bindings/time/__init__.h"
|
||||
|
||||
#if CIRCUITPY_ENVIRON
|
||||
#include "shared-bindings/_environ/__init__.h"
|
||||
#if CIRCUITPY_OS_GETENV
|
||||
#include "shared-bindings/os/getenv.h"
|
||||
#endif
|
||||
|
||||
#define BLE_MIN_CONN_INTERVAL MSEC_TO_UNITS(15, UNIT_0_625_MS)
|
||||
@ -345,8 +345,8 @@ STATIC void bleio_adapter_reset_name(bleio_adapter_obj_t *self) {
|
||||
|
||||
mp_int_t name_len = 0;
|
||||
|
||||
#if CIRCUITPY_ENVIRON
|
||||
mp_obj_t ble_name = common_hal__environ_get_key("CIRCUITPY_BLE_NAME");
|
||||
#if CIRCUITPY_OS_GETENV
|
||||
mp_obj_t ble_name = common_hal_os_environ_get_key("CIRCUITPY_BLE_NAME");
|
||||
if (ble_name != mp_const_none) {
|
||||
common_hal_bleio_adapter_set_name(self, mp_obj_str_get_str(ble_name));
|
||||
return;
|
||||
|
@ -95,6 +95,7 @@ STATIC const mp_rom_map_elem_t rawfile_locals_dict_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_readinto), MP_ROM_PTR(&mp_stream_readinto_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_readline), MP_ROM_PTR(&mp_stream_unbuffered_readline_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_ioctl), MP_ROM_PTR(&mp_stream_ioctl_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_ioctl), MP_ROM_PTR(&mp_stream_ioctl_obj) },
|
||||
};
|
||||
|
||||
STATIC MP_DEFINE_CONST_DICT(rawfile_locals_dict, rawfile_locals_dict_table);
|
||||
|
@ -420,6 +420,13 @@ STATIC void set_sys_argv(char *argv[], int argc, int start_arg) {
|
||||
#define PATHLIST_SEP_CHAR ':'
|
||||
#endif
|
||||
|
||||
mp_obj_t common_hal_os_getenv_path(const char *path, const char *key, mp_obj_t default_);
|
||||
STATIC mp_obj_t get_key(mp_obj_t path_in, mp_obj_t key_to_get_in) {
|
||||
return common_hal_os_getenv_path(mp_obj_str_get_str(path_in),
|
||||
mp_obj_str_get_str(key_to_get_in), mp_const_none);
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_2(get_key_obj, get_key);
|
||||
|
||||
MP_NOINLINE int main_(int argc, char **argv);
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
@ -540,6 +547,7 @@ MP_NOINLINE int main_(int argc, char **argv) {
|
||||
MP_DECLARE_CONST_FUN_OBJ_0(extra_cpp_coverage_obj);
|
||||
mp_store_global(MP_QSTR_extra_coverage, MP_OBJ_FROM_PTR(&extra_coverage_obj));
|
||||
mp_store_global(MP_QSTR_extra_cpp_coverage, MP_OBJ_FROM_PTR(&extra_cpp_coverage_obj));
|
||||
mp_store_global(MP_QSTR_get_key, MP_OBJ_FROM_PTR(&get_key_obj));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -33,7 +33,6 @@ SRC_BITMAP := \
|
||||
shared-bindings/aesio/__init__.c \
|
||||
shared-bindings/bitmaptools/__init__.c \
|
||||
shared-bindings/displayio/Bitmap.c \
|
||||
shared-bindings/_environ/__init__.c \
|
||||
shared-bindings/rainbowio/__init__.c \
|
||||
shared-bindings/traceback/__init__.c \
|
||||
shared-bindings/util.c \
|
||||
@ -45,7 +44,7 @@ SRC_BITMAP := \
|
||||
shared-module/displayio/Bitmap.c \
|
||||
shared-module/displayio/ColorConverter.c \
|
||||
shared-module/displayio/ColorConverter.c \
|
||||
shared-module/_environ/__init__.c \
|
||||
shared-module/os/getenv.c \
|
||||
shared-module/rainbowio/__init__.c \
|
||||
shared-module/traceback/__init__.c \
|
||||
shared-module/zlib/__init__.c \
|
||||
@ -56,7 +55,7 @@ CFLAGS += \
|
||||
-DCIRCUITPY_AESIO=1 \
|
||||
-DCIRCUITPY_BITMAPTOOLS=1 \
|
||||
-DCIRCUITPY_DISPLAYIO_UNIX=1 \
|
||||
-DCIRCUITPY_ENVIRON=1 \
|
||||
-DCIRCUITPY_OS_GETENV=1 \
|
||||
-DCIRCUITPY_GIFIO=1 \
|
||||
-DCIRCUITPY_RAINBOWIO=1 \
|
||||
-DCIRCUITPY_TRACEBACK=1 \
|
||||
|
@ -182,9 +182,6 @@ endif
|
||||
ifeq ($(CIRCUITPY_DISPLAYIO),1)
|
||||
SRC_PATTERNS += displayio/%
|
||||
endif
|
||||
ifeq ($(CIRCUITPY_ENVIRON),1)
|
||||
SRC_PATTERNS += _environ/%
|
||||
endif
|
||||
ifeq ($(CIRCUITPY__EVE),1)
|
||||
SRC_PATTERNS += _eve/%
|
||||
endif
|
||||
@ -618,6 +615,7 @@ SRC_SHARED_MODULE_ALL = \
|
||||
onewireio/__init__.c \
|
||||
onewireio/OneWire.c \
|
||||
os/__init__.c \
|
||||
os/getenv.c \
|
||||
paralleldisplay/ParallelBus.c \
|
||||
qrio/__init__.c \
|
||||
qrio/QRDecoder.c \
|
||||
|
@ -215,8 +215,8 @@ CFLAGS += -DCIRCUITPY_DUALBANK=$(CIRCUITPY_DUALBANK)
|
||||
CIRCUITPY_ENABLE_MPY_NATIVE ?= 0
|
||||
CFLAGS += -DCIRCUITPY_ENABLE_MPY_NATIVE=$(CIRCUITPY_ENABLE_MPY_NATIVE)
|
||||
|
||||
CIRCUITPY_ENVIRON ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CFLAGS += -DCIRCUITPY_ENVIRON=$(CIRCUITPY_ENVIRON)
|
||||
CIRCUITPY_OS_GETENV ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CFLAGS += -DCIRCUITPY_OS_GETENV=$(CIRCUITPY_OS_GETENV)
|
||||
|
||||
CIRCUITPY_ERRNO ?= $(CIRCUITPY_FULL_BUILD)
|
||||
CFLAGS += -DCIRCUITPY_ERRNO=$(CIRCUITPY_ERRNO)
|
||||
|
@ -1,108 +0,0 @@
|
||||
/*
|
||||
* This file is part of the Micro Python project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* SPDX-FileCopyrightText: Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "extmod/vfs.h"
|
||||
#include "lib/oofatfs/ff.h"
|
||||
#include "lib/oofatfs/diskio.h"
|
||||
#include "py/mpstate.h"
|
||||
#include "py/obj.h"
|
||||
#include "py/objstr.h"
|
||||
#include "py/runtime.h"
|
||||
#include "shared-bindings/_environ/__init__.h"
|
||||
|
||||
//| """Functions to manage environment variables from a settings.toml file.
|
||||
//|
|
||||
//| This library can read a subset of `toml files <https://toml.io/>`_.
|
||||
//|
|
||||
//| It is recommended to not use this module directly. Instead, retrieve string
|
||||
//| values using `os.getenv`.
|
||||
//|
|
||||
//| Due to technical limitations it probably also accepts some files that are
|
||||
//| not valid TOML files; bugs of this nature are subject to change (i.e., be
|
||||
//| fixed) without the usual deprecation period for incompatible changes.
|
||||
//|
|
||||
//| Details of the format understood by this module:
|
||||
//| * the content is required to be in UTF-8 encoding
|
||||
//| * the supported data types are string and integer
|
||||
//| * only integers and basic strings are supported
|
||||
//| * only integers supported by strtol are supported (no 0o, no 0b, no
|
||||
//| underscores 1_000, 011 is 9, not 11)
|
||||
//| * In quoted strings, all standard eescape codes, including ``\\uxxxx``
|
||||
//| and ``\\Uxxxxxxxx``, are supported
|
||||
//| * only bare keys are supported
|
||||
//| * duplicate keys are not diagnosed.
|
||||
//| * comments are supported
|
||||
//| * only values from the "root table" can be retrieved (parsing ends when it
|
||||
//| encounters a line starting with [)
|
||||
//| * due to technical limitations, the content of multi-line
|
||||
//| strings can erroneously be parsed as a value.
|
||||
//|
|
||||
//| File format example:
|
||||
//|
|
||||
//| .. code-block::
|
||||
//|
|
||||
//| str_key="Hello world" # with trailing comment
|
||||
//| int_key = 7
|
||||
//| unicode_key="👨"
|
||||
//| unicode_key2="\\U0001f468" # same as above
|
||||
//| escape_codes="supported, including \\r\\n\\"\\\\"
|
||||
//| # comment
|
||||
//| [subtable]
|
||||
//| subvalue="cannot retrieve this using _environ or getenv"
|
||||
//|
|
||||
//| """
|
||||
//|
|
||||
//| import typing
|
||||
//|
|
||||
|
||||
//| def get_key(_environ_path: str, key_to_get: str) -> Union[str, int, None]:
|
||||
//| """Get the value for the given key from the given .env file.
|
||||
//|
|
||||
//| Returns None if the key isn't found"""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t __environ_get_key(mp_obj_t path_in, mp_obj_t key_to_get_in) {
|
||||
return common_hal__environ_get_key_path(mp_obj_str_get_str(path_in),
|
||||
mp_obj_str_get_str(key_to_get_in));
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_2(_environ_get_key_obj, __environ_get_key);
|
||||
|
||||
STATIC const mp_rom_map_elem_t _environ_module_globals_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR__environ) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_get_key), MP_ROM_PTR(&_environ_get_key_obj) },
|
||||
};
|
||||
|
||||
STATIC MP_DEFINE_CONST_DICT(_environ_module_globals, _environ_module_globals_table);
|
||||
|
||||
const mp_obj_module_t _environ_module = {
|
||||
.base = { &mp_type_module },
|
||||
.globals = (mp_obj_dict_t *)&_environ_module_globals,
|
||||
};
|
||||
|
||||
MP_REGISTER_MODULE(MP_QSTR__environ, _environ_module, CIRCUITPY_ENVIRON);
|
@ -1,37 +0,0 @@
|
||||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "py/objtuple.h"
|
||||
|
||||
#include "shared-module/_environ/__init__.h"
|
||||
|
||||
mp_obj_t common_hal__environ_get_key_path(const char *path, const char *key);
|
||||
mp_obj_t common_hal__environ_get_key(const char *key);
|
@ -92,6 +92,7 @@ MP_DEFINE_CONST_FUN_OBJ_0(os_getcwd_obj, os_getcwd);
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t os_getenv(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
#if CIRCUITPY_OS_GETENV
|
||||
enum { ARG_key, ARG_default };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_key, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
@ -101,6 +102,9 @@ STATIC mp_obj_t os_getenv(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_
|
||||
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
||||
|
||||
return common_hal_os_getenv(mp_obj_str_get_str(args[ARG_key].u_obj), args[ARG_default].u_obj);
|
||||
#else
|
||||
return mp_const_none;
|
||||
#endif
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(os_getenv_obj, 1, os_getenv);
|
||||
|
||||
|
@ -38,6 +38,8 @@ mp_obj_t common_hal_os_uname(void);
|
||||
void common_hal_os_chdir(const char *path);
|
||||
mp_obj_t common_hal_os_getcwd(void);
|
||||
mp_obj_t common_hal_os_getenv(const char *key, mp_obj_t default_);
|
||||
mp_obj_t common_hal_os_getenv_path(const char *path, const char *key, mp_obj_t default_);
|
||||
|
||||
mp_obj_t common_hal_os_listdir(const char *path);
|
||||
void common_hal_os_mkdir(const char *path);
|
||||
void common_hal_os_remove(const char *path);
|
||||
|
1
shared-bindings/os/getenv.c
Normal file
1
shared-bindings/os/getenv.c
Normal file
@ -0,0 +1 @@
|
||||
// this file needs to exist but does not have any content
|
@ -36,10 +36,6 @@
|
||||
#include "py/runtime.h"
|
||||
#include "shared-bindings/os/__init__.h"
|
||||
|
||||
#if CIRCUITPY_ENVIRON
|
||||
#include "shared-bindings/_environ/__init__.h"
|
||||
#endif
|
||||
|
||||
// This provides all VFS related OS functions so that ports can share the code
|
||||
// as needed. It does not provide uname.
|
||||
|
||||
@ -111,17 +107,6 @@ mp_obj_t common_hal_os_getcwd(void) {
|
||||
return mp_vfs_getcwd();
|
||||
}
|
||||
|
||||
mp_obj_t common_hal_os_getenv(const char *key, mp_obj_t default_) {
|
||||
#if CIRCUITPY_ENVIRON
|
||||
mp_obj_t env_obj = common_hal__environ_get_key(key);
|
||||
// TODO must be a str object
|
||||
if (env_obj != mp_const_none) {
|
||||
return env_obj;
|
||||
}
|
||||
#endif
|
||||
return default_;
|
||||
}
|
||||
|
||||
mp_obj_t common_hal_os_listdir(const char *path) {
|
||||
mp_obj_t path_out;
|
||||
mp_vfs_mount_t *vfs = lookup_dir_path(path, &path_out);
|
||||
|
@ -33,13 +33,13 @@ typedef enum {
|
||||
ENVIRON_ERR_LENGTH,
|
||||
ENVIRON_ERR_NOT_FOUND,
|
||||
ENVIRON_ERR_UNEXPECTED = 0xff00, // logical or'd with the byte value
|
||||
} _environ_err_t;
|
||||
} os_environ_err_t;
|
||||
|
||||
// Allocation free version that returns the full length of the value.
|
||||
// If it fits, the return value is 0-terminated. If the value doesn't fit,
|
||||
// *value_len may be an over-estimate but never an under-estimate.
|
||||
_environ_err_t _environ_get_key_str(const char *key, char *value, size_t value_len);
|
||||
os_environ_err_t common_hal_os_environ_get_key_str(const char *key, char *value, size_t value_len);
|
||||
|
||||
// Returns ENVIRON_ERR_OK and sets value to the read value. Returns
|
||||
// ENVIRON_ERR_... if the value was not numeric. allocation-free.
|
||||
_environ_err_t _environ_get_key_int(const char *key, mp_int_t *value);
|
||||
os_environ_err_t common_hal_os_environ_get_key_int(const char *key, mp_int_t *value);
|
@ -27,7 +27,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "shared-bindings/_environ/__init__.h"
|
||||
#include "shared-bindings/os/__init__.h"
|
||||
#include "shared-module/os/__init__.h"
|
||||
|
||||
#include "py/gc.h"
|
||||
#include "py/misc.h"
|
||||
@ -177,7 +178,7 @@ STATIC bool key_matches(file_arg *active_file, const char *key) {
|
||||
return true;
|
||||
}
|
||||
|
||||
STATIC _environ_err_t read_unicode_escape(file_arg *active_file, int sz, vstr_t *buf) {
|
||||
STATIC os_environ_err_t read_unicode_escape(file_arg *active_file, int sz, vstr_t *buf) {
|
||||
char hex_buf[sz + 1];
|
||||
for (int i = 0; i < sz; i++) {
|
||||
hex_buf[i] = get_next_byte(active_file);
|
||||
@ -196,7 +197,7 @@ STATIC _environ_err_t read_unicode_escape(file_arg *active_file, int sz, vstr_t
|
||||
}
|
||||
|
||||
// Read a quoted string
|
||||
STATIC _environ_err_t read_string_value(file_arg *active_file, vstr_t *buf) {
|
||||
STATIC os_environ_err_t read_string_value(file_arg *active_file, vstr_t *buf) {
|
||||
while (true) {
|
||||
int character = get_next_byte(active_file);
|
||||
switch (character) {
|
||||
@ -243,7 +244,7 @@ STATIC _environ_err_t read_string_value(file_arg *active_file, vstr_t *buf) {
|
||||
case 'U':
|
||||
case 'u': {
|
||||
int sz = (character == 'u') ? 4 : 8;
|
||||
_environ_err_t res;
|
||||
os_environ_err_t res;
|
||||
res = read_unicode_escape(active_file, sz, buf);
|
||||
if (res != ENVIRON_OK) {
|
||||
return res;
|
||||
@ -261,7 +262,7 @@ STATIC _environ_err_t read_string_value(file_arg *active_file, vstr_t *buf) {
|
||||
}
|
||||
|
||||
// Read a numeric value (non-quoted value) as a string
|
||||
STATIC _environ_err_t read_bare_value(file_arg *active_file, vstr_t *buf, int first_character) {
|
||||
STATIC os_environ_err_t read_bare_value(file_arg *active_file, vstr_t *buf, int first_character) {
|
||||
int character = first_character;
|
||||
while (true) {
|
||||
switch (character) {
|
||||
@ -291,13 +292,13 @@ STATIC mp_int_t read_value(file_arg *active_file, vstr_t *buf, bool *quoted) {
|
||||
}
|
||||
}
|
||||
|
||||
STATIC _environ_err_t _environ_get_key_vstr(const char *path, const char *key, vstr_t *buf, bool *quoted) {
|
||||
STATIC os_environ_err_t os_environ_get_key_vstr(const char *path, const char *key, vstr_t *buf, bool *quoted) {
|
||||
file_arg active_file;
|
||||
if (!open_file(path, &active_file)) {
|
||||
return ENVIRON_ERR_OPEN;
|
||||
}
|
||||
|
||||
_environ_err_t result = ENVIRON_ERR_NOT_FOUND;
|
||||
os_environ_err_t result = ENVIRON_ERR_NOT_FOUND;
|
||||
while (!is_eof(&active_file)) {
|
||||
if (key_matches(&active_file, key)) {
|
||||
result = read_value(&active_file, buf, quoted);
|
||||
@ -307,10 +308,10 @@ STATIC _environ_err_t _environ_get_key_vstr(const char *path, const char *key, v
|
||||
return result;
|
||||
}
|
||||
|
||||
STATIC _environ_err_t _environ_get_key_buf_terminated(const char *key, char *value, size_t value_len, bool *quoted) {
|
||||
STATIC os_environ_err_t os_environ_get_key_buf_terminated(const char *key, char *value, size_t value_len, bool *quoted) {
|
||||
vstr_t buf;
|
||||
vstr_init_fixed_buf(&buf, value_len, value);
|
||||
_environ_err_t result = _environ_get_key_vstr(ENVIRON_PATH, key, &buf, quoted);
|
||||
os_environ_err_t result = os_environ_get_key_vstr(ENVIRON_PATH, key, &buf, quoted);
|
||||
|
||||
if (result == ENVIRON_OK) {
|
||||
vstr_add_byte_nonstd(&buf, 0);
|
||||
@ -322,16 +323,16 @@ STATIC _environ_err_t _environ_get_key_buf_terminated(const char *key, char *val
|
||||
return result;
|
||||
}
|
||||
|
||||
_environ_err_t _environ_get_key_str(const char *key, char *value, size_t value_len) {
|
||||
os_environ_err_t common_hal_os_environ_get_key_str(const char *key, char *value, size_t value_len) {
|
||||
bool quoted;
|
||||
_environ_err_t result = _environ_get_key_buf_terminated(key, value, value_len, "ed);
|
||||
os_environ_err_t result = os_environ_get_key_buf_terminated(key, value, value_len, "ed);
|
||||
if (result == ENVIRON_OK && !quoted) {
|
||||
result = ENVIRON_ERR_UNEXPECTED | value[0];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
STATIC void throw__environ_error(_environ_err_t error) {
|
||||
STATIC void throw__environ_error(os_environ_err_t error) {
|
||||
if (error == ENVIRON_OK) {
|
||||
return;
|
||||
}
|
||||
@ -360,14 +361,14 @@ STATIC void throw__environ_error(_environ_err_t error) {
|
||||
}
|
||||
}
|
||||
|
||||
mp_obj_t common_hal__environ_get_key_path(const char *path, const char *key) {
|
||||
mp_obj_t common_hal_os_getenv_path(const char *path, const char *key, mp_obj_t default_) {
|
||||
vstr_t buf;
|
||||
bool quoted;
|
||||
|
||||
vstr_init(&buf, 64);
|
||||
_environ_err_t result = _environ_get_key_vstr(path, key, &buf, "ed);
|
||||
os_environ_err_t result = os_environ_get_key_vstr(path, key, &buf, "ed);
|
||||
if (result == ENVIRON_ERR_NOT_FOUND) {
|
||||
return mp_const_none;
|
||||
return default_;
|
||||
}
|
||||
throw__environ_error(result);
|
||||
|
||||
@ -378,14 +379,14 @@ mp_obj_t common_hal__environ_get_key_path(const char *path, const char *key) {
|
||||
}
|
||||
}
|
||||
|
||||
mp_obj_t common_hal__environ_get_key(const char *key) {
|
||||
return common_hal__environ_get_key_path(ENVIRON_PATH, key);
|
||||
mp_obj_t common_hal_os_getenv(const char *key, mp_obj_t default_) {
|
||||
return common_hal_os_getenv_path(ENVIRON_PATH, key, default_);
|
||||
}
|
||||
|
||||
_environ_err_t _environ_get_key_int(const char *key, mp_int_t *value) {
|
||||
os_environ_err_t common_hal_os_environ_get_key_int(const char *key, mp_int_t *value) {
|
||||
char buf[16];
|
||||
bool quoted;
|
||||
_environ_err_t result = _environ_get_key_buf_terminated(key, buf, sizeof(buf), "ed);
|
||||
os_environ_err_t result = os_environ_get_key_buf_terminated(key, buf, sizeof(buf), "ed);
|
||||
if (result != ENVIRON_OK) {
|
||||
return result;
|
||||
}
|
@ -129,7 +129,7 @@ bool filesystem_init(bool create_allowed, bool force_create) {
|
||||
make_empty_file(&vfs_fat->fatfs, "/.metadata_never_index");
|
||||
make_empty_file(&vfs_fat->fatfs, "/.Trashes");
|
||||
make_empty_file(&vfs_fat->fatfs, "/.fseventsd/no_log");
|
||||
#if CIRCUITPY_ENVIRON
|
||||
#if CIRCUITPY_OS_GETENV
|
||||
make_empty_file(&vfs_fat->fatfs, "/settings.toml");
|
||||
#endif
|
||||
// make a sample code.py file
|
||||
|
@ -64,8 +64,8 @@
|
||||
#include "shared-bindings/wifi/__init__.h"
|
||||
#endif
|
||||
|
||||
#if CIRCUITPY_ENVIRON
|
||||
#include "shared-module/_environ/__init__.h"
|
||||
#if CIRCUITPY_OS_GETENV
|
||||
#include "shared-module/os/__init__.h"
|
||||
#endif
|
||||
|
||||
enum request_state {
|
||||
@ -244,19 +244,19 @@ void supervisor_web_workflow_status(void) {
|
||||
#endif
|
||||
|
||||
void supervisor_start_web_workflow(void) {
|
||||
#if CIRCUITPY_WEB_WORKFLOW && CIRCUITPY_WIFI && CIRCUITPY_ENVIRON
|
||||
#if CIRCUITPY_WEB_WORKFLOW && CIRCUITPY_WIFI && CIRCUITPY_OS_GETENV
|
||||
|
||||
char ssid[33];
|
||||
char password[64];
|
||||
size_t ssid_len = 0;
|
||||
size_t password_len = 0;
|
||||
|
||||
_environ_err_t result = _environ_get_key_str("CIRCUITPY_WIFI_SSID", ssid, sizeof(ssid));
|
||||
os_environ_err_t result = common_hal_os_environ_get_key_str("CIRCUITPY_WIFI_SSID", ssid, sizeof(ssid));
|
||||
if (result != ENVIRON_OK) {
|
||||
return;
|
||||
}
|
||||
|
||||
result = _environ_get_key_str("CIRCUITPY_WIFI_PASSWORD", password, sizeof(password));
|
||||
result = common_hal_os_environ_get_key_str("CIRCUITPY_WIFI_PASSWORD", password, sizeof(password));
|
||||
if (result != ENVIRON_OK) {
|
||||
return;
|
||||
}
|
||||
@ -283,7 +283,7 @@ void supervisor_start_web_workflow(void) {
|
||||
|
||||
mp_int_t new_port = web_api_port;
|
||||
// (leaves new_port unchanged on any failure)
|
||||
(void)_environ_get_key_int("CIRCUITPY_WEB_API_PORT", &new_port);
|
||||
(void)common_hal_os_environ_get_key_int("CIRCUITPY_WEB_API_PORT", &new_port);
|
||||
|
||||
bool first_start = pool.base.type != &socketpool_socketpool_type;
|
||||
bool port_changed = new_port != web_api_port;
|
||||
@ -320,7 +320,7 @@ void supervisor_start_web_workflow(void) {
|
||||
|
||||
|
||||
const size_t api_password_len = sizeof(_api_password) - 1;
|
||||
result = _environ_get_key_str("CIRCUITPY_WEB_API_PASSWORD", _api_password + 1, api_password_len);
|
||||
result = common_hal_os_environ_get_key_str("CIRCUITPY_WEB_API_PASSWORD", _api_password + 1, api_password_len);
|
||||
if (result == ENVIRON_OK) {
|
||||
_api_password[0] = ':';
|
||||
_base64_in_place(_api_password, strlen(_api_password), sizeof(_api_password) - 1);
|
||||
|
@ -1,8 +1,8 @@
|
||||
import os
|
||||
|
||||
try:
|
||||
from _environ import get_key
|
||||
except:
|
||||
get_key
|
||||
except NameError:
|
||||
# Because run-tests.py suppresses site-packages, this test can't be run
|
||||
# on the host interpreter. However, it can be run manually to
|
||||
# generate/update the expected file.
|
||||
|
Loading…
Reference in New Issue
Block a user