diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml deleted file mode 100644 index b6b44382a..000000000 --- a/.github/codeql/codeql-config.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: "Mu CodeQL configuration" - -paths-ignore: - - mu/contrib/esptool.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2e13aa1f6..814d9334c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -51,7 +51,7 @@ jobs: # The bundled plugins (plugins/*) are nu-editor dependencies that uv # resolves from the workspace; pip needs their paths given explicitly. # micro:bit is opt-in (nu-editor's `microbit` extra) but tested here too. - - name: Install Mu dependencies + - name: Install Nu dependencies run: | python -m pip install --upgrade pip pip install ./plugins/circuitpython ./plugins/pygamezero ./plugins/microbit ".[dev]" diff --git a/CHANGES.md b/CHANGES.md index 90fe30bb9..e75c46522 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -34,6 +34,14 @@ * The Plugins tab drew a stray empty box on the selected row (Windows 11). * The log tab opens at the newest entries. +### Removed + +* Code and files left over from Mu's removed modes: the micro:bit special case + in **Check** (modes can now declare `star_imports`, and the micro:bit plugin + does), unused REPL and file-system hooks, about 35 icon files that were never + loaded, the unused `nudatus` and `semver` dependencies, and obsolete + translations of strings Nu no longer has. + ## 2.0.0 The first stable release of **Nu**, a maintained continuation of the diff --git a/CLAUDE.md b/CLAUDE.md index 4932becb1..52b4edb55 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -48,7 +48,7 @@ Most workflows go through the `Makefile` (which delegates to `make.py`): ``` QT_QPA_PLATFORM=offscreen LANG=en_GB.utf8 uv run --no-sync pytest -q --random-order-bucket=none ``` -(On a box where `/tmp` is mounted noexec, add `--basetemp=$HOME/.cache/nu-pytest/bt`: one test builds and runs a real venv in its `tmp_path`.) Current green baseline (Python 3.11 + PyQt6, with `--all-extras` so the opt-in micro:bit plugin is installed): **1638 passed, 20 skipped** (counts can shift by one between Python versions). The test session is **isolated**: before anything imports `mu`, the root `conftest.py` sets `MU_DATA_DIR`, `MU_HOME_DIR` (both honoured by `mu/config.py`) and `IPYTHONDIR` to a throwaway folder and gives the single-instance lock its own name, so tests never touch the real `~/.local/share/mu`, `~/mu_code` or IPython profile, and they run fine while a real Nu is open (`tests/test_config.py` checks this). Every test file passes on its own and in `--random-order`; autouse fixtures fail a test that really quits the `QApplication` (patch `QCoreApplication.exit`) and restore `sys.excepthook`/`threading.excepthook`. On a headless box without Mesa, Qt6's `offscreen` plugin still needs `libEGL.so.1` — put it on `LD_LIBRARY_PATH` (e.g. `apt-get download libegl1 libglvnd0 && dpkg -x` into a local dir). Lint the project's way with `uv run --no-sync python -m ruff check` and reformat with `... ruff format` (config in `pyproject.toml` `[tool.ruff]`; the gettext `_` builtin is declared there as `builtins = ["_"]`, so no env var dance is needed). +(On a box where `/tmp` is mounted noexec, add `--basetemp=$HOME/.cache/nu-pytest/bt`: one test builds and runs a real venv in its `tmp_path`.) Current green baseline (Python 3.11 + PyQt6, with `--all-extras` so the opt-in micro:bit plugin is installed): **1778 passed, 20 skipped** (counts can shift by one between Python versions). The test session is **isolated**: before anything imports `mu`, the root `conftest.py` sets `MU_DATA_DIR`, `MU_HOME_DIR` (both honoured by `mu/config.py`) and `IPYTHONDIR` to a throwaway folder and gives the single-instance lock its own name, so tests never touch the real `~/.local/share/mu` (the log follows `MU_DATA_DIR` too), `~/mu_code` or IPython profile, and they run fine while a real Nu is open (`tests/test_config.py` checks this). Every test file passes on its own and in `--random-order`; autouse fixtures fail a test that really quits the `QApplication` (patch `QCoreApplication.exit`) and restore `sys.excepthook`/`threading.excepthook`. On a headless box without Mesa, Qt6's `offscreen` plugin still needs `libEGL.so.1` — put it on `LD_LIBRARY_PATH` (e.g. `apt-get download libegl1 libglvnd0 && dpkg -x` into a local dir). Lint the project's way with `uv run --no-sync python -m ruff check` and reformat with `... ruff format` (config in `pyproject.toml` `[tool.ruff]`; the gettext `_` builtin is declared there as `builtins = ["_"]`, so no env var dance is needed). Test layout mirrors the source tree: `tests/test_logic.py` tests `mu/logic.py`, `tests/modes/` tests `mu/modes/`, etc.; each bundled plugin's tests are in `plugins//tests/`. Shared autouse fixtures (QApplication, no autosave, temp drop-in plugins dir, plugin error handler and plugin image registry resets, the quit and exception-hook guards) and the session isolation are in the root `conftest.py`. @@ -64,7 +64,7 @@ Mu is a **modal editor**: a fixed core of always-available features, plus a set - **`mu/interface/`** — the Qt view layer. `interface/main.py` defines the **`Window`** class (the `view` the `Editor` drives). `editor.py` is the Scintilla-based text widget, `panes.py` the REPL/process-output/plotter panes, `dialogs.py` dialogs, `themes.py` the day/night/contrast stylesheets, `widgets.py` small shared widgets. -- **`mu/modes/`** — every mode subclasses **`BaseMode`** in `modes/base.py` (MicroPython-family modes subclass `MicroPythonMode`, which adds REPL/serial plumbing). A mode declares `name`, `description`, `icon`, and implements `actions()` (toolbar buttons), `api()` (autocomplete/calltip data), `workspace_dir()`, etc.; `uses_user_environment` (admin dialog env/packages tabs) and `ensure_workspace_assets(wd)` (called for every mode at startup) replace what used to be hardcoded per mode name — the core must not name plugin modes. New modes should be plugins (`docs/plugins.md`, template `plugins/example/`); a core mode is registered in `app.py` and `modes/__init__.py`. `modes/api/` holds generated API stubs (excluded from ruff, as are `plugins/*/nu_*/api`). +- **`mu/modes/`** — every mode subclasses **`BaseMode`** in `modes/base.py` (MicroPython-family modes subclass `MicroPythonMode`, which adds REPL/serial plumbing). A mode declares `name`, `description`, `icon`, and implements `actions()` (toolbar buttons), `api()` (autocomplete/calltip data), `workspace_dir()`, etc.; `uses_user_environment` (admin dialog env/packages tabs), `ensure_workspace_assets(wd)` (called the first time the mode is used in a session) and `star_imports` (module -> names its `import *` brings in, for Check) replace what used to be hardcoded per mode name — the core must not name plugin modes. New modes should be plugins (`docs/plugins.md`, template `plugins/example/`); a core mode is registered in `app.py` and `modes/__init__.py`. `modes/api/` holds generated API stubs (excluded from ruff, as are `plugins/*/nu_*/api`). - **`mu/virtual_environment.py`** — Mu manages a **separate "user" virtualenv** (the `venv` singleton at module bottom) into which it installs third-party packages requested from the UI, isolated from Mu's own environment. Since Phase 4a it is driven by **uv**: `find_uv()` locates the binary (`MU_UV` → `uv` on `PATH` → the bundled `uv` wheel), `create_venv` builds it from the CPython bundled in installers (`mu/wheels/python/`, extracted once by `ensure_bundled_python` into `DATA_DIR/python/`; builds an upgrade left behind are deleted at startup by `remove_old_bundled_pythons` unless the env's `pyvenv.cfg` points into them) with `--seed --no-index`, so first launch is offline (dev checkouts without the bundle fall back to `uv venv --python --seed`), `Uv` wraps `uv pip`/`uv run` via `QProcess`, and `activation_vars()` activates the env for spawned user code (Run and the Jupyter kernel). Since Phase 4b (part 1) the env is **visible**: every uv command goes through `Uv` (`run_blocking`/`run`/`run_subprocess`/`script_command`), which records it in the GUI-free `mu/command_log.py` ("What Nu ran" on the admin dialog's Environment tab, and INFO in the log) — don't call uv around it; the status bar shows `Environment: · Python X.Y` in modes with `uses_user_environment`; and `mu/script_metadata.py` (PEP 723) makes the Python 3 Run use `uv run --python --script ` for files with a `# /// script` block (see `docs/environment.md`). Bundled wheels live in `mu/wheels/` (`python -m mu.wheels --package` fetches them for installers): `wheels.baseline_packages()` = the core's `mode_packages` (ipykernel) + each installed plugin's `learner-env` extra, read from package metadata (`plugin_packages()`), never by importing the plugin. diff --git a/Makefile b/Makefile index f7acf63aa..dd9126240 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ GREP_T_FLAG := $(shell test $$(uname) = Linux && echo -T) all: @echo "\nThere is no default Makefile target right now. Try:\n" - @echo "make run - run the local development version of Mu." + @echo "make run - run the local development version of Nu." @echo "make clean - reset the project and remove auto-generated assets." @echo "make lint - run the ruff code checker." @echo "make test - run the test suite." @@ -18,12 +18,11 @@ all: @echo "make docs-serve - serve the documentation locally with live reload." @echo "make translate_begin LANG=xx_XX - create/update a mu.po file for translation." @echo "make translate_done LANG=xx_XX - compile translation strings in mu.po to mu.mo file." - @echo "make translate_test LANG=xx_XX - run translate_done and launch Mu in the given LANG." + @echo "make translate_test LANG=xx_XX - run translate_done and launch Nu in the given LANG." @echo "make translate_status - show how complete each translation is." @echo "make win64 - build a 64bit Windows MSI installer (Briefcase)." @echo "make macos - build a macOS native application (Briefcase)." @echo "make linux - build a Linux AppImage (Briefcase)." - @echo "make video - create an mp4 video representing code commits.\n" clean: rm -rf build @@ -34,8 +33,6 @@ clean: rm -rf site rm -rf .pytest_cache rm -rf lib - rm -rf *.mp4 - rm -rf .git/avatar/* find . \( -name '*.py[co]' -o -name dropin.cache \) -delete find . \( -name '*.bak' -o -name dropin.cache \) -delete find . \( -name '*.tgz' -o -name dropin.cache \) -delete @@ -45,7 +42,7 @@ clean: run: clean ifeq ($(VIRTUAL_ENV),) - @echo "\n\nCannot run Mu. Your Python virtualenv is not activated." + @echo "\n\nCannot run Nu. Your Python virtualenv is not activated." else python run.py endif @@ -123,8 +120,3 @@ linux: check @echo "\nBuilding Linux AppImage (Briefcase)." python make.py linux -video: clean - @echo "\nFetching contributor avatars." - python utils/avatar.py - @echo "\nMaking video of source commits." - gource --user-image-dir .git/avatar/ --title "The Making of Mu" --logo docs/icon_small.png --font-size 24 --file-idle-time 0 --key -1280x720 -s 0.1 --auto-skip-seconds .1 --multi-sampling --stop-at-end --hide mouse,progress --output-ppm-stream - --output-framerate 30 | ffmpeg -y -r 30 -f image2pipe -vcodec ppm -i - -b 65536K movie.mp4 diff --git a/docs/copyright.md b/docs/copyright.md index edcd23cac..bcab4d597 100644 --- a/docs/copyright.md +++ b/docs/copyright.md @@ -108,7 +108,11 @@ status, with these notes: behind as unused files in `mu/resources/images`; the micro:bit plugin moved them in (the Flash icon renamed from `flash`), byte-for-byte identical to upstream Mu's, so they carry Mu's copyright and licence, nothing new. -* **The Python logo** (`python.png`, `python.svg`): see python.png above. +* **The Python logo** (`python.svg`): see python.png above. +* **Nu's own artwork.** The app icon (`icon.png`, and `package/icons` for the + installers) is Nu's, not Mu's. The splash screens (`splash_screen.png`, + `splash_fail.png`) and the Mode button (`modes.png`) are drawn from it by + `utils/make_artwork.py`, replacing Mu's logo artwork. ## Mu's design archive diff --git a/docs/modes.md b/docs/modes.md index 953d76601..cd8a59825 100644 --- a/docs/modes.md +++ b/docs/modes.md @@ -218,6 +218,9 @@ which may be of value for you to change are: (CircuitPython sets it: a board restarts whenever a file on it is saved). * `builtins` -- a list of strings defining symbols that Nu's code checker must assume are builtins (above and beyond Python's standard builtins). +* `star_imports` -- a dict mapping a module to the names its `import *` brings + in (the micro:bit lists `from microbit import *`'s). The code checker reads + such an import as naming them, so it can still spot undefined names. * `module_names` -- the module names the learner mustn't use for their own files, because they'd hide a real module (CircuitPython lists the modules built into CircuitPython). diff --git a/docs/plugins.md b/docs/plugins.md index ef6186368..fe46935d4 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -409,6 +409,7 @@ Two more things a mode can declare (new in 0.2): | Member | Meaning | |---|---| +| `star_imports = {}` | A dict mapping a module to the names its `import *` brings in (the micro:bit lists `from microbit import *`'s). **Check** reads such an import as naming them, so it can still spot undefined names. | | `uses_user_environment = False` | Set it to `True` if the mode runs the learner's programs in Nu's Python environment (as Python 3 and Pygame Zero do). The admin dialog then shows that environment's variables and third-party packages. | | `ensure_workspace_assets(workspace_dir)` | Called the first time the mode is used each time Nu runs (including the mode Nu starts in), once the workspace exists; a mode the learner doesn't use leaves the workspace alone. Put what the mode needs there (Pygame Zero makes its `images`, `fonts`, `sounds` and `music` folders and copies in demo files). Leave anything already there alone. Errors are reported like any other plugin error and don't stop Nu starting. | diff --git a/make.py b/make.py index 54737ad7d..d8bda41e3 100644 --- a/make.py +++ b/make.py @@ -8,7 +8,7 @@ PYTEST = "pytest" RUFF = "ruff" -# Paths ruff lints and formats. Excludes (mu/contrib, the API stubs, docs) are +# Paths ruff lints and formats. Excludes (the API stubs, docs) are # configured in pyproject.toml's [tool.ruff]. RUFF_TARGETS = [ "make.py", @@ -26,7 +26,6 @@ EXCLUDE_PATTERNS = { "build/*", "docs/*", - "mu/contrib/*", "mu/modes/api/*", "utils/*", } @@ -179,11 +178,9 @@ def clean(): _rmtree("site") # MkDocs build output _rmtree(".pytest_cache") _rmtree("lib") - _rmtree(".git/avatar/") # Created with `make video` # TODO: recursive __pycache__ directories _rmfiles(".", ".coverage") _rmfiles(".", "*.egg-info") - _rmfiles(".", "*.mp4") # Created with `make video` _rmfiles(".", "*.pyc") _rmfiles("mu/locale", "*.pot") _rmfiles("mu/wheels", "*.zip") @@ -229,6 +226,10 @@ def translate_begin(lang=""): mu_po_filename, "--locale={locale}".format(locale=lang), ] + if update: + # Don't keep translations of strings Nu no longer has (#~ entries): + # git keeps the history, see utils/recover_renamed_translations.py. + cmd.append("--ignore-obsolete") result = subprocess.run(cmd).returncode print( @@ -244,7 +245,6 @@ def translate_begin(lang=""): _TRANSLATE_IGNORE_DIRNAMES = { os.path.join("mu", "modes", "api"), - os.path.join("mu", "contrib"), } # Bundled plugins use Nu's own message catalog, so their packages are # extracted too (but not their API stubs or tests). @@ -345,7 +345,7 @@ def translate_status(): @export def translate_test(lang=""): - """Run translate_done and launch Mu in the given LANG.""" + """Run translate_done and launch Nu in the given LANG.""" result = translate_done(lang) if result != 0: raise RuntimeError("Failed compiling the mu.po file.") @@ -357,10 +357,10 @@ def translate_test(lang=""): @export def run(): - """Run Mu from within a virtual environment""" + """Run Nu from within a virtual environment""" clean() if not os.environ.get("VIRTUAL_ENV"): - raise RuntimeError("Cannot run Mu;your Python virtualenv is not activated") + raise RuntimeError("Cannot run Nu; your Python virtualenv is not activated") return subprocess.run([sys.executable, "-m", "mu"]).returncode diff --git a/mu/contrib/__init__.py b/mu/contrib/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/mu/interface/dialogs.py b/mu/interface/dialogs.py index 39dffee07..58254ab5a 100644 --- a/mu/interface/dialogs.py +++ b/mu/interface/dialogs.py @@ -1358,7 +1358,6 @@ def setup( settings, packages, mode, - device_list, environment=None, focus=None, plugins=None, diff --git a/mu/interface/editor.py b/mu/interface/editor.py index eeb6ba997..06ccf84d2 100644 --- a/mu/interface/editor.py +++ b/mu/interface/editor.py @@ -435,33 +435,6 @@ def show_annotations(self): # aren't ints, so pass its value to keep the same style. self.annotate(line, text, self.annotationDisplay().value) - def find_next_match( - self, - text, - from_line=-1, - from_col=-1, - case_sensitive=True, - wrap_around=True, - ): - """ - Finds the next text match from the current cursor, or the given - position, and selects it (the automatic selection is the only available - QsciScintilla behaviour). - Returns True if match found, False otherwise. - """ - return self.findFirst( - text, # Text to find, - False, # Treat as regular expression - case_sensitive, # Case sensitive search - True, # Whole word matches only - wrap_around, # Wrap search - forward=True, # Forward search - line=from_line, # -1 starts at current position - index=from_col, # -1 starts at current position - show=False, # Unfolds found text - posix=False, - ) # More POSIX compatible RegEx - def range_from_positions(self, start_position, end_position): """Given a start-end pair, such as are provided by a regex match, return the corresponding Scintilla line-offset pairs which are diff --git a/mu/interface/main.py b/mu/interface/main.py index 9b0426cc9..5ed92d64d 100644 --- a/mu/interface/main.py +++ b/mu/interface/main.py @@ -949,7 +949,6 @@ def show_admin( settings, packages, mode, - device_list, environment=None, focus=None, plugins=None, @@ -970,7 +969,6 @@ def show_admin( settings, packages, mode, - device_list, environment=environment, focus=focus, plugins=plugins, diff --git a/mu/interface/panes.py b/mu/interface/panes.py index 0d3cc8558..7811d616e 100644 --- a/mu/interface/panes.py +++ b/mu/interface/panes.py @@ -697,9 +697,6 @@ def stop_process(self): self.process.waitForFinished() self.running = False - def _del_(self): - self.stop_process() - def finished(self, code, status): """ Handle when the child process finishes. diff --git a/mu/locale/de_DE/LC_MESSAGES/mu.po b/mu/locale/de_DE/LC_MESSAGES/mu.po index b9fed05fe..1435a1029 100644 --- a/mu/locale/de_DE/LC_MESSAGES/mu.po +++ b/mu/locale/de_DE/LC_MESSAGES/mu.po @@ -1613,528 +1613,3 @@ msgstr "Musik anzeigen, die von Pygame Zero benutzt wird." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Pygame Zero Spiel beenden." - -#~ msgid "Logging to {}" -#~ msgstr "Protokolliere nach {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "" -#~ "Debugger benötigt zum Ausführen einen " -#~ "Dateinamen zu einem Python Skript." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Dateien auf Ihrem micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Ihr Skript ist zu lang!" - -#~ msgid " Runtime: {}" -#~ msgstr " Runtime: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Python-Code vor dem Flashen verkleinern?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Überschreibe die eingebaute MicroPython " -#~ "Runtime mit der nachfolgenden hex Datei" -#~ " (leer benutzt den Standardwert):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit Einstellungen" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Dateisystem auf micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Datei existiert bereits; Überschreiben?" - -#~ msgid "File already exists" -#~ msgstr "Datei existiert bereits" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Kopiere '{}' nach micro:bit." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}\" erfolgreich auf den micro:bit kopiert." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Löschen (kann nicht rückgängig gemacht werden)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Lösche '{}' vom micro:bit." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' erfolgreich vom micro:bit gelöscht." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Lade '{}' vom micro:bit. Kopiere nach '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' erfolgreich vom micro:bit auf Ihren Rechner kopiert." - -#~ msgid "Open in Mu" -#~ msgstr "In Mu öffnen" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Öffne '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Dateien auf Ihrem Rechner:" - -#~ msgid "Files on your computer:" -#~ msgstr "Dateien auf Ihrem Rechner:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Beim Laden der Liste der Dateien " -#~ "auf dem micro:bit ist ein Problem " -#~ "aufgetreten. Prüfe das Protokoll von Mu" -#~ " für technische Informationen. Alternativ, " -#~ "versuche Deinen micro:bit aus und wieder" -#~ " einzustecken und/oder Mu neuzustarten." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Beim Kopieren von '{}' auf den " -#~ "micro:bit ist ein Problem aufgetreten. " -#~ "Prüfe das Protokoll von Mu für " -#~ "mehr Informationen." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Beim Löschen von '{}' vom micro:bit " -#~ "ist ein Problem aufgetreten. Prüfe das" -#~ " Protokoll von Mu für mehr " -#~ "Informationen." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Beim Laden von '{}' vom micro:bit " -#~ "ist ein Problem aufgetreten. Prüfe das" -#~ " Protokoll von Mu für mehr " -#~ "Informationen." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Konnte die MicroPython runtime nicht finden." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Die angegebene micro:bit runtime ('{}') " -#~ "existiert nicht. Bitte versuche es " -#~ "erneut." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Dateien" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Zugriff auf das Dateisystem des micro:bit." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "REPL benutzen, um live auf dem micro:bit zu programmieren." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL und Dateisystem funktionieren nicht gleichzeitig." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "Der REPL und das Dateisystem nutzen " -#~ "die gleiche USB-Seriell-Verbindung. Zu" -#~ " jedem Zeitpunkt kann nur eins davon" -#~ " aktiv sein. Schalte das Dateisystem " -#~ "aus und probiere es erneut." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Der Plotter und das Dateisystem funktionieren nicht zur gleichen Zeit." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Das Dateisystem und der REPL und " -#~ "Plotter nutzen die gleiche USB-" -#~ "Seriell-Verbindung. Zu jedem Zeitpunkt kann" -#~ " nur eins davon aktiv sein. Schalte" -#~ " den REPL und Plotter aus und " -#~ "versuche es erneut." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Dateisystem funktioniert nicht gleichzeitig zum REPL oder Plotter." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Das Dateisystem und der REPL und " -#~ "Plotter nutzen die gleiche USB-" -#~ "Seriell-Verbindung. Schalte den REPL und" -#~ " Plotter aus und versuche es erneut." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Konnte kein angeschlossenes Gerät finden." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Bitte stelle sicher, dass das Gerät " -#~ "an den Computer angeschlossen ist.\n" -#~ "\n" -#~ "Das Gerät muss MicroPython aufgespielt " -#~ "haben bevor das Dateisystem funktioniert.\n" -#~ "" -#~ "\n" -#~ "Drücke den Reset Knopf des Gerätes " -#~ "und warte einige Sekunden bevor Du " -#~ "es erneut versuchst." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "MicroPython für den BBC micro:bit schreiben." - -#~ msgid "Flash" -#~ msgstr "Aufspielen" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Code auf den micro:bit aufspielen." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Zugriff auf das Dateisystem des micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "REPL benutzen, um live auf dem micro:bit zu programmieren." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ihr Skript ist zu lang und der Minifier ist nicht verfügbar" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ihr Skript ist zu lang und der Minifier ist nicht verfügbar" - -#~ msgid "Problem minifying script" -#~ msgstr "Problem mit dem Skript" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Der Minifier wurde ausgeführt, aber das Skript ist zu lang!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Konnte nicht aufspielen: \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Konnte den angeschlossenen BBC micro:bit nicht finden." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Bitte stelle sicher, dass du genug " -#~ "Zeit lässt damit der BBC micro:bit " -#~ "korrekt vom Computer konfiguriert werden " -#~ "kann. Dies kann einige Sekunden dauern." -#~ " Alternativ, versuche das Gerät aus- " -#~ "und wieder einzustecken oder Änderungen " -#~ "zu speichern und Mu neu zu " -#~ "starten, falls das Gerät weiterhin nicht" -#~ " gefunden wird." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Nicht unterstützter BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Dein Gerät ist neuer als diese " -#~ "Version von Mu. Bitte installiere die" -#~ " neuste Version von Mu um dieses " -#~ "Gerät zu benuzten.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Spiele \"{}\" auf den micro:bit auf." - -#~ msgid "Runtime" -#~ msgstr "Unbenannt" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Code auf den micro:bit kopiert." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Beim Aufspielen auf den micro:bit ist ein Problem aufgetreten." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Bitte entferne das Gerät erst wenn " -#~ "das Aufspielen abgeschlossen ist. Überprüfe" -#~ " das Protokoll für mehr Informationen." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Benutze CircuitPython auf einem Adafruit board." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Konnte kein angeschlossenes Gerät finden." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Python-Dateien für Adafruit CircuitPython " -#~ "Geräte werden auf dem Gerät gespeichert." -#~ " Um diese Dateien zu bearbeiten muss" -#~ " das Gerät angeschlossen sein. Bis " -#~ "ein Gerät angeschlossen ist, wird Mu " -#~ "diesen Ordner benuzten:\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "um Deinen Code zu speichern." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Hilfe für Mu in einem Browser anzeigen." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/es/LC_MESSAGES/mu.po b/mu/locale/es/LC_MESSAGES/mu.po index 9a874e0e9..d9890197f 100644 --- a/mu/locale/es/LC_MESSAGES/mu.po +++ b/mu/locale/es/LC_MESSAGES/mu.po @@ -1599,538 +1599,3 @@ msgstr "Muestra la música utilizada por Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Detén tu juego de Pygame Zero." - -#~ msgid "Logging to {}" -#~ msgstr "Registrando en {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "" -#~ "Para ejecutar el depurador, el script" -#~ " de Python requiere un nombre de " -#~ "archivo." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Archivos en tu micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}: {}]" - -#~ msgid "Your script is too long!" -#~ msgstr "¡Tu script es demasiado largo!" - -#~ msgid " Runtime: {}" -#~ msgstr " Interprete: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "¿Reducir el código Python antes de programar?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Reemplazar el interpretador de MicroPython " -#~ "incorporado en Mu con el siguiente " -#~ "archivo hex (vacío significa usar el " -#~ "valor predeterminado):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Configuración de BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Sistema de archivos en micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "El archivo ya existe; ¿Quieres sobrescribirlo?" - -#~ msgid "File already exists" -#~ msgstr "El archivo ya existe" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Copiando '{}' a micro:bit." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' copiado con éxito al micro:bit." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Eliminar (no se puede deshacer)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Eliminando '{}' del micro:bit." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' eliminado correctamente del micro:bit." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Obteniendo '{}' del micro:bit. Copiando a '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' copiado con éxito del micro:bit a tu ordenador." - -#~ msgid "Open in Mu" -#~ msgstr "Abrir en Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Abriendo '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Archivos en tu ordenador:" - -#~ msgid "Files on your computer:" -#~ msgstr "Archivos en tu ordenador:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Hubo un problema al obtener la " -#~ "lista de archivos del micro:bit. Por " -#~ "favor revisa los registros de Mu " -#~ "para obtener información técnica. " -#~ "Alternativamente, intenta desconectar y " -#~ "conectar su micro:bit y/o reiniciar Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Hubo un problema al copiar el " -#~ "archivo '{}' a el micro:bit. Por " -#~ "favor revisa los registros de Mu " -#~ "para obtener más información." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Hubo un problema al eliminar '{}' " -#~ "del micro:bit. Por favor revisa los " -#~ "registros de Mu para obtener más " -#~ "información." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Hubo un problema al obtener '{}' " -#~ "del micro:bit. Por favor revisa los " -#~ "registros de Mu para obtener más " -#~ "información." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "No se pudo encontrar el inteprete de MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "El interprete para micro:bit especificado " -#~ "(‘{}’) no existe. Por favor inténtalo" -#~ " de nuevo." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Archivos" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Accede al sistema de archivos en el micro:bit." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Usa el REPL para programar en vivo en el micro:bit." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "El REPL y el sistema de archivos no pueden funcionar al mismo tiempo." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "El REPL y el sistema de archivos" -#~ " usan la misma conexión serial de " -#~ "USB. Solo uno puede estar activo " -#~ "en cualquier momento. Apaga el sistema" -#~ " de archivos e inténtalo de nuevo." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "" -#~ "El trazador y el sistema de " -#~ "archivos no pueden funcionar al mismo" -#~ " tiempo." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "El trazador y el sistema de " -#~ "archivos utilizan la misma conexión " -#~ "serial USB. Solo uno puede estar " -#~ "activo al mismo tiempo. Apaga el " -#~ "sistema de archivos e inténtalo de " -#~ "nuevo." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "El sistema de archivos no puede " -#~ "funcionar al mismo tiempo que el " -#~ "REPL o trazador." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "El sistema de archivos, el REPL y" -#~ " el trazador usan la misma conexión" -#~ " serial de USB. Cierra el REPL " -#~ "y el trazador e inténtalo de " -#~ "nuevo." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "No se pudo encontrar un dispositivo conectado." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Asegúrate de que el dispositivo esta conectado a este ordenador.\n" -#~ "\n" -#~ "El dispositivo debe tener MicroPython " -#~ "programado antes de que el sistema " -#~ "de archivos funcione.\n" -#~ "\n" -#~ "Por último, presiona el botón de " -#~ "reinicio del dispositivo y espera unos" -#~ " segundos antes de volver a " -#~ "intentarlo." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Escribe MicroPython para BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Flash" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Programa tu código en el micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Accede al sistema de archivos en el micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Usa el REPL para programar en vivo en el micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Tu script es demasiado largo y el minificador no está disponible" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Tu script es demasiado largo y el minificador no está disponible" - -#~ msgid "Problem minifying script" -#~ msgstr "Problema con el script" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "¡Nuestro minificador lo intentó pero tu script es demasiado largo!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "No se puede programar \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "No se pudo encontrar un BBC micro:bit conectado." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Asegúrate de dejar tiempo suficiente " -#~ "para que el BBC micro:bit se " -#~ "conecte y sea configurado correctamente " -#~ "por tu ordenador. Esto puede tomar " -#~ "varios segundos. Alternativamente, si el " -#~ "dispositivo sigue sin descubrirse intenta " -#~ "desconectar y volver a conectarlo, o " -#~ "guarda tu trabajo y reinicia Mu." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "BBC micro:bit no soportado." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Tu dispositivo es mas nuevo que " -#~ "esta versión de Mu. Por favor, " -#~ "actualiza a la ultima versión de " -#~ "Mu soportar este dispositvo.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Programando \"{}\" en el micro:bit." - -#~ msgid "Runtime" -#~ msgstr "sin titulo" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Código copiado al micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Hubo un problema al programar el micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Por favor, no desconectes el dispositivo" -#~ " hasta que la programación se haya" -#~ " completado. Por favor revisa los " -#~ "registros para más información." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Usa la linea de placas CircuitPython de Adafruit." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "No se pudo encontrar un dispositivo conectado." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Los archivos Python para Adafruit " -#~ "CircuitPython se almacenan en el " -#~ "dispositivo. Por lo tanto, para editar" -#~ " estos archivos, debes tener el " -#~ "dispositivo conectado. Hasta que no " -#~ "conectes uno, Mu usará este directorio:" -#~ "\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "... para almacenar su código." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Mostrar ayuda de Mu en un navegador." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/fr/LC_MESSAGES/mu.po b/mu/locale/fr/LC_MESSAGES/mu.po index 17d1c3fab..8a228e439 100644 --- a/mu/locale/fr/LC_MESSAGES/mu.po +++ b/mu/locale/fr/LC_MESSAGES/mu.po @@ -1603,898 +1603,3 @@ msgstr "Montre les musiques utilisées par Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Arrête ton jeu Pygame Zero." - -#~ msgid "Please do not disconnect the device until flashing has completed." -#~ msgstr "" -#~ "Merci de ne pas déconnecté le " -#~ "périphérique tant que le flashage n'est" -#~ " pas terminé." - -#~ msgid "Builtins" -#~ msgstr "Intégrations" - -#~ msgid "Module level" -#~ msgstr "Niveau du module" - -#~ msgid "%b %d, %Y" -#~ msgstr "%d %b %Y" - -#~ msgid "General Index" -#~ msgstr "Index Général" - -#~ msgid "index" -#~ msgstr "index" - -#~ msgid "next" -#~ msgstr "suivant" - -#~ msgid "previous" -#~ msgstr "précédent" - -#~ msgid " (in " -#~ msgstr " (dans " - -#~ msgid "Section author: " -#~ msgstr "Auteur de la section: " - -#~ msgid "Module author: " -#~ msgstr "Auteur du module: " - -#~ msgid "Code author: " -#~ msgstr "Auteur du code: " - -#~ msgid "Author: " -#~ msgstr "Auteur: " - -#~ msgid "%s %s" -#~ msgstr "%s %s" - -#~ msgid "%s (C function)" -#~ msgstr "%s (fonction C)" - -#~ msgid "%s (C member)" -#~ msgstr "%s (membre C)" - -#~ msgid "%s (C macro)" -#~ msgstr "%s (macro C)" - -#~ msgid "%s (C type)" -#~ msgstr "%s (type C)" - -#~ msgid "%s (C variable)" -#~ msgstr "%s (variable C)" - -#~ msgid "%s (C++ type)" -#~ msgstr "%s (type C++)" - -#~ msgid "%s (C++ concept)" -#~ msgstr "%s (concept C++)" - -#~ msgid "%s (C++ member)" -#~ msgstr "%s (membre C++)" - -#~ msgid "%s (C++ function)" -#~ msgstr "%s (fonction C++)" - -#~ msgid "%s (C++ class)" -#~ msgstr "%s (classe C++)" - -#~ msgid "%s (C++ enum)" -#~ msgstr "%s (énum C++)" - -#~ msgid "%s (C++ enumerator)" -#~ msgstr "%s (énumerateur C++)" - -#~ msgid "%s() (built-in function)" -#~ msgstr "%s() (fonction intégrée)" - -#~ msgid "%s() (%s method)" -#~ msgstr "%s() (méthode %s)" - -#~ msgid "%s() (class)" -#~ msgstr "%s() (classe)" - -#~ msgid "%s (global variable or constant)" -#~ msgstr "%s (variable globale ou constante)" - -#~ msgid "%s (%s attribute)" -#~ msgstr "%s ( attribut %s)" - -#~ msgid "%s (module)" -#~ msgstr "%s (module)" - -#~ msgid "%s() (in module %s)" -#~ msgstr "%s() (dans le module %s)" - -#~ msgid "%s (built-in variable)" -#~ msgstr "%s (built-in variable)" - -#~ msgid "%s (in module %s)" -#~ msgstr "%s (dans le module %s)" - -#~ msgid "%s (built-in class)" -#~ msgstr "%s (classe intégrée)" - -#~ msgid "%s (class in %s)" -#~ msgstr "%s (classe dans %s)" - -#~ msgid "%s() (%s.%s method)" -#~ msgstr "%s() (méthode %s.%s)" - -#~ msgid "%s() (%s.%s static method)" -#~ msgstr "%s() (méthode statique %s.%s)" - -#~ msgid "%s() (%s static method)" -#~ msgstr "%s() (méthode statique %s)" - -#~ msgid "%s() (%s.%s class method)" -#~ msgstr "%s() (méthode de classe %s.%s)" - -#~ msgid "%s() (%s class method)" -#~ msgstr "%s() (méthode de classe %s)" - -#~ msgid "%s (%s.%s attribute)" -#~ msgstr "%s (attribut %s.%s)" - -#~ msgid "Deprecated" -#~ msgstr "Obsolète" - -#~ msgid " (deprecated)" -#~ msgstr "(obsolète)" - -#~ msgid "%s (directive)" -#~ msgstr "%s (directive)" - -#~ msgid "%s (role)" -#~ msgstr "%s (role)" - -#~ msgid "environment variable; %s" -#~ msgstr " variable d'environnement; %s" - -#~ msgid "%scommand line option; %s" -#~ msgstr "%s option de la ligne de commande; %s" - -#~ msgid "see %s" -#~ msgstr "voir %s" - -#~ msgid "see also %s" -#~ msgstr "voir aussi %s" - -#~ msgid "Symbols" -#~ msgstr "Symboles" - -#~ msgid "Bases: %s" -#~ msgstr "Bases: %s" - -#~ msgid "alias of :class:`%s`" -#~ msgstr "alias de la :classe:`%s`" - -#~ msgid "missing '+' or '-' in '%s' option." -#~ msgstr "'+' ou '-' manquants dans l'option '%s'." - -#~ msgid "'%s' is not a valid option." -#~ msgstr "'%s' n'est pas une option valide." - -#~ msgid "'%s' is not a valid pyversion option" -#~ msgstr "'%s' n'est pas une option pyversion valide" - -#~ msgid "[graph: %s]" -#~ msgstr "[graphe: %s]" - -#~ msgid "[graph]" -#~ msgstr "[graphe]" - -#~ msgid "Permalink to this equation" -#~ msgstr "Permalien vers cette équation" - -#~ msgid "(in %s v%s)" -#~ msgstr "(dans %s v%s)" - -#~ msgid "(in %s)" -#~ msgstr "(dans %s)" - -#~ msgid "[source]" -#~ msgstr "[source]" - -#~ msgid "Todo" -#~ msgstr "AFaire" - -#~ msgid "<>" -#~ msgstr "<>" - -#~ msgid "(The <> is located in %s, line %d.)" -#~ msgstr "(L' <> est située dans %s, ligne %d.)" - -#~ msgid "original entry" -#~ msgstr "entrée originale" - -#~ msgid "[docs]" -#~ msgstr "[docs]" - -#~ msgid "Module code" -#~ msgstr "Code du module" - -#~ msgid "

Source code for %s

" -#~ msgstr "

Code source de %s

" - -#~ msgid "Overview: module code" -#~ msgstr "Généralités: code du module" - -#~ msgid "

All modules for which code is available

" -#~ msgstr "

Tous les modules pour lesquels le code est disponible

" - -#~ msgid "Python Enhancement Proposals; PEP %s" -#~ msgstr "Propositions d'Amélioration de Python; PEP %s" - -#~ msgid "Permalink to this definition" -#~ msgstr "Permalien vers cette définition" - -#~ msgid "Permalink to this headline" -#~ msgstr "Permalien vers cet entête" - -#~ msgid "Permalink to this table" -#~ msgstr "Permalien vers ce tableau" - -#~ msgid "Permalink to this code" -#~ msgstr "Permalien vers ce programme" - -#~ msgid "Permalink to this image" -#~ msgstr "Permalien vers cet image" - -#~ msgid "Permalink to this toctree" -#~ msgstr "Permalien vers ce sommaire" - -#~ msgid "Index" -#~ msgstr "Index" - -#~ msgid "Release" -#~ msgstr "Version" - -#~ msgid "continued from previous page" -#~ msgstr "suite de la page précédente" - -#~ msgid "continues on next page" -#~ msgstr "suite sur le page suivante" - -#~ msgid "page" -#~ msgstr "page" - -#~ msgid "Unknown configure key: latex_elements[%r] is ignored." -#~ msgstr "Clé de configuration inconnue: latex_elements[%r] ignorée." - -#~ msgid "Footnotes" -#~ msgstr "Notes de bas de page" - -#~ msgid "[image: %s]" -#~ msgstr "[image: %s]" - -#~ msgid "[image]" -#~ msgstr "[image]" - -#~ msgid "April" -#~ msgstr "Avril" - -#~ msgid "February" -#~ msgstr "Février" - -#~ msgid "January" -#~ msgstr "Janvier" - -#~ msgid "March" -#~ msgstr "Mars" - -#~ msgid "August" -#~ msgstr "Août" - -#~ msgid "July" -#~ msgstr "Juillet" - -#~ msgid "June" -#~ msgstr "Juin" - -#~ msgid "May" -#~ msgstr "Mai" - -#~ msgid "December" -#~ msgstr "Décembre" - -#~ msgid "November" -#~ msgstr "Novembre" - -#~ msgid "October" -#~ msgstr "Octobre" - -#~ msgid "September" -#~ msgstr "Septembre" - -#~ msgid "Monday" -#~ msgstr "Lundi" - -#~ msgid "Thursday" -#~ msgstr "Jeudi" - -#~ msgid "Tuesday" -#~ msgstr "Mardi" - -#~ msgid "Wednesday" -#~ msgstr "Mercredi" - -#~ msgid "Saturday" -#~ msgstr "Samedi" - -#~ msgid "Sunday" -#~ msgstr "Dimanche" - -#~ msgid "%(time)s" -#~ msgstr "%(time)s" - -#~ msgid "yesterday" -#~ msgstr "hier" - -#~ msgid "yesterday at %(time)s" -#~ msgstr "hier à %(time)s" - -#~ msgid "%(weekday)s" -#~ msgstr "%(weekday)s" - -#~ msgid "%(weekday)s at %(time)s" -#~ msgstr "%(weekday)s à %(time)s" - -#~ msgid "%(month_name)s %(day)s" -#~ msgstr "%(day)s %(month_name)s" - -#~ msgid "%(month_name)s %(day)s at %(time)s" -#~ msgstr "%(day)s %(month_name)s à %(time)s" - -#~ msgid "%(month_name)s %(day)s, %(year)s" -#~ msgstr "%(day)s %(month_name)s %(year)s" - -#~ msgid "%(month_name)s %(day)s, %(year)s at %(time)s" -#~ msgstr "%(day)s %(month_name)s %(year)s à %(time)s" - -#~ msgid "%(weekday)s, %(month_name)s %(day)s" -#~ msgstr "%(weekday)s %(day)s %(month_name)s " - -#~ msgid "%(commas)s and %(last)s" -#~ msgstr "%(commas)s et %(last)s" - -#~ msgid "Logging to {}" -#~ msgstr "Logguer dans {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "Le débogueur a besoin que tu nommes le script Python pour se lancer." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Fichiers sur ta micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Ton programme est trop long!" - -#~ msgid " Runtime: {}" -#~ msgstr "Exécution: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Compresser le code Python avant le flasher?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Remplace l'exécutable MicroPython par le " -#~ "fichier hex suivant (vide signifie " -#~ "utilise celui par défaut):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Configuration BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Système de fichier micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Le fichier existe déja: faut-il l'écraser?" - -#~ msgid "File already exists" -#~ msgstr "Le fichier existe déjà" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Copie '{}' sur la micro:bit." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' copié avec succès sur la micro:bit." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Supprimer (retour en arrière impossible)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Supprime '{}' de la micro:bit" - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' supprimé avec succès de la micro:bit." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Récupère '{}' depuis la micro:bit. Copie dans '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' copié avec succès de la micro:bit sur l'ordinateur." - -#~ msgid "Open in Mu" -#~ msgstr "Ouvrir avec Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Ouverture de '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Fichiers sur ton ordinateur:" - -#~ msgid "Files on your computer:" -#~ msgstr "Fichiers sur ton ordinateur:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Un problème est survenu pendant le " -#~ "listage des fichiers sur la micro:bit." -#~ " Merci de vérifier les logs de " -#~ "Mu pour avoir plus d'informations. " -#~ "Sinon, essaie de débrancher/rebrancher ta " -#~ "micro:bit, ou bien de redémarrer Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Un problème est survenu pendant la " -#~ "copie du fichier '{}' sur la " -#~ "micro:bit. Merci de vérifier les logs" -#~ " de Mu pour avoir plus " -#~ "d'informations." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Un problème est survenu pendant la " -#~ "suppression du fichier '{}' de la " -#~ "micro:bit. Merci de vérifier les logs" -#~ " de Mu pour avoir plus " -#~ "d'informations." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Un problème est survenu pendant la " -#~ "lecture du fichier '{}' depuis la " -#~ "micro:bit. Merci de vérifier les logs" -#~ " de Mu pour avoir plus " -#~ "d'informations." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "" -#~ "The file contains characters Mu expects" -#~ " to be encoded as {0} or as " -#~ "the computer's default encoding {1}, but" -#~ " which are encoded in some other " -#~ "way.\n" -#~ "\n" -#~ "If this file was saved in another" -#~ " application, re-save the file via" -#~ " the 'Save as' option and set " -#~ "the encoding to {0}" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Impossible de trouver l'exécutable MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Fichiers" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Accéder au système de fichiers de la micro:bit" - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Utilise le REPL pour programmer directement sur la micro:bit" - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "" -#~ "Le REPL et le système de fichiers" -#~ " ne peuvent pas fonctionner en même" -#~ " temps." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "Le REPL et le système de fichiers" -#~ " utilisent tous les deux la même " -#~ "connexion USB série. Un seul des " -#~ "deux peut être actif à la fois." -#~ " Désactive le système de fichier et" -#~ " ré-essaie." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "" -#~ "Le grapheur et le systèle de " -#~ "fichiers ne peuvent pas fonctionner en" -#~ " même temps." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Le grapheur et le système de " -#~ "fichiers utilisent la même connexion USB" -#~ " série. Un seul des deux peut " -#~ "être active à la fois. Désactive " -#~ "le système de fichiers et essaie à" -#~ " nouveau." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "Le système de fichiers ne peut pas" -#~ " fonctionner en même temps que le " -#~ "REPL ou le grapheur." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Le système de fichiers, le REPL et" -#~ " le grapheur utilisent la même " -#~ "connexion USB série. Désactive le REPL" -#~ " et le grapheur et essaie à " -#~ "nouveau." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Impossible de trouver un périphérique connecté." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Merci de vérifier que le périphérique est connecté à l'ordinateur.\n" -#~ "\n" -#~ "Le périphérique doit avoir MicroPython " -#~ "flashé dessus pour que le système " -#~ "de fichier fonctionne.\n" -#~ "\n" -#~ "Enfin, appuie sur le bouton 'reset' " -#~ "du périphérique et attend quelques " -#~ "secondes avant de ré-essayer." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Ecris un programme MicroPython pour la micro:bit" - -#~ msgid "Flash" -#~ msgstr "Flasher" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Flashe ton programme sur la micro:bit" - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Accéder au système de fichiers de la micro:bit" - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Utilise le REPL pour programmer directement sur la micro:bit" - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ton programme est trop long et le compresseur n'est pas disponible." - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ton programme est trop long et le compresseur n'est pas disponible." - -#~ msgid "Problem minifying script" -#~ msgstr "Problème avec le script" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "On a essayé de le compresser mais ton programme est trop long!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Impossible de flasher \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Impossible de trouver une micro:bit connectée" - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Merci de laisser suffisamment de temps" -#~ " à la micro:bit connectée à ton " -#~ "ordinateur. Ceci peut prendre plusieurs " -#~ "secondes. Si le périphérique n'apparaît " -#~ "toujours pas, essaye de débrancher/rebrancher" -#~ " le périphérique ou d'enregistrer ton " -#~ "travail et redémarrer Mu." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "" - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "En train de flasher \"{}\" sur la micro:bit" - -#~ msgid "Runtime" -#~ msgstr "sans titre" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Flashe ton programme sur la micro:bit" - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Un problème est survenu pendant le flashage de la micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Ne pas déconnecter le périphériques tant" -#~ " que le flashage n'est pas terminé." -#~ " Regarde les logs pour plus " -#~ "d'informations." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Utilise CircuitPython avec la gamme de cartes Adafruit." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Impossible de trouver un périphérique connecté." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Le fichiers Python pour les " -#~ "périphériques Adafruit CircuitPython sont " -#~ "stockés directement sur le périphérique.\n" -#~ "" -#~ "Ainsi, pour pouvoir les modifier il " -#~ "faut avoir un périphérique connecté. En" -#~ " attendant qu'un périphérique soit " -#~ "connecté, Mu utilisera le dossier:\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "... pour ton stocker ton programme." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Montre l'aide à propos de Mu dans un navigateur." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/ja/LC_MESSAGES/mu.po b/mu/locale/ja/LC_MESSAGES/mu.po index d740cf131..732d6ed94 100644 --- a/mu/locale/ja/LC_MESSAGES/mu.po +++ b/mu/locale/ja/LC_MESSAGES/mu.po @@ -1544,461 +1544,3 @@ msgstr "Pygame Zero で使う音楽を表示します。" #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Pygame Zero ゲームを停止します。" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "転送の前に Python コードを縮小しますか?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "組込みの MicroPython ランタイムを以下の hex ファイルで上書きする(空であればデフォルトのものを利用):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "MicroPython をデバイスに転送する方法" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. デバイスタイプを選択(ESP8266 または ESP32)
 2. https://micropython.org/download " -#~ "からファームウェアをダウンロード
 3. デバイスを接続
 4. " -#~ "「ブラウズ」ボタンを使って .bin ファイルを選択
 5. " -#~ "「ファームウェアの消去と転送」を押す" - -#~ msgid "Device:" -#~ msgstr "デバイス:" - -#~ msgid "Choose device type:" -#~ msgstr "デバイス種別の選択:" - -#~ msgid "Firmware (.bin):" -#~ msgstr "ファームウェア(.bin):" - -#~ msgid "Browse" -#~ msgstr "ブラウズ" - -#~ msgid "Erase && write firmware" -#~ msgstr "ファームウェアの消去と転送" - -#~ msgid "Select MicroPython firmware (.bin)" -#~ msgstr "MicroPython ファームウェアの選択(.bin)" - -#~ msgid "Firmware (*.bin)" -#~ msgstr "ファームウェア(.bin)" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit 設定" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "ESP ファームウェア転送" - -#~ msgid "Mu {}" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "ファイルシステム: " - -#~ msgid "Mu" -#~ msgstr "" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "ファイルが既にあります。上書きしますか?" - -#~ msgid "File already exists" -#~ msgstr "ファイルが既にあります" - -#~ msgid "Copying '{}' to device." -#~ msgstr "'{}' をデバイスにコピー中。" - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' のデバイスへのコピーが成功しました。" - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "削除 (元に戻せません)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "デバイスから '{}' を削除中。" - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' をデバイスから削除するのに成功しました。" - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "デバイスから '{}' を取得中。{} にコピー中。" - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "デバイスからコンピュータへの '{}' のコピーが成功しました。" - -#~ msgid "Open in Mu" -#~ msgstr "Mu で開く" - -#~ msgid "Write to main.py on device" -#~ msgstr "main.py をデバイスに書き込む" - -#~ msgid "Opening '{}'" -#~ msgstr "'{}' を読込み中" - -#~ msgid "Files on your device:" -#~ msgstr "デバイスのファイル:" - -#~ msgid "Files on your computer:" -#~ msgstr "コンピュータのファイル:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "デバイス内のファイルのリストを取得する際に問題が発生しました。技術的な情報は Mu " -#~ "のログを確認してください。あるいは、デバイスのプラグを抜き差しするか、Muを再起動してみてください。" - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "デバイスにファイル '{}' をコピーしている際に問題が発生しました。詳しくは Mu のログを確認してください。" - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "デバイス内のファイル '{}' を削除している際にに問題が発生しました。詳しくは Mu のログを確認してください。" - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "デバイス内のファイル '{}' を取得している際に問題が発生しました。詳しくは Mu のログを確認してください。" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "MicroPython ランタイムが見つかりません。" - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "指定した micro:bit ランタイムは存在しません。もう一度やり直してください。" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "ESP8266/ESP32 ボードの MicroPython を編集。" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "REPL を介して {board_name} 上で直にコードを実行します。" - -#~ msgid "Files" -#~ msgstr "ファイル" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "{board_name} にあるファイルにアクセスします。" - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "{board_name} を対話モードで利用します。" - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL とファイルシステムは同時に利用できません。" - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL とファイルシステムはどちらも USB " -#~ "シリアル接続を利用しますが、有効にできるのは常にどちらか一方です。ファイルシステムの利用を止めて、もう一度試してください。" - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "プロッターとファイルシステムは同時に利用できません。" - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "プロッターとファイルシステムはどちらも USB " -#~ "シリアル接続を利用しますが、有効にできるのは常にどちらか一方です。ファイルシステムの利用を止めて、もう一度試してください。" - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "アクティブなエディタタブがなければ何も実行できません。" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "現在開いているタブの内容をデバイスに転送中。タブが何も開かれていないようです。" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "ファイルシステムは REPL やプロッターと同時に利用できません。" - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "ファイルシステムと REPL とプロッターは同じ USB シリアル接続を利用します。REPL とプロッターの利用を止めて、再度試してください。" - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "デバイスが繋げられていないようです。" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "デバイスがこのコンピュータに繋げられているかを確認してください。\n" -#~ "\n" -#~ "ファイルシステムが動作するには、MicroPython がデバイスに転送されている必要があります。\n" -#~ "\n" -#~ "最後に、デバイスのリセットボタンを押してから、再度試してください。" - -#~ msgid "{board_name} board" -#~ msgstr "{board_name} ボード" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Lego Spike デバイスで直接 MicroPython を編集。" - -#~ msgid "BBC micro:bit" -#~ msgstr "" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "BBC micro:bit の MicroPython を編集。" - -#~ msgid "Flash" -#~ msgstr "転送" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "コードを micro:bit に転送します。" - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "micro:bit にあるファイルにアクセスします。" - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "micro:bit を対話モードで利用します。" - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "スクリプトが長すぎて縮小できません" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "スクリプトが長すぎて縮小できません" - -#~ msgid "Problem minifying script" -#~ msgstr "スクリプトに問題があります" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "縮小しようとしましたが、スクリプトが長すぎます!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "\"{}\" を転送できません" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "BBC micro:bit が繋げられていないようです。" - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "BBC micro:bit " -#~ "を正しく繋げている場合でも、コンピュータがそれを認識するのに十分な時間をおいてください。これには数秒かかることがあります。それでもデバイスが認識されない場合は、デバイス一度取り外して再度繋げるか、スクリプトを保存して" -#~ " Mu を再起動してみてください。" - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "ローカルディレクトリにカスタム hex ファイルを保存できません。" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "カスタム hex ファイルが設定されている場合、最終的な hex ファイルを保存するためにローカルディレクトリは使えません。" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "micro:bit ポートなしではカスタム hex ファイルを利用できません。" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Mu は micro:bit のシリアルポートを検出できませんでした。通常は Mu " -#~ "が Python コードを hex " -#~ "に注入して転送できるので、これは問題ありません。しかし、カスタム hex ファイルの場合はダメです。" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "未サポートの BBC micro:bit。" - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "デバイスがこの Mu のバージョンで扱うには新しすぎます。このデバイスをサポートするために Mu " -#~ "を最新バージョンにアップデートしてください。\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "micro:bit に \"{}\" を転送中。" - -#~ msgid "Runtime" -#~ msgstr "ランタイム" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "micro:bit にコードをコピーしました。" - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "micro:bit への転送で問題が発生しました。" - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "転送が完了するまでデバイスを取り外さないでください。詳しくは Mu のログを確認してください。" - -#~ msgid "micro:bit" -#~ msgstr "" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Raspberry Pi Pico の MicroPython を編集。" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards." -#~ msgstr "ボードの Pyboard ラインで MicroPython を利用。" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "デバイスが繋げられていないようです。" - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "PyBoard MicroPython デバイス用の Python " -#~ "ファイルはデバイスに保存されています。したがって、これらのファイルを編集するには、デバイスが接続されている必要があります。デバイスを接続するまで、Mu" -#~ " はコードを格納するために次のディレクトリを使います:\n" -#~ "\n" -#~ " {}" - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Web フレームワーク「Flask」でシンプルな Web サイトを構築。" - -#~ msgid "Run the web server." -#~ msgstr "web サーバを実行します。" - -#~ msgid "Open your website in a browser." -#~ msgstr "Mu のヘルプをWebブラウザで表示します。" - -#~ msgid "Templates" -#~ msgstr "テンプレート" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "web サイトで使う HTML テンプレートを読み込みます。" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "web サイトで使う CSS ファイルを読み込みます。" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "web サイトで使う画像のあるディレクトリを開きます。" - -#~ msgid "Stop the web server." -#~ msgstr "web サーバを停止します。" - -#~ msgid "This is not a Python file!" -#~ msgstr "これは Python ファイルではありません!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "Mu は Python ファイルしか扱えません。Mu の現在のタブが Web" -#~ " アプリケーションのタブであることを確認してから、もう一度試してみてください。" - -#~ msgid "Cannot find template directory!" -#~ msgstr "テンプレートのディレクトリが見つかりません!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Web アプリケーションを動かすには、Webアプリケーションの Python コードと同じ場所に " -#~ "'template' ディレクトリがある必要があります。これを修正して、もう一度試してみてください。(ヒント: Mu" -#~ " は `templates` ディレクトリがここにあると思っていました: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Web サイトを開ません - サーバが動作していません。" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "ブラウザで Web サイトを表示するには、ローカルの Web " -#~ "サーバーが起動している必要があります。「実行」ボタンをクリックしてサーバーを起動して、もう一度試してください。" - diff --git a/mu/locale/nl/LC_MESSAGES/mu.po b/mu/locale/nl/LC_MESSAGES/mu.po index ea406c16b..e3d3532b5 100644 --- a/mu/locale/nl/LC_MESSAGES/mu.po +++ b/mu/locale/nl/LC_MESSAGES/mu.po @@ -1619,588 +1619,3 @@ msgstr "Laat de muziek zien die door Pygame Zero wordt gebruikt." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Stop je Pygame Zero-spel." - -#~ msgctxt "dialogs|ESPFirwareFlasherWidget" -#~ msgid "Browse" -#~ msgstr "Bladeren" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Python code verkleinen voor het flashen?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Overschrijf de ingebouwde MicroPython-runtime" -#~ " met het volgende hex-bestand (leeg" -#~ " betekent gebruik de standaard):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Hoe kunt u MicroPython flashen naar uw apparaat" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. Bepaal het type apparaat " -#~ "(ESP8266 of ESP32)
 2. Download " -#~ "firmware van de https://micropython.org/download
 3." -#~ " Sluit uw apparaat aan
 4. Laad" -#~ " het .bin-bestand hieronder met de" -#~ " knop 'Bladeren'
 5. Druk op 'Wis" -#~ " & schrijf firmware'" - -#~ msgid "Device:" -#~ msgstr "Apparaat:" - -#~ msgid "Choose device type:" -#~ msgstr "Kies apparaattype:" - -#~ msgid "Firmware (.bin):" -#~ msgstr "Firmware (.bin):" - -#~ msgid "Browse" -#~ msgstr "Bladeren" - -#~ msgid "Erase && write firmware" -#~ msgstr "Wis && schrijf firmware" - -#~ msgid "Select MicroPython firmware (.bin)" -#~ msgstr "Selecteer MicroPython-firmware (.bin)" - -#~ msgid "Firmware (*.bin)" -#~ msgstr "Firmware (*.bin)" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit-instellingen" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "ESP Firmware flasher" - -#~ msgid "Filesystem on " -#~ msgstr "Bestandssysteem op " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Bestand bestaat al; bestand overschrijven?" - -#~ msgid "File already exists" -#~ msgstr "Bestand bestaat al" - -#~ msgid "Copying '{}' to device." -#~ msgstr "'{}' kopi�ren naar apparaat." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' succesvol gekopieerd naar apparaat." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Verwijderen (kan niet ongedaan worden gemaakt)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "'{}' van apparaat verwijderen." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' succesvol verwijderd van apparaat." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "'{}' ophalen van het apparaat. kopi�ren naar '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' is met succes van het apparaat naar uw computer gekopieerd." - -#~ msgid "Open in Mu" -#~ msgstr "Open in Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Schrijf naar main.py op apparaat" - -#~ msgid "Opening '{}'" -#~ msgstr "'{}' openen" - -#~ msgid "Files on your device:" -#~ msgstr "Bestanden op uw apparaat:" - -#~ msgid "Files on your computer:" -#~ msgstr "Bestanden op uw computer:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Er is een probleem opgetreden bij " -#~ "het ophalen van de lijst met " -#~ "bestanden op het apparaat. Raadpleeg de" -#~ " logboeken van Mu voor technische " -#~ "informatie. U kunt ook proberen uw " -#~ "apparaat los te koppelen/aan te sluiten" -#~ " en/of Mu opnieuw op te starten." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Er is een probleem opgetreden bij " -#~ "het kopi�ren van het bestand '{}' " -#~ "naar het apparaat. Raadpleeg de " -#~ "logboeken van Mu voor meer informatie." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Er is een probleem opgetreden bij " -#~ "het verwijderen van '{}' van het " -#~ "apparaat. Raadpleeg de logboeken van Mu" -#~ " voor meer informatie." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Er is een probleem opgetreden bij " -#~ "het ophalen van '{}' van het " -#~ "apparaat. Raadpleeg de logboeken van Mu" -#~ " voor meer informatie." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Kan de MicroPython-runtime niet vinden." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "De micro:bit runtime die je hebt " -#~ "opgegeven ('{}') bestaat niet. Probeer " -#~ "het opnieuw." - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Schrijf MicroPython op ESP8266/ESP32-kaarten." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Voer je code rechtstreeks uit op de {board_name} via de REPL." - -#~ msgid "Files" -#~ msgstr "Bestanden" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Open het bestandssysteem op {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Gebruik de REPL om live te coderen op de {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL en bestandssysteem kunnen niet tegelijkertijd werken." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "De REPL en het bestandssysteem gebruiken" -#~ " beide dezelfde seri�le USB-verbinding. " -#~ "Er kan er maar �en actief zijn." -#~ " Schakel het bestandssysteem uit en " -#~ "probeer het opnieuw." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "De plotter en het bestandssysteem kunnen niet tegelijkertijd werken." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "De plotter en het bestandssysteem " -#~ "gebruiken beide dezelfde seri�le USB-" -#~ "aansluiting. Er kan er maar ��n " -#~ "actief zijn. Schakel het bestandssysteem " -#~ "uit en probeer het opnieuw." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Kan niets uitvoeren zonder actieve editortabbladen." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Met Running wordt de inhoud van " -#~ "het huidige tabblad naar het apparaat" -#~ " overgebracht. Het lijkt alsof je " -#~ "geen tabbladen open hebt staan." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "Het bestandssysteem kan niet tegelijkertijd" -#~ " met de REPL of plotter werken." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Het bestandssysteem en de REPL en " -#~ "plotter gebruiken dezelfde seri�le USB-" -#~ "verbinding. Schakel de REPL en plotter" -#~ " uit en probeer het opnieuw." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Kan een aangesloten {board_name} niet vinden" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Zorg ervoor dat het apparaat is aangesloten op deze computer.\n" -#~ "\n" -#~ "Op het apparaat moet MicroPython zijn" -#~ " geflashed voordat het bestandssysteem " -#~ "werkt.\n" -#~ "\n" -#~ "Druk ten slotte op de resetknop " -#~ "van het apparaat en wacht een paar" -#~ " seconden voordat u het opnieuw " -#~ "probeert." - -#~ msgid "{board_name} board" -#~ msgstr "{board_name} bord" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Schrijf MicroPython rechtstreeks op Lego Spike-apparaten." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Schrijf MicroPython voor de BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Flash" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Flash uw code op de micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Open het bestandssysteem op de micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Gebruik de REPL om live te coderen op de micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Je script is te lang en codeminificatie is uitgeschakeld" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Je script is te lang en de minifier is niet beschikbaar" - -#~ msgid "Problem minifying script" -#~ msgstr "Probleem met het verkleinen van script" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Onze minifier heeft het geprobeerd, maar je script is te lang!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Kan \"{}\" niet flashen" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Kan een aangesloten BBC micro:bit niet vinden." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Zorg ervoor dat u voldoende tijd " -#~ "overlaat om de BBC micro:bit te " -#~ "bevestigen en correct te configureren " -#~ "door uw computer. Dit kan enkele " -#~ "seconden duren. U kunt ook proberen " -#~ "het apparaat te verwijderen en opnieuw" -#~ " te bevestigen of uw werk op te" -#~ " slaan en Mu opnieuw te starten " -#~ "als het apparaat niet wordt gevonden." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "Kan een aangepast hex-bestand niet opslaan in een lokale map." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "" -#~ "Wanneer een aangepast hex-bestand is " -#~ "geconfigureerd in de instellingen, kan " -#~ "een lokale map niet worden gebruikt " -#~ "om het uiteindelijke hex-bestand op " -#~ "te slaan." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "Kan geen aangepast hex-bestand gebruiken zonder micro:bit-poort." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Mu kon de micro:bit seri�le poort " -#~ "niet detecteren. Normaal gesproken is " -#~ "dit in orde, omdat Mu de " -#~ "Python-code in de hex kan injecteren" -#~ " om te flashen. Dit kan echter " -#~ "niet worden gedaan met een aangepast " -#~ "hex-bestand." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Niet-ondersteunde BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Je apparaat is nieuwer dan deze " -#~ "versie van Mu. Werk Mu bij naar" -#~ " de nieuwste versie om dit apparaat" -#~ " te ondersteunen.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "De micro:bit flashen" - -#~ msgid "Runtime" -#~ msgstr "Runtime" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Code gekopieerd naar micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Er is een probleem opgetreden bij het flashen van de micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Koppel het apparaat niet los voordat " -#~ "het flashen is voltooid. Raadpleeg de" -#~ " logboeken voor meer informatie." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Schrijf MicroPython rechtstreeks op een Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards." -#~ msgstr "Gebruik MicroPython op de Pyboard-lijn van boards." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Kon geen aangesloten PyBoard-apparaat vinden." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Python-bestanden voor PyBoard MicroPython-" -#~ "apparaten worden op het apparaat " -#~ "opgeslagen. Om deze bestanden te kunnen" -#~ " bewerken, moet het apparaat daarom " -#~ "zijn aangesloten. Totdat u een apparaat" -#~ " aansluit, gebruikt Mu de map die " -#~ "u hier vindt:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...om uw code op te slaan." - -#~ msgid "Snek" -#~ msgstr "Snek" - -#~ msgid "Write code for boards running Snek." -#~ msgstr "Schrijf code voor boards waarop Snek draait." - -#~ msgid "Put" -#~ msgstr "Opzetten" - -#~ msgid "Put the current program to the device." -#~ msgstr "Zet het huidige programma op het apparaat." - -#~ msgid "Get" -#~ msgstr "Afhalen" - -#~ msgid "Get the current program from the device." -#~ msgstr "Haal het huidige programma van het apparaat." - -#~ msgid "There is un-saved work, 'get' will cause you to lose it." -#~ msgstr "" -#~ "Er is niet-opgeslagen werk, 'afhalen'" -#~ " zorgt ervoor dat je het kwijtraakt." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "It must have a version of Snek " -#~ "flashed onto it before the REPL " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Zorg ervoor dat het apparaat is aangesloten op deze computer.\n" -#~ "\n" -#~ "Er moet een versie van Snek op geflasht zijn voordat de REPL werkt.\n" -#~ "\n" -#~ "Druk ten slotte op de resetknop " -#~ "van het apparaat en wacht een paar" -#~ " seconden voordat u het opnieuw " -#~ "probeert." - -#~ msgid "Web" -#~ msgstr "Web" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Bouw eenvoudige websites met het webframework \"Flask\"." - -#~ msgid "Run the web server." -#~ msgstr "Start de webserver." - -#~ msgid "Open your website in a browser." -#~ msgstr "Open uw website in een browser." - -#~ msgid "Templates" -#~ msgstr "Sjablonen" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Laad HTML-sjablonen die door uw website worden gebruikt." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Laad CSS-bestanden die door uw website worden gebruikt." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Open de map met afbeeldingen die door uw website worden gebruikt." - -#~ msgid "Stop the web server." -#~ msgstr "Stop de webserver." - -#~ msgid "This is not a Python file!" -#~ msgstr "Dit is geen Python-bestand!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "Mu kan alleen een Python-bestand " -#~ "serveren. Zorg ervoor dat het huidige" -#~ " tabblad in Mu het tabblad is " -#~ "voor uw webtoepassing en probeer het " -#~ "opnieuw." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Kan sjabloonmap niet vinden!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Om uw webtoepassing te bedienen, moet" -#~ " er een map 'templates' aanwezig zijn" -#~ " op dezelfde plaats als de Python-" -#~ "code van uw webtoepassing. Verhelp dit" -#~ " en probeer het opnieuw. (Hint: Mu" -#~ " verwachtte dat de directory `templates`" -#~ " hier zou zijn: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Kan website niet openen - Server draait niet." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "U moet de lokale webserver hebben " -#~ "draaien om uw website in een " -#~ "browser te kunnen bekijken. Klik op " -#~ "de knop 'Uitvoeren' om de server " -#~ "te starten en probeer het opnieuw." - diff --git a/mu/locale/pl/LC_MESSAGES/mu.po b/mu/locale/pl/LC_MESSAGES/mu.po index 92164b633..05c32e4b1 100644 --- a/mu/locale/pl/LC_MESSAGES/mu.po +++ b/mu/locale/pl/LC_MESSAGES/mu.po @@ -1597,522 +1597,3 @@ msgstr "Pokaż muzykę używaną przez Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Zatrzymaj swoją grę Pygame Zero." - -#~ msgid "Logging to {}" -#~ msgstr "Logowanie do {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "Debugger wymaga nazwę pliku skryptu Pythona by działać" - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Pliki na Twoim micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Twój skrypt jest za długi!" - -#~ msgid " Runtime: {}" -#~ msgstr " Wykonanie: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "" -#~ "Nadpisz wbudowany program MicroPythona " -#~ "następującym plikiem hex (pusty oznacza " -#~ "użycie domyślnego):" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Nadpisz wbudowany program MicroPythona " -#~ "następującym plikiem hex (pusty oznacza " -#~ "użycie domyślnego):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Ustawienia BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "System plików na micro:bitcie" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Plik już istnieje; Nadpisać go?" - -#~ msgid "File already exists" -#~ msgstr "Plik już istnieje" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Kopiowanie '{}' na micro:bita." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' skopiowane z sukcesem na micro:bita." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Usuń (nie może zostać cofnięte)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Usuwanie '{}' z micro:bita." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' usunięto z sukcesem z micro:bita." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Pobieranie '{}' z micro:bita. Kopiowanie do '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Skopiowałem z powodzeniem '{}' z micro:bita na Twój komputer." - -#~ msgid "Open in Mu" -#~ msgstr "Otwórz w Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Otwieranie '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Pliki na Twoim komputerze:" - -#~ msgid "Files on your computer:" -#~ msgstr "Pliki na Twoim komputerze:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Był problem z pobraniem listy plików " -#~ "na micro:bitcie. Proszę sprawdź logi Mu" -#~ " dla informacji technicznych. Alternatywnie, " -#~ "spróbuj odłączyc/podłączyć swojego micro:bita " -#~ "i/lub zrestartować Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Był problem z usunięciem '{}' z " -#~ "micro:bita. Proszę sprawdź logi Mu w " -#~ "celu uzyskania więcej informacji." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Był problem z usunięciem '{}' z " -#~ "micro:bita. Proszę sprawdź logi Mu w " -#~ "celu uzyskania więcej informacji." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Był problem z usunięciem '{}' z " -#~ "micro:bita. Proszę sprawdź logi Mu w " -#~ "celu uzyskania więcej informacji." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Nie mogłem znaleźć wersji wykonywalnej MicroPythona" - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Wersja wykonywalna micro:bit, którą podałeś" -#~ " ('{}') nie istnieje. Proszę spróbuj " -#~ "ponownie." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Pliki" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Uzyskaj dostęp do systemu plików na micro:bit." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Używaj REPL do kodowania na żywo na micro:bit." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL i system plików nie mogą działać w tym samym czasie." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL i system plików oba używają " -#~ "tego samego połączenia szeregowego USB. " -#~ "Tylko jeden może być aktywny w " -#~ "dowolnym momencie. Wyłącz system plików " -#~ "i próbuj ponownie." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Plotter i system plików nie mogą być używane w tym samym czasie." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Plotter i system plików oba używają " -#~ "tego samego połączenia szeregowego USB. " -#~ "Tylko jeden może być aktywny w " -#~ "dowolnym momencie. Wyłącz system plików " -#~ "i próbuj ponownie." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "System plików nie może działać w tym samym czasie co REPL lub plotter." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "System plików i REPL i plotter " -#~ "używają tego samego połączenia szeregowego " -#~ "USB. Wyłącz REPL i plotter i " -#~ "próbuj ponownie." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Nie mogę znaleźć podłączonego urządzenia." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Proszę upewnij się, że urządzenie jest podłączone do komputera.\n" -#~ "\n" -#~ "Urządzenie musi zawierać sflaszowany " -#~ "Micropython na nim zanim system plików" -#~ " będzie działać.\n" -#~ "\n" -#~ "Na końcu naciśnij przycisk reset " -#~ "urządzenia i poczekaj kilka sekund przed" -#~ " ponowną próbą." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Pisz w MicroPython dla BBC micro:bita." - -#~ msgid "Flash" -#~ msgstr "Fleszuj" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Fleszuj swój kod na micro:bita." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Uzyskaj dostęp do systemu plików na micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Używaj REPL do kodowania na żywo na micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Twój skrypt jest za długi i pomniejszacz nie jest dostępny" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Twój skrypt jest za długi i pomniejszacz nie jest dostępny" - -#~ msgid "Problem minifying script" -#~ msgstr "Problem ze skryptem" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Nasz minifier (co to jest?) próbował, ale Twój skrypt jest zbyt długi!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Nie mogę fleszować \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Nie mogę znaleźć podłączonego BBC micro:bita." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Proszę upewnij się, że dajesz " -#~ "wystarczająco dużo czasu dla BBC " -#~ "micro:bit, że by został podłączony i " -#~ "skonfigurowany poprawnie przez Twój komputer." -#~ " To może zająć kilka sekund. " -#~ "Alternatywnie, próbuj odłączyć i podłączyć " -#~ "ponownie urządzenie lub zapisać swoją " -#~ "pracę a następnie zrestartuj Mu, jeśli" -#~ " urządzenie pozostaje niewykryte." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Niewspierany BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Twoje urządzenie jest nowsze niż ta " -#~ "wersja Mu. Proszę zaktualizuj Mu do " -#~ "najnowszej wersji by wspierać to " -#~ "urządzenie.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Fleszowanie \"{}\" na micro:bita." - -#~ msgid "Runtime" -#~ msgstr "nienazwany" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Skopiowana kod na micro:bita." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Wystąpił problem z fleszowaniem micro:bita." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Proszę nie odłączaj urządzenia dopóki " -#~ "fleszowanie nie zostało ukończone." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Używaj CircuitPython na linii płytek Adafruit" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Nie mogę znaleźć podłączonego urządzenia." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Pliki pythonowe dla urządzeń Adafruit " -#~ "CircuitPython są przechowywane na urządzeniu." -#~ " W związku z tym, by edytować " -#~ "te pliki potrzebujesz podłączonego urządzenia." -#~ " Dopóki go nie podłączysz, Mu będzie" -#~ " używał katalogu znalezionego tutaj:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...do przechowywania Twojego kodu." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Pokaż pomoc na temat Mu w przeglądarce." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/pt_BR/LC_MESSAGES/mu.po b/mu/locale/pt_BR/LC_MESSAGES/mu.po index 4fdca582b..ae23a012f 100644 --- a/mu/locale/pt_BR/LC_MESSAGES/mu.po +++ b/mu/locale/pt_BR/LC_MESSAGES/mu.po @@ -1632,548 +1632,3 @@ msgstr "Mostra as músicas utilizadas pelo Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Pára o seu jogo Pygame Zero." - -#~ msgid "Logging to {}" -#~ msgstr "Log em {}." - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "O depurador requer o nome de um script Python para executar." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Arquivos no micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "O seu script é muito grande!" - -# No obvious translation for runtime. Went technical, but quoted. -#~ msgid " Runtime: {}" -#~ msgstr " \"Runtime\": {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Minificar o código Python antes de enviar?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Substituir o MicroPython embutido com o" -#~ " seguinte arquivo 'hex' (se vazio, " -#~ "não haverá substituição)" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Como transferir o MicroPython para o seu dispositivo" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. Determine o tipo de dispositivo" -#~ " (ESP8266 ou ESP32)
 2. Baixe " -#~ "o firmware do https://micropython.org/download
 3." -#~ " Conecte seu dispositivo
 4. Carregue" -#~ " o arquivo .bin abaixo usando o " -#~ "botão \"Procurar\"
 5. Pressione \"Apagar" -#~ " e escrever firmware\"" - -#~ msgid "Browse" -#~ msgstr "Procurar" - -#~ msgid "Erase && write firmware" -#~ msgstr "Apagar && escrever firmware" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Definições do BBC micro:bit" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Transferidor de Firmware ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Sistema de arquivos em " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "O arquivo já existe; deseja substituí-lo?" - -#~ msgid "File already exists" -#~ msgstr "O arquivo já existe" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Copiando '{}' para o dispositivo." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' copiado com sucesso para o dispositivo." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Excluir (não pode ser desfeito)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Excluindo '{}' do dispositivo." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' excluído com sucesso do dispositivo." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Transferindo '{}' do dispositivo. Copiando para '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "" -#~ "A cópia de '{}' do dispositivo " -#~ "para o computador foi concluída com " -#~ "sucesso." - -#~ msgid "Open in Mu" -#~ msgstr "Abrir no Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Escrever para main.py no dispositivo" - -#~ msgid "Opening '{}'" -#~ msgstr "Abrindo '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Arquivos no dispositivo:" - -#~ msgid "Files on your computer:" -#~ msgstr "Arquivos no computador:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Houve uma falha ao obter a lista" -#~ " de arquivos no dispositivo. Verifique " -#~ "o log do Mu para obter detalhes" -#~ " técnicos. Alternativamente, tente desconectar" -#~ " e reconectar o teu dispositivo ou" -#~ " tente reiniciar o Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Houve uma falha ao copiar o " -#~ "arquivo '{}' para o dispositivo. " -#~ "Verifique os logs do Mu para mais" -#~ " informação." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Houve uma falha ao excluir '{}' do" -#~ " dispositivo. Verifique os logs do Mu" -#~ " para mais informação." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Houve uma falha ao transferir '{}' " -#~ "do dispositivo. Verifique os logs do " -#~ "Mu para mais informação." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "O \"runtime\" MicroPython não foi encontrado." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "O \"runtime\" micro:bit que você indicou" -#~ " ('{}') não existe. Tente novamente, " -#~ "por favor." - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Escreva MicroPython em placas ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Executa seu código diretamente em {board_name} por meio de REPL." - -#~ msgid "Files" -#~ msgstr "Arquivos" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Acessa o sistema de arquivos em {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Usa o REPL para programar diretamente em {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "O REPL e os arquivos não podem ser utilizados ao mesmo tempo." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "O REPL e os arquivos utilizam a" -#~ " mesma conexão USB. Só um deles " -#~ "pode estar ativo de cada vez. " -#~ "Desative os arquivos e tenta novamente." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "" -#~ "O gráfico e o sistema de arquivos" -#~ " não podem ser utilizados ao mesmo" -#~ " tempo." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "O gráfico e sistema de arquivos " -#~ "utilizam a mesma conexão USB. Só " -#~ "um deles pode estar ativo de cada" -#~ " vez. Desative o sistema de arquivos" -#~ " e tente novamente." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Não é possível executar nada sem nenhuma aba ativa do editor." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "A execução transfere o conteúdo da " -#~ "aba atual para o dispositivo. Parece " -#~ "que você não tem nenhuma aba " -#~ "aberta." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "Sistema de arquivos não pode ser " -#~ "utilizado ao mesmo tempo com o " -#~ "REPL ou com o gráfico." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "O sistema de arquivos, REPL e " -#~ "gráfico utilizam a mesma conexão USB." -#~ " Só um deles pode estar ativo " -#~ "de cada vez. Desativa o REPL e " -#~ "o gráfico e tenta novamente." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Não foi possível encontrar {board_name} conectado" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Certifique-se que o dispositivo está conectado ao computador.\n" -#~ "\n" -#~ "O dispositivo tem que ter o " -#~ "MicroPython previamente transferido antes dos" -#~ " arquivos poderem funcionar.\n" -#~ "\n" -#~ "Por último, pressiona o botão RESET " -#~ "no dispositivo, aguarde alguns segundos " -#~ "e tenta novamente." - -#~ msgid "{board_name} board" -#~ msgstr "placa {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Escreva MicroPython diretamente em dispositivos Lego Spike." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Escreva MicroPython para o BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Transferir" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Transfere o seu código para o micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Acessa o sistema de arquivos no micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Usa o REPL para programar diretamente no micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "O seu script é muito grande e a minificação de código está desabilitada" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "O seu script é muito grande e o minificador não está disponível" - -#~ msgid "Problem minifying script" -#~ msgstr "Problema ao minificar o script" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "O minificador tentou, mas o seu script é muito grande!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Não foi possível transferir \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Não foi possível encontrar um micro:bit conectado." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Por favor assegure que você dê " -#~ "tempo suficiente ao computador para " -#~ "detectar e identificar o micro:bit. Isto" -#~ " pode levar vários segundos. " -#~ "Alternativamente, tente desconectar e " -#~ "reconectar o dispositivo ou salve o " -#~ "seu trabalho e reinicie o Mu." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" -#~ "Não foi possível salvar um arquivo " -#~ "hex personalizado no diretório local." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "" -#~ "Quando um arquivo hex personalizado é" -#~ " configurado nas configurações, um " -#~ "diretório local não pode ser usado " -#~ "para salvar o arquivo hex final." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" -#~ "Não é possível usar um arquivo hex" -#~ " personalizado sem uma porta micro:bit." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Um não conseguiu detectar a porta " -#~ "serial micro:bit. Normalmente isso não é" -#~ " um problema, pois Um pode injetar" -#~ " o código Python no hex para " -#~ "transferir. Porém, isso não pode ser " -#~ "feito com um arquivo hex personalizado." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Este micro:bit não é suportado." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "O seu dispositivo é mais recente " -#~ "que esta versão do Mu. Por favor," -#~ " atualize o Mu para a última " -#~ "versão para obter suporte a este " -#~ "dispositivo.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Transferindo o micro:bit" - -#~ msgid "Runtime" -#~ msgstr "Tempo de execução" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Código copiado para o micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Houve uma falha na transferência para o micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Não desligue o dispositivo até que " -#~ "a transferência seja concluída. Verifique " -#~ "o log para mais informação." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Escreva MicroPython diretamente em um Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Use MicroPython na linha de placas Pyboard" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Não foi possível encontrar um dispositivo PyBoard conectado." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Os arquivos Python para dispositivos " -#~ "PyBoard MicroPython são armazenados no " -#~ "dispositivo. Assim sendo, para os editar" -#~ " esses arquivos você precisará ter o" -#~ " dispositivo conectado. Até você conectar" -#~ " um dispositivo, Mu vai usar o " -#~ "diretório encontrado aqui:\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "...para armazenar seu código." - -#~ msgid "Web" -#~ msgstr "Web" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Construa sites simples com o framework web \"Flask\"." - -#~ msgid "Run the web server." -#~ msgstr "Executa o servidor web." - -#~ msgid "Open your website in a browser." -#~ msgstr "Abre seu site em um navegador." - -#~ msgid "Templates" -#~ msgstr "Modelos" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Carrega modelos HTML usados por seu site." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Carrega arquivos CSS usados por seu site." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Abre o diretório contendo imagens usadas por seu site." - -#~ msgid "Stop the web server." -#~ msgstr "Para o servidor web." - -#~ msgid "This is not a Python file!" -#~ msgstr "Isso não é um arquivo Python!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "Mu só consegue servir um arquivo " -#~ "Python. Certifique-se que a aba " -#~ "atual no Mu é aquela para sua " -#~ "aplicação web e tente novamente." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Não foi possível encontrar um diretório de modelos!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Para servir as aplicação web, é " -#~ "necessário haver um diretório de " -#~ "\"templates\" no mesmo lugar que o " -#~ "código Python da sua aplicação web. " -#~ "Corrija isso e tente novamente. (Dica:" -#~ " Mu esperava que o diretório " -#~ "`templates` estivesse aqui: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Não foi possível abrir o site - Servidor não está em execução." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "Você deve ter o servidor web local" -#~ " em execução para visualizar seu site" -#~ " em um navegador. Clique no botão " -#~ "\"Executar\" para iniciar o servidor e" -#~ " tente novamente." - diff --git a/mu/locale/pt_PT/LC_MESSAGES/mu.po b/mu/locale/pt_PT/LC_MESSAGES/mu.po index 17b8dc78a..87f4dfeff 100644 --- a/mu/locale/pt_PT/LC_MESSAGES/mu.po +++ b/mu/locale/pt_PT/LC_MESSAGES/mu.po @@ -1619,514 +1619,3 @@ msgstr "Mostra a música utilizada pelo Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Pára o teu jogo Pygame Zero." - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Compactar o código Python antes de enviar?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Substituir o MicroPython pré-definido com " -#~ "o seguinte ficheiro 'hex' (sem efeito" -#~ " se ficar em branco):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Carregar o MicroPython no teu dispositivo" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. Verifica que tipo de " -#~ "dispositivo tens (ESP8266 ou ESP32)
 2. Obtém o firmware a partir " -#~ "de https://micropython.org/download
 3." -#~ " Liga o dispositivo
 4. Carrega o" -#~ " ficheiro .bin, escolhendo-o depois de " -#~ "carregares no botão 'Pesquisar'
 5. " -#~ "Carrega no botão 'Apaga e escreve " -#~ "novo firmware'" - -#~ msgid "Browse" -#~ msgstr "Navega" - -#~ msgid "Erase && write firmware" -#~ msgstr "Apaga e escreve novo firmware" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Definições do micro:bit" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Firmware ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Ficheiros no " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "O ficheiro já existe; substituí-lo?" - -#~ msgid "File already exists" -#~ msgstr "O ficheiro já existe" - -#~ msgid "Copying '{}' to device." -#~ msgstr "A copiar '{}' para o dispositivo." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' copiado com sucesso para o dispositivo." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Apagar (não podes desfazer)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "A apagar '{}' do dispositivo." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' apagado com sucesso do dispositivo." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "A transferir '{}' do dispositivo, com cópia para '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Cópia de '{}' do dispositivo para o computador concluída." - -#~ msgid "Open in Mu" -#~ msgstr "Abrir no Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Escreve no ficheiro 'main.py' no dispositivo" - -#~ msgid "Opening '{}'" -#~ msgstr "A abrir '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Ficheiros no teu dispositivo:" - -#~ msgid "Files on your computer:" -#~ msgstr "Ficheiros no teu computador:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Falha ao obter a lista de " -#~ "ficheiros no dispositivo. Verifica o log" -#~ " do Mu para obteres detalhes " -#~ "técnicos. Em alternativa, tenta desligar " -#~ "e voltar ligar o teu dispositivo " -#~ "ou reinicia o Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Houve uma falha a copiar o " -#~ "ficheiro '{}' para o dispositivo. " -#~ "Verifica o log do Mu para mais " -#~ "informação." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Houve uma falha a apagar o " -#~ "ficheiro '{}' no dispositivo. Verifica o" -#~ " log do Mu para mais informação." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Houve uma falha a obter o ficheiro" -#~ " '{}' do dispositivo. Verifica o log" -#~ " do Mu para mais informação." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "O 'runtime' MicroPython não foi encontrado." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "O 'runtime' micro:bit que indicaste ({}) não existe. Tenta novamente." - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "MicroPython ESP" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Escreve MicroPython em dispositivos ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Corre o teu programa diretamente no {board_name} através do REPL." - -#~ msgid "Files" -#~ msgstr "Ficheiros" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Acede aos ficheiros no {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Usa o REPL para programar directamente no {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "O REPL e os ficheiros não podem ser utilizados em simultâneo." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "O REPL e os ficheiros utilizam a" -#~ " mesma ligação USB. Só um deles " -#~ "pode estar ativo. Fecha o painél " -#~ "dos ficheiros e tenta novamente." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "O gráfico e os ficheiros não podem ser utilizados em simultâneo." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "O gráfico e os ficheiros utilizam " -#~ "a mesma ligação USB. Só um deles" -#~ " pode estar ativo. Fecha o painél " -#~ "dos ficheiros e tenta novamente." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Não é possível executar um programa sem um separador ativo." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Para copiares o código do separador " -#~ "atual para o dispositivo, verifica que" -#~ " tens pelo um separador aberto." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "" -#~ "Os ficheiros não podem ser utilizados" -#~ " em simultâneo com o REPL ou " -#~ "com o gráfico." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Os ficheiros, REPL e gráfico utilizam" -#~ " a mesma ligação USB. Só um " -#~ "deles pode estar ativo. Fecha o " -#~ "painél do REPL e do gráfico, e " -#~ "tenta novamente." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Não encontro um dispositivo {board_name} ligado." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Garante que o dispositivo está ligado ao computador.\n" -#~ "\n" -#~ "O dispositivo tem que ter o " -#~ "MicroPython previamente carregado antes dos" -#~ " programas poderem funcionar.\n" -#~ "\n" -#~ "Por último, pressiona o botão RESET " -#~ "no dispositivo, aguarda uns segundos e" -#~ " tenta novamente." - -#~ msgid "{board_name} board" -#~ msgstr "Dispositivo {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "MicroPython LEGO" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Escreve MicroPython em dispostivos LEGO Spike." - -#~ msgid "BBC micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Escrever MicroPython para um micro:bit." - -#~ msgid "Flash" -#~ msgstr "Transferir" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Transfere o teu programa para o micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Acede aos ficheiros no micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Usa o REPL para programar directamente no micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "O teu programa é muito grande e o compactador não está ativado." - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "O teu programa é muito grande e o compactador não está disponível." - -#~ msgid "Problem minifying script" -#~ msgstr "Problema na compactação do teu programa." - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "O compactador não funcionou porque o teu programa é muito grande!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Não foi possível transferir \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Não foi encontrado um micro:bit ligado." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Garante que dás tempo suficiente ao " -#~ "computador para detetar e identificar o" -#~ " micro:bit. Por vezes pode levar " -#~ "vários segundos. Em alternativa, tenta " -#~ "desligar e voltar a ligar o " -#~ "dispositivo, ou guarda o teu trabalho" -#~ " e reinicia o Mu." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "Não é possível gravar um ficheiro hex numa pasta local." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "" -#~ "Quando um arquivo hex personalizado é" -#~ " configurado nas configurações, um " -#~ "diretório local não pode ser usado " -#~ "para salvar o arquivo hex final." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Este micro:bit não é suportado." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "O teu dispositivo não funciona com " -#~ "esta versão do Mu. Por favor, " -#~ "atualiza o Mu.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "A carregar o programa no micro:bit." - -#~ msgid "Runtime" -#~ msgstr " 'Runtime': {}" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Programa copiado para o micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Houve uma falha no carregamento para o micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Por favor não desligues o dispositivo" -#~ " até que o carregamento esteja " -#~ "terminado. Verifica o log para mais " -#~ "informação." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Escreve MicroPython num Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "MicroPython pyboard" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Escreve MicroPython em dispositivos pyboard." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Não encontro um dispositivo pyboard ligado." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Os ficheiros Python para dispositivos " -#~ "pyboard são armazenados no próprio " -#~ "dispositivo. Assim sendo, para os " -#~ "alterar terás que o ligar. Entretanto," -#~ " o Mu utiliza esta pasta para " -#~ "guardar os teus programas:\n" -#~ "\n" -#~ "{}" - -#~ msgid "Web" -#~ msgstr "Web" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Cria websites simples com componentes 'Flask'." - -#~ msgid "Run the web server." -#~ msgstr "Corre o servidor web." - -#~ msgid "Open your website in a browser." -#~ msgstr "Abre o teu website no navegador ('browser')." - -#~ msgid "Templates" -#~ msgstr "Modelos" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Carrega modelos HTML utilizados pelo teu website." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Carrega ficheiros CSS utilizados pelo teu website." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Abre a pasta que contem as imagens utilizadas pelo teu website." - -#~ msgid "Stop the web server." -#~ msgstr "Pára o servidor web." - -#~ msgid "This is not a Python file!" -#~ msgstr "Isto não é um ficheiro Python!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "O Mu só é capaz de trabalhar " -#~ "com um ficheiro Python. Verifica se " -#~ "o separador atual do Mu contém a" -#~ " tua aplicação web e tenta novamente." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Não é possível encontrar a pasta dos modelos!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Para que a tua aplicação web possa" -#~ " funciona, é necessário que exista " -#~ "uma subpasta 'templates' na pasta onde" -#~ " guardas o código Python da tua " -#~ "aplicação. Corrige esta situação e tenta" -#~ " novamente. (Dica: o Mu estava à " -#~ "espera de encontrar a pasta 'templates'" -#~ " aqui: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Não foi possível abrir o website - o servidor não está a correr." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "Tens de ter um servidor local a" -#~ " correr para que consigas ver o " -#~ "teu website num navegador ('broswer'). " -#~ "Carrega no botão 'Correr' para iniciar" -#~ " o servidor e tenta novamente." - diff --git a/mu/locale/ru_RU/LC_MESSAGES/mu.po b/mu/locale/ru_RU/LC_MESSAGES/mu.po index 9824904dd..71eab8816 100644 --- a/mu/locale/ru_RU/LC_MESSAGES/mu.po +++ b/mu/locale/ru_RU/LC_MESSAGES/mu.po @@ -1618,521 +1618,3 @@ msgstr "Показать музыку, используемую Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Остановите игру Pygame Zero." - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Минимизировать код Python перед прошивкой?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Замените встроенную среду выполнения " -#~ "MicroPython следующим шестнадцатеричным файлом " -#~ "(пустой означает использование значения по " -#~ "умолчанию):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Как записать файл прошивки MicroPython на ваше устройство" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ "  1. Определите тип устройства " -#~ "(ESP8266 или ESP32)
2. " -#~ "Загрузите прошивку со страницы https://micropython.org/download " -#~ "
  3. Подключите " -#~ "устройство
  4. Используя " -#~ "кнопку \"Обзор\", выберите файл прошивки " -#~ "(.bin)
  5. Нажмите \"Стереть" -#~ " и записать прошивку\"." - -#~ msgid "Browse" -#~ msgstr "Обзор" - -#~ msgid "Erase && write firmware" -#~ msgstr "Очистить устройство и записать прошивку" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit Настройки" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Загрузчик прошивки ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Файловая система на " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Файл уже существует; перезаписать?" - -#~ msgid "File already exists" -#~ msgstr "Файл уже существует" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Копирование '{}' на устройство." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' успешно скопировано на устройство." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Удалить (это действие невозможно отменить)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Удаление '{}' с устройства." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' успешно удалено с устройства." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Получение '{}' с устройства. Копирование в '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "'{}' Успешно скопирован с устройства на ваш компьютер." - -#~ msgid "Open in Mu" -#~ msgstr "Открыть в Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Запись в main.py на устройстве" - -#~ msgid "Opening '{}'" -#~ msgstr "Открытие '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Файлы на вашем устройстве:" - -#~ msgid "Files on your computer:" -#~ msgstr "Файлы на вашем компьютере:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Не удалось получить список файлов на " -#~ "устройстве. Пожалуйста, проверьте логи Mu " -#~ "для получения детальной информации. Или " -#~ "попробуйте отключить / подключить ваше " -#~ "устройство и / или перезапустить Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "При копировании файла '{}' на устройство" -#~ " возникла проблема. Пожалуйста, проверьте " -#~ "логи Mu для получения дополнительной " -#~ "информации." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "При удалении \"{}\" с устройства " -#~ "возникла проблема. Пожалуйста, проверьте логи" -#~ " Mu для получения дополнительной " -#~ "информации." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Не удалось получить \"{}\" с устройства." -#~ " Пожалуйста, проверьте логи Mu для " -#~ "получения дополнительной информации." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Не удалось найти среду выполнения MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Указанная вами среда выполнения micro:bit " -#~ "('{}') не существует. Пожалуйста, попробуйте" -#~ " еще раз." - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Запускайте MicroPython на платах ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Запустите свой код прямо на {board_name} через REPL." - -#~ msgid "Files" -#~ msgstr "Файлы" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Доступ к файловой системе на {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Используйте REPL для немедленного исполнения кода на {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL и файловая система не могут работать одновременно." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL и файловая система используют одно" -#~ " и то же последовательное соединение " -#~ "USB. Только одно из них может быть" -#~ " активно в одно и то же время." -#~ " Отключитесь от файловой системы и " -#~ "попробуйте еще раз." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Плоттер и файловая система не могут работать одновременно." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Плоттер и файловая система используют " -#~ "одно и то же последовательное соединение" -#~ " USB. Только одно из них может " -#~ "быть активно в одно и то же " -#~ "время. Отключитесь от файловой системы и" -#~ " попробуйте еще раз." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Невозможно запустить что-либо без активных вкладок редактора." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Запуск передает содержимое текущей вкладки " -#~ "(код) на устройство. Похоже, у вас " -#~ "нет открытых вкладок." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Файловая система не может работать одновременно с REPL или плоттером." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Файловая система, REPL и плоттер " -#~ "используют одно и то же последовательное" -#~ " соединение USB. Выключите REPL и " -#~ "плоттер и попробуйте снова." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Не удалось найти подключенную {board_name}" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Убедитесь, что устройство подключено к этому компьютеру.\n" -#~ "\n" -#~ "Чтобы файловая система заработала, на " -#~ "устройстве должен быть установлен MicroPython." -#~ "\n" -#~ "\n" -#~ "Наконец, нажмите кнопку сброса устройства " -#~ "и подождите несколько секунд, прежде чем" -#~ " повторить попытку." - -#~ msgid "{board_name} board" -#~ msgstr "Плата {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "Лего MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Запишите MicroPython прямо на устройство Lego Spike." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Запускайте MicroPython на BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Загрузить" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Загрузить ваш код на плату micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Доступ к файловой системе на micro: bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Используйте REPL для немедленного выполнения кода на micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ваш скрипт слишком длинный, и минификация кода отключена" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ваш скрипт слишком длинный, а минификатор недоступен" - -#~ msgid "Problem minifying script" -#~ msgstr "Проблема с минификацией скрипта" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Наш минификатор пытался уменьшить код, но ваш скрипт слишком длинный!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Невозможно записать файл \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Не удалось найти прикрепленную плату BBC micro: bit." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Пожалуйста, убедитесь, что BBC micro:bit " -#~ "подключён к компьютеру достаточно времени, " -#~ "чтобы система могла его настроить. Это" -#~ " может занять несколько секунд. В " -#~ "качестве альтернативы попробуйте удалить и " -#~ "снова подключить устройство или сохранить " -#~ "свою работу и перезапустить Mu, если " -#~ "устройство не обнаружено." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" -#~ "Невозможно сохранить пользовательский " -#~ "шестнадцатеричный файл в локальном каталоге." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" -#~ "Когда пользовательский шестнадцатеричный файл " -#~ "изменён в настройках, локальный каталог " -#~ "не может использоваться для сохранения " -#~ "окончательного шестнадцатеричного файла." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" -#~ "Невозможно использовать собственный " -#~ "шестнадцатеричный файл без порта micro:bit." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Mu не смог обнаружить последовательный " -#~ "порт micro:bit. Обычно это нормально, " -#~ "поскольку Mu может вставить код Python" -#~ " в шестнадцатеричный код для прошивки. " -#~ "Однако это невозможно сделать с помощью" -#~ " пользовательского шестнадцатеричного файла." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Неподдерживаемый BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Ваше устройство новее, чем эта версия" -#~ " Mu. Пожалуйста, обновите Mu до " -#~ "последней версии для поддержки этого " -#~ "устройства.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Прошивка micro:bit" - -#~ msgid "Runtime" -#~ msgstr "Среда выполнения" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Код скопирован на micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Не удалось прошить micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Не отключайте устройство, пока не " -#~ "завершится перепрошивка. Пожалуйста, проверьте " -#~ "логи для получения дополнительной информации." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Запускайте MicroPython прямо на Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Используйте MicroPython на линейке плат Pyboard" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Не удалось найти подключенное устройство PyBoard." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Файлы Python для плат PyBoard " -#~ "MicroPython хранятся на устройстве. " -#~ "Следовательно, для редактирования этих файлов" -#~ " вам необходимо подключить устройство. Пока" -#~ " вы не подключите плату, Mu будет " -#~ "использовать каталог, найденный здесь:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "... для хранения вашего кода." - -#~ msgid "Web" -#~ msgstr "Веб" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Создавайте простые веб-сайты с помощью веб-фреймворка Flask." - -#~ msgid "Run the web server." -#~ msgstr "Запустите веб-сервер." - -#~ msgid "Open your website in a browser." -#~ msgstr "Откройте свой сайт в браузере." - -#~ msgid "Templates" -#~ msgstr "Шаблоны" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Загрузите HTML-шаблоны, используемые вашим сайтом." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Загрузите файлы CSS, используемые вашим сайтом." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Откройте каталог, содержащий изображения, используемые вашим сайтом." - -#~ msgid "Stop the web server." -#~ msgstr "Остановить веб-сервер." - -#~ msgid "This is not a Python file!" -#~ msgstr "Это не файл Python!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "Mu может запускать только файлы Python." -#~ " Убедитесь, что текущая вкладка в Mu" -#~ " - это вкладка вашего веб-приложения, " -#~ "а затем повторите попытку." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Не удается найти каталог шаблонов!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Для обслуживания вашего веб-приложения " -#~ "необходим каталог шаблонов в том же " -#~ "месте, что и код Python вашего " -#~ "веб-приложения. Исправьте это и попробуйте " -#~ "еще раз. (Подсказка: Mu ожидал, что " -#~ "здесь будет каталог `templates` :)" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Не удается открыть веб-сайт - сервер не работает." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "У вас должен быть запущен локальный " -#~ "веб-сервер, чтобы просматривать ваш веб-сайт" -#~ " в браузере. Нажмите кнопку «Выполнить»," -#~ " чтобы запустить сервер, а затем " -#~ "повторите попытку." - diff --git a/mu/locale/sk_SK/LC_MESSAGES/mu.po b/mu/locale/sk_SK/LC_MESSAGES/mu.po index 42f69381e..f3407d281 100644 --- a/mu/locale/sk_SK/LC_MESSAGES/mu.po +++ b/mu/locale/sk_SK/LC_MESSAGES/mu.po @@ -1600,545 +1600,3 @@ msgstr "Zobrazí hudbu používanú knižnicou Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Zastaví vašu Pygame Zero hru." - -#~ msgid "Use the REPL to live-code on the ESP8266/ESP32." -#~ msgstr "Použiť REPL na živé kódenie na doskách ESP8266/ESP32." - -#~ msgid "ESP board" -#~ msgstr "Doska ESP" - -#~ msgid "Your script is too long!" -#~ msgstr "Váš skript je príliš dlhý!" - -#~ msgid "" -#~ "Running in debug mode. Use the " -#~ "Stop, Continue, and Step toolbar buttons" -#~ " to debug the script" -#~ msgstr "" -#~ "Spustené v režime ladenia. Na ladenie" -#~ " skriptu použite tlačidlá Zastaviť, " -#~ "Pokračovať a Krokovať, ktoré nájdete na" -#~ " paneli nástrojov." - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Minifikovať Python kód pred jeho zapísaním?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Prepísať vstavaný MicroPython s nasledujúcim" -#~ " hex súborom (ak nič neuvediete, " -#~ "použije sa predvolené nastavenie):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Ako zapísať MicroPython do vášho zariadenia" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. Zistite typ zariadenia (ESP8266 " -#~ "alebo ESP32)
 2. Stiahnite si " -#~ "firmvér zo stránky https://micropython.org/download
 3." -#~ " Pripojte svoje zariadenie
 4. Pomocou" -#~ " tlačidla 'Prehliadať' načítajte .bin " -#~ "súbor
 5. Stlačte 'Vymazať a zapísať" -#~ " firmvér'" - -#~ msgid "Device:" -#~ msgstr "Zariadenie:" - -#~ msgid "Choose device type:" -#~ msgstr "Vyberte typ zariadenia:" - -#~ msgid "Firmware (.bin):" -#~ msgstr "Firmvér (.bin):" - -#~ msgid "Browse" -#~ msgstr "Prehliadať" - -#~ msgid "Erase && write firmware" -#~ msgstr "Vymazať a zapísať firmvér" - -#~ msgid "Select MicroPython firmware (.bin)" -#~ msgstr "Vyberte MicroPython firmvér (.bin)" - -#~ msgid "Firmware (*.bin)" -#~ msgstr "Firmvér (.bin)" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Nastavenie BBC micro:bit" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Zapisovač firmvéru do ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Súborový systém na " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Súbor už existuje; chcete ho prepísať?" - -#~ msgid "File already exists" -#~ msgstr "Súbor už existuje" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Na zariadenie sa kopíruje súbor '{}'." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "Na zariadenie bol úspešne prekopírovaný súbor '{}'." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Odstrániť (nedá sa vrátiť)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Zo zariadenia sa odstraňuje súbor '{}'." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "Zo zariadenia bol úspešne odstránený súbor '{}'." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Zo zariadenia sa získava '{}'. Kopíruje sa do '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Zo zariadenia bol úspešne prekopírovaný súbor '{}' na váš počítač." - -#~ msgid "Open in Mu" -#~ msgstr "Otvoriť v Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "Zapísať do súboru main.py na zariadení" - -#~ msgid "Opening '{}'" -#~ msgstr "Otvára sa '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Súbory na vašom zariadení:" - -#~ msgid "Files on your computer:" -#~ msgstr "Súbory na vašom počítači:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Pri získavaní zoznamu súborov z vášho" -#~ " zariadenia sa vyskytol problém. Pre " -#~ "ďalšie technické informácie o tomto " -#~ "probléme prosím skontrolujte záznamník editora" -#~ " Mu . Prípadne môžete vyskúšať " -#~ "odpojiť/pripojiť vaše zariadenie a/alebo " -#~ "reštartovať Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Pri kopírovaní súboru '{}' na zariadenie" -#~ " nastala chyba. Pre viac informácií " -#~ "prosím skontrolujte záznamník editora Mu." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Pri mazaní súboru '{}' z vášho " -#~ "zariadenia nastala chyba. Pre viac " -#~ "informácií prosím skontrolujte záznamník " -#~ "editora Mu." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Pri získavaní súboru '{}' zo zariadenia" -#~ " nastala chyba. Pre viac informácií " -#~ "prosím skontrolujte záznamník editora Mu." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Nepodarilo sa nájsť runtime pre MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Runtime pre micro:bit, ktorý ste " -#~ "špecifikovali ('{}'), neexistuje. Skúste to" -#~ " prosím znova." - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Programujte v jazyku MicroPython na doskách ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Spustí váš kód priamo na doske {board_name} cez REPL." - -#~ msgid "Files" -#~ msgstr "Súbory" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Pristúpi k súborovému systému na zariadení {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Použite REPL na živé programovanie na doske {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL a súborový systém nemôžu pracovať súčasne." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL spolu so súborovým systémom " -#~ "používajú rovnaké sériové spojenie cez " -#~ "USB. Naraz môže byť aktívne len " -#~ "jedno. Vypnite súborový systém a skúste" -#~ " to znova." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Ploter a súborový systém nemôžu pracovať súčasne." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Ploter spolu so súborovým systémom " -#~ "používajú rovnaké sériové spojenie cez " -#~ "USB. Naraz môže byť aktívne len " -#~ "jedno. Vypnite súborový systém a skúste" -#~ " to znova." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Nič sa nedá spustiť bez aktívnych kariet editora." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Spúšťa sa prenos obsahu aktuálnej karty" -#~ " do zariadenia. Zdá sa, že nemáte " -#~ "otvorené žiadne karty." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Súborový systém nemôže pracovať súčasne s REPL alebo plottrom." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Súborový systém, REPL a ploter používajú" -#~ " rovnaké sériové pripojenie cez USB. " -#~ "Vypnite REPL a zapisovač a skúste " -#~ "to znova." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Nepodarilo sa nájsť pripojenú dosku {board_name}" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Uistite sa prosím, že je zariadenie pripojené k počítaču.\n" -#~ "\n" -#~ "Aby súborový systém fungoval, musí byť" -#~ " na zariadení zapísaný MicroPython.\n" -#~ "\n" -#~ "Nakoniec stlačte na zariadení tlačidlo " -#~ "reset a pred ďalším vyskúšaním počkajte" -#~ " niekoľko sekúnd." - -#~ msgid "{board_name} board" -#~ msgstr "doska {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Programujte zariadenia Lego Spike priamo v jazyku MicroPython." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Programujte BBC micro:bit v jazyku MicroPython." - -#~ msgid "Flash" -#~ msgstr "Zapísať" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Zapíše váš kód na micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Prístup k súborovému systému na zariadení micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Spustí živé programovanie (REPL) na zariadení micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Váš skript je príliš dlhý a minifikácia kódu je vypnutá" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Váš skript je príliš dlhý a minifikátor kódu nie je dostupný" - -#~ msgid "Problem minifying script" -#~ msgstr "Problém pri minifkovaní skriptu" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Náš minifikátor to skúsil, ale váš skript je príliš dlhý!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Nedá sa zapísať \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Nepodarilo sa nájsť pripojený BBC micro:bit." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Uistite sa prosím, že ste nechali " -#~ "dostatok času pre pripojenie a správne" -#~ " nastavenie zariadenia BBC micro:bit vašim" -#~ " počítačom. Môže to trvať niekoľko " -#~ "sekúnd. Prípadne sa pokúste zariadenie " -#~ "znova odpojiť a pripojiť alebo uložte" -#~ " svoju prácu a reštartujte Mu, ak " -#~ "sa zariadenie stále nenašlo." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "Nie je možné uložiť vlastný hex súbor do lokálneho priečinku." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to save " -#~ "the final hex file." -#~ msgstr "" -#~ "Ak je v nastaveniach nakonfigurovaný " -#~ "vlastný hex súbor, na uloženie " -#~ "výsledného hex súboru nie je možné " -#~ "použiť lokálny priečinok." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "Nie je možné použiť vlastný hex súbor bez portu na micro:bit." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "Mu sa nepodarilo zistiť sériový port " -#~ "micro:bit-u. Za normálnych okolností je " -#~ "to v poriadku, pretože Mu môže " -#~ "vložiť kód v jazyku Python do hex" -#~ " súboru na zapísanie. To však nie " -#~ "je možné urobiť s vlastným hex " -#~ "súborom." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Nepodporovaný BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Vaše zariadenie je novšie ako táto " -#~ "verzia Mu. Aktualizujte prosím Mu na " -#~ "najnovšiu verziu, aby podporovala toto " -#~ "zariadenie.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Zapisuje sa na micro:bit" - -#~ msgid "Runtime" -#~ msgstr "" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Kód bol skopírovaný na micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Pri zapisovaní na micro:bit sa vyskytol problém." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Prosím neodpájajte zariadenie, pokiaľ nie " -#~ "je zapisovanie ukončené. Ďalšie informácie " -#~ "nájdete v záznamníku." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Programujte Raspberry Pi Pico priamo v jazyku MicroPython." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards." -#~ msgstr "Použite MicroPython na doskách radu Pyboard." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Nepodarilo sa nájsť pripojené PyBoard zariadenie." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Python súbory pre PyBoard zariadenia s" -#~ " jazykom MicroPython sú uložené priamo " -#~ "na zariadení. Ak ich chcete upravovať," -#~ " musíte mať toto zariadenie pripojené. " -#~ "Pokiaľ zariadenie nepripojíte, Mu bude " -#~ "na ukladanie vášho kódu používať " -#~ "priečinok, ktorý nájdete tu:\n" -#~ "\n" -#~ "{}" - -#~ msgid "Web" -#~ msgstr "Web" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Vytvárajte jednoduché webové stránky so softvérovým rámcom \"Flask\"." - -#~ msgid "Run the web server." -#~ msgstr "Spustí webový server." - -#~ msgid "Open your website in a browser." -#~ msgstr "Otvorí vašu webovú stránku v prehliadači." - -#~ msgid "Templates" -#~ msgstr "Šablóny" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Načíta HTML šablóny použité vo vašej webovej stránke." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Načíta CSS súbory použité vo vašej webovej stránke." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "Otvorí priečinok obsahujúci obrázky použité vo vašej webovej stránke." - -#~ msgid "Stop the web server." -#~ msgstr "Zastaví webový server." - -#~ msgid "This is not a Python file!" -#~ msgstr "Toto nie je Python súbor!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "Nepodarilo sa nájsť priečinok so šablónami!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Webová stránka sa nedá otvoriť - server nie je spustený." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "Ak chcete zobraziť vašu webovú stránku" -#~ " v prehliadači, musíte mať spustený " -#~ "lokálny webový server. Spustite ho " -#~ "kliknutím na tlačidlo 'Spustiť' a potom" -#~ " to skúste to znova." - diff --git a/mu/locale/sv/LC_MESSAGES/mu.po b/mu/locale/sv/LC_MESSAGES/mu.po index 95c97aa75..292505962 100644 --- a/mu/locale/sv/LC_MESSAGES/mu.po +++ b/mu/locale/sv/LC_MESSAGES/mu.po @@ -1581,515 +1581,3 @@ msgstr "Visa musiken som används av Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Stoppa ditt Pygame Zero-spel." - -#~ msgid "Logging to {}" -#~ msgstr "Loggar till {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "Debuggern måste ha namn på ett Python-skript för att kunna köra." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Filer på din micro:bit:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Ditt skript är för långt!" - -#~ msgid " Runtime: {}" -#~ msgstr " Exekveringsmiljö: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Minifiera Python-koden innan flashning?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Skriv öven den inbyggda exekveringsmiljön " -#~ "för MicroPython med den här hex-" -#~ "filen (tomt betyder använd den " -#~ "inbyggda):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Inställningar för BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Filsystemet på micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Filen finns redan; skriva över den?" - -#~ msgid "File already exists" -#~ msgstr "Filen finns redan" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Kopierar ‘{}’ till micro:biten." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "Lyckad kopiering av ‘{}’ till micro:biten." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Ta bort (kan inte ångras)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Tar bort '{}' från micro:biten." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' borttagen från micro:biten." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Hämtar ‘{}’ från micro:biten. Kopierar till ‘{}’." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Kopierat ‘{}’ från micro:biten till din dator." - -#~ msgid "Open in Mu" -#~ msgstr "Öppna i Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Öppnar ‘{}’" - -#~ msgid "Files on your device:" -#~ msgstr "Filer på din dator:" - -#~ msgid "Files on your computer:" -#~ msgstr "Filer på din dator:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Det var problem med att hämta " -#~ "fillistan på micro:biten. Titta i Mus" -#~ " loggar efter teknisk information. " -#~ "Alternativt, försök koppla loss och " -#~ "ansluta din micro:bit och/eller start om" -#~ " Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Det var problem med att kopiera " -#~ "filen ‘{}’ till micro:biten. Titta i " -#~ "Mus loggar efter mer information." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Det var problem med att ta bort" -#~ " ‘{}’ från micro:biten. Titta i Mus" -#~ " loggar efter mer information." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Det var problem med att hämta ‘{}’" -#~ " från micro:biten. Titta i Mus loggar" -#~ " efter mer information." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Kunde inte hitta någon exekveringsmiljö för MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "Exekveringsmiljön (‘{}’) du angav finns inte. Försök igen." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Filer" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Accessa filsystemet på micro:biten." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Använd REPL för att live-koda på micro:biten." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL och filsystem kan inte användas samtidigt." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL och filsystemet använder båda samma" -#~ " seriella USB-anslutning. Bara en kan" -#~ " vara aktiv åt gången. Stäng av " -#~ "filsystemet och försök igen." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Plottern och filsystem kan inte användas samtidigt." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Plottern och filsystemet använder båda " -#~ "samma seriella USB-anslutning. Bara en" -#~ " kan vara aktiv åt gången. Stäng " -#~ "av filsystemet och försök igen." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Filsystemet kan inte användas samtidigt som REPL eller plottern." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Filsystemet, REPL och plottern använder " -#~ "samma seriella USB-koppling. Stänga av" -#~ " REPL och plotter och försök igen." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Kunde inte hitta någon ansluten enhet." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Kontrollera att enheter är kopplad till den här datorn.\n" -#~ "\n" -#~ "Enheten måste ha MicroPython flashat " -#~ "till den innan filsystemet kan fungera." -#~ "\n" -#~ "\n" -#~ "Slutligen, tryck på enhetens reset-knapp" -#~ " och vänta ett par sekunder innan " -#~ "du försöker igen." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Skriv MicroPython för BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Flasha" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Flasha din kod till micro:biten." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Accessa filsystemet på micro:biten." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Använd REPL för att live-koda på micro:biten." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ditt skript är för långt och minifieraren är inte tillgänglig" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ditt skript är för långt och minifieraren är inte tillgänglig" - -#~ msgid "Problem minifying script" -#~ msgstr "Problem med skrytet" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Vår minifierare försökte, men ditt skript är för långt!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Kunde inte flasha “{}”" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Kunde inte hitta en ansluten BBC micro:bit." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Lämna tillräckligt med tid för att " -#~ "BBC micro:biten ska hinna anslutas och" -#~ " konfigureras av din datorn. Det kan" -#~ " ta flera sekunder. Alterntivt, försök " -#~ "koppla loss och anslut sedan enheten " -#~ "igen eller spara ditt arbete och " -#~ "start om Mu om enheten fortfarande " -#~ "inte hittas." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Osupportad BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Din enhet är nyare än den här " -#~ "versionen av Mu. Uppdatera Mu till " -#~ "den senaste version för att stödja " -#~ "enheten.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Flashar “{}” till micro:biten." - -#~ msgid "Runtime" -#~ msgstr "namnlös" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Kopierar koden till micro:biten." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Det var ett problem med att flasha micro:biten." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Koppla inte bort enheten innan " -#~ "flashingen har avslutat. Titta i loggar" -#~ " efter mer information." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Använd CircuitPython på utvecklingskort från Adafruit." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Kunde inte hitta någon ansluten enhet." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Python-filer för Adafruit CircuitPython-" -#~ "enheter lagras på enheten. Därför måste" -#~ " du ha enheten ansluten för att " -#~ "kunna ändra filerna. Tills dess att " -#~ "du ansluter en enhet, kommer Mu " -#~ "använda katalogen:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "…för att lagra din kod." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Visa hjälp om Mu in en webbläsare." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/uk_UA/LC_MESSAGES/mu.po b/mu/locale/uk_UA/LC_MESSAGES/mu.po index dff2dcb18..4a5dc46cc 100644 --- a/mu/locale/uk_UA/LC_MESSAGES/mu.po +++ b/mu/locale/uk_UA/LC_MESSAGES/mu.po @@ -1619,520 +1619,3 @@ msgstr "Показати музику, яку використовує Pygame Ze #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Зупинити гру Pygame Zero." - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Мінімізувати код Python перед записом у пам'ять?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Перевизначення вбудованого середовища виконання " -#~ "MicroPython за допомогою наступного " -#~ "шістнадцяткового файла (порожній означає " -#~ "використання типового):" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "Як записати файл прошивки MicroPython на ваш пристрій" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ "1. Визначте тип пристрою (ESP8266 або" -#~ " ESP32) 2
. Завантажте прошивку " -#~ "з https://micropython.org/download 3
. Підключіть пристрій" -#~ " 4.
Завантажте файл .bin нижче за " -#~ "допомогою кнопки \"Перегляд\" 5.
Натисніть " -#~ "\"Видалити та записати мікропрограмне " -#~ "забезпечення\"" - -#~ msgid "Browse" -#~ msgstr "Огляд" - -#~ msgid "Erase && write firmware" -#~ msgstr "Стирання і запис мікропрограмного забезпечення" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Налаштування BBC micro:bit" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "Завантажувач прошивки ESP" - -#~ msgid "Filesystem on " -#~ msgstr "Файлова система на " - -#~ msgid "Mu" -#~ msgstr "М'ю" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Файл вже існує. Перезаписати його?" - -#~ msgid "File already exists" -#~ msgstr "Файл вже існує" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Копіювання '{}' на пристрій." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "'{}' успішно скопійовано на пристрій." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Видалити (неможливо скасувати)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Видалення '{}' з пристрою." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "'{}' успішно видалено з пристрою." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Отримання '{}' з пристрою. Копіювання до '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Успішно скопійовано '{}' з пристрою на комп 'ютер." - -#~ msgid "Open in Mu" -#~ msgstr "Відкрити в М'ю" - -#~ msgid "Write to main.py on device" -#~ msgstr "Запис до main.py на пристрої" - -#~ msgid "Opening '{}'" -#~ msgstr "Відкривання '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Файли на вашому пристрої:" - -#~ msgid "Files on your computer:" -#~ msgstr "Файли на вашому комп’ютері:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Виникла проблема з отриманням списку " -#~ "файлів на пристрої. Будь ласка, " -#~ "перевірте журнали М'ю для отримання " -#~ "технічної інформації. Крім того, спробуйте " -#~ "вимкнути/підключити пристрій та/або перезапустити" -#~ " М'ю." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Виникла проблема з копіюванням файлу " -#~ "'{}' на пристрій. Будь ласка, перевірте" -#~ " журнали М'ю для отримання додаткової " -#~ "інформації." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Під час видалення \" '{}' з " -#~ "пристрою сталася помилка. Будь ласка, " -#~ "перевірте журнали М'ю для отримання " -#~ "додаткової інформації." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Виникла проблема з отриманням '{}' з" -#~ " пристрою. Будь ласка, перевірте журнали" -#~ " М'ю для отримання додаткової інформації." - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Не вдалося знайти MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Код micro:bit, який ви вказали ('{}')," -#~ " не існує. Будь ласка спробуйте ще" -#~ " раз." - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "Запускайте MicroPython на платах ESP8266/ESP32." - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "Запустіть свій код безпосередньо на {board_name} через REPL." - -#~ msgid "Files" -#~ msgstr "Файли" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Доступ до файлової системи на {board_name}." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Використовуйте REPL для 'живого' коду на {board_name}." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL та файлова система не можуть працювати одночасно." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL і файлова система використовують " -#~ "однакове послідовне з'єднання USB. Тільки " -#~ "один може бути активним у будь-який " -#~ "час. Вимкніть файлову систему та " -#~ "повторіть спробу." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Плотер і файлова система не можуть працювати одночасно." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Плотер і файлова система використовують " -#~ "однакове послідовне з'єднання USB. Тільки " -#~ "один може бути активним у будь-який " -#~ "час. Вимкніть файлову систему та " -#~ "повторіть спробу." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "Нічого не можна запустити без активних вкладок редактора." - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" -#~ "Виконання передає вміст поточної вкладки " -#~ "на пристрій. Схоже, у вас немає " -#~ "відкритих вкладок." - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Файлова система не може працювати одночасно з REPL або плотером." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Файлова система та REPL та плотер " -#~ "використовують одне і те ж послідовне" -#~ " з'єднання USB. Вимкніть REPL та " -#~ "плотер та спробуйте ще раз." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Не вдалося знайти приєднаний пристрій {board_name}." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Переконайтеся, що пристрій підключено до цього комп’ютера.\n" -#~ "\n" -#~ "Перед тим, як файлова система запрацює," -#~ " на пристрої повинен бути прошитий " -#~ "MicroPython.\n" -#~ "\n" -#~ "Нарешті, натисніть кнопку скидання пристрою" -#~ " та зачекайте кілька секунд, перш ніж" -#~ " повторити спробу." - -#~ msgid "{board_name} board" -#~ msgstr "Плата {board_name}" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "Напишіть MicroPython безпосередньо на пристроях Lego Spike." - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro: bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Запускайте MicroPython на BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Прошити" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Прошити код на micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Доступ до файлової системи на micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Використовувати REPL для кодування на micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Ваш скрипт задовгий, а мінімізацію коду вимкнено" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Ваш скрипт занадто довгий, і мініфікатор недоступний" - -#~ msgid "Problem minifying script" -#~ msgstr "Проблема з мініфікацією скрипта" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Наш мініфікатор спробував, але ваш скрипт занадто довгий!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Не вдається прошити \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Не вдалося знайти приєднаний пристрій BBC micro:bit.." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Будь ласка, переконайтеся, що у вас " -#~ "залишається достатньо часу, щоб його " -#~ "правильно приєднати BBC micro:bit та " -#~ "налаштувати комп'ютер. Це може зайняти " -#~ "кілька секунд. Крім того, спробуйте " -#~ "видалити та повторно підключити пристрій " -#~ "або зберегти свою роботу та " -#~ "перезапустити М'ю, якщо пристрій залишиться" -#~ " без підтвердження." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" -#~ "Неможливо зберегти нетиповий шістнадцятковий " -#~ "файл до локального каталогу." - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" -#~ "Якщо у налаштуваннях налаштовано спеціальний" -#~ " шістнадцятковий файл, локальний каталог не" -#~ " може бути використаний для збереження " -#~ "остаточного шістнадцяткового файлу." - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" -#~ "Неможливо використовувати спеціальний " -#~ "шістнадцятковий файл без порту micro:bit." - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" -#~ "М'ю не вдалося виявити послідовний порт" -#~ " micro:bit. Зазвичай це нормально, оскільки" -#~ " М'ю може ввести код Python у " -#~ "HEX для прошивки. Однак, це неможливо" -#~ " зробити з користувацьким файлом HEX." - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "Непідтримуваний BBC micro:bit." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Ваш пристрій новіший, ніж ця версія " -#~ "М'ю. Оновіть М'ю до останньої версії " -#~ "для підтримки цього пристрою.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Прошивання micro:bit." - -#~ msgid "Runtime" -#~ msgstr "Середовище виконання" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Код скопійовано на micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Виникла проблема з прошиванням micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Будь ласка, не відключайте пристрій, " -#~ "поки прошивання не завершиться. Перевірте " -#~ "журнали для отримання додаткової інформації." - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "Напишіть MicroPython безпосередньо на Raspberry Pi Pico." - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Використовувати MicroPython на панелі Pyboard" - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Не вдалося знайти приєднаний пристрій PyBoard." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Файли Python для пристроїв PyBoard " -#~ "MicroPython зберігаються на пристрої. Тому " -#~ "для редагування цих файлів потрібно " -#~ "підключити пристрій. Доки ви не " -#~ "підключите пристрій, М'ю використовуватиме " -#~ "каталог, знайдений тут:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...для зберігання вашого коду." - -#~ msgid "Web" -#~ msgstr "Веб" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "Створюйте прості вебсайти за допомогою вебфреймворку \"Flask\"." - -#~ msgid "Run the web server." -#~ msgstr "Запустити вебсервер." - -#~ msgid "Open your website in a browser." -#~ msgstr "Відкрийте свій вебсайт у вебпереглядачі." - -#~ msgid "Templates" -#~ msgstr "Шаблони" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "Завантажте шаблони HTML, що використовуються вашим вебсайтом." - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "Завантажте файли CSS, що використовуються вашим вебсайтом." - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" -#~ "Відкрийте каталог із зображеннями, які " -#~ "використовуються на вашому вебсайті." - -#~ msgid "Stop the web server." -#~ msgstr "Зупинити сервер" - -#~ msgid "This is not a Python file!" -#~ msgstr "Це не файл Python!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" -#~ "М'ю може обслуговувати лише файл Python." -#~ " Переконайтеся, що поточна вкладка в " -#~ "М'ю відповідає вебзастосунку, а потім " -#~ "спробуйте ще раз." - -#~ msgid "Cannot find template directory!" -#~ msgstr "Не вдається знайти каталог шаблонів!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" -#~ "Щоб обслуговувати вашу вебзастосунок, потрібен" -#~ " каталог 'шаблонів' у тому ж місці," -#~ " що й код Python вашого " -#~ "вебзастосунку. Виправте помилку та повторіть" -#~ " спробу. (Підказка: М'ю очікує, що " -#~ "каталог 'шаблонів' буде тут: )" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "Неможливо відкрити вебсайт - сервер не працює." - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" -#~ "Щоб переглянути свій вебсайт у " -#~ "вебпереглядачі, необхідно запустити локальний " -#~ "вебсервер. Натисніть кнопку \"Запустити\", щоб" -#~ " запустити сервер, а потім спробуйте " -#~ "ще раз." - diff --git a/mu/locale/vi/LC_MESSAGES/mu.po b/mu/locale/vi/LC_MESSAGES/mu.po index 9450cdaaf..e6f3eadf4 100644 --- a/mu/locale/vi/LC_MESSAGES/mu.po +++ b/mu/locale/vi/LC_MESSAGES/mu.po @@ -1590,527 +1590,3 @@ msgstr "Hiển thị nhạc được sử dụng bởi Pygame Zero." #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "Dừng trò chơi Pygame Zero của bạn." - -#~ msgid "Logging to {}" -#~ msgstr "Đang đăng nhập vào {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "Trình gỡ lỗi cần tên tệp lệnh Python để chạy." - -#~ msgid "Files on your micro:bit:" -#~ msgstr "Các tệp trên micro:bit của bạn:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "Tệp lệnh của bạn quá dài!" - -#~ msgid " Runtime: {}" -#~ msgstr "Bộ thực thi: {}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "Thu gọn mã Python trước khi nạp?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "" -#~ "Ghi đè mã chạy MicroPython có sẵn" -#~ " với tệp hex sau (để trống có" -#~ " nghĩa là sử dụng cái mặc " -#~ "định):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" - -#~ msgid "Browse" -#~ msgstr "" - -#~ msgid "Erase && write firmware" -#~ msgstr "" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "Cài đặt BBC micro:bit" - -#~ msgid "Third Party Packages" -#~ msgstr "" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "" - -#~ msgid "Filesystem on " -#~ msgstr "Hệ thống tệp trên micro:bit" - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "Tệp đã tồn tại; ghi đè lên nó?" - -#~ msgid "File already exists" -#~ msgstr "Tệp đã tồn tại" - -#~ msgid "Copying '{}' to device." -#~ msgstr "Đang sao chép '{}' sang micro:bit." - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "Đã sao chép thành công '{}' vào micro:bit." - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "Xóa (không thể hoàn tác)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "Đang xóa '{}' khỏi micro:bit." - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "Đã xóa thành công '{}' khỏi micro:bit." - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "Đang lấy '{}' từ micro:bit. Đang sao chép sang '{}'." - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "Đã sao chép thành công '{}' từ micro:bit vào máy tính của bạn." - -#~ msgid "Open in Mu" -#~ msgstr "Mở trong Mu" - -#~ msgid "Write to main.py on device" -#~ msgstr "" - -#~ msgid "Opening '{}'" -#~ msgstr "Đang mở '{}'" - -#~ msgid "Files on your device:" -#~ msgstr "Các tệp trên máy tính của bạn:" - -#~ msgid "Files on your computer:" -#~ msgstr "Các tệp trên máy tính của bạn:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "" -#~ "Đã xảy ra sự cố khi lấy danh" -#~ " sách tệp trên micro:bit. Vui lòng" -#~ " kiểm tra nhật ký của Mu để " -#~ "biết thông tin cụ thể. Một cách" -#~ " khác, hãy thử rút ra/cắm vào " -#~ "micro:bit và/hoặc khởi động lại Mu." - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "" -#~ "Đã xảy ra sự cố khi sao chép" -#~ " tệp '{}' vào micro:bit. Vui lòng " -#~ "kiểm tra nhật ký của Mu để " -#~ "biết thêm thông tin." - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Đã xảy ra sự cố khi xóa '{}'" -#~ " khỏi micro:bit. Vui lòng kiểm tra" -#~ " nhật ký của Mu để biết thêm" -#~ " thông tin." - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "" -#~ "Đã xảy ra sự cố khi lấy '{}'" -#~ " từ micro:bit. Vui lòng kiểm tra " -#~ "nhật ký của Mu để biết thêm " -#~ "thông tin." - -#~ msgid " compatible" -#~ msgstr "" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "Không thể tìm thấy trình chạy MicroPython." - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "" -#~ "Trình chạy micro:bit mà bạn đã chỉ" -#~ " định ('{}') không tồn tại. Vui " -#~ "lòng thử lại." - -#~ msgid "" -#~ "The mount command (\"{}\") returned an" -#~ " error: {}. Mu will continue as " -#~ "if a device isn't plugged in." -#~ msgstr "" - -#~ msgid "" -#~ "If your Circuit Python device is " -#~ "plugged in, you need to \"Share " -#~ "with Linux\" on the CIRCUITPY drive " -#~ "in the \"Files\" app then restart " -#~ "Mu." -#~ msgstr "" - -#~ msgid "ESP MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "" - -#~ msgid "Files" -#~ msgstr "Tệp" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "Truy cập hệ thống tệp trên micro:bit." - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "Sử dụng REPL để chạy lệnh tức thời trên micro:bit." - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL và hệ thống tập tin không thể làm việc cùng một lúc." - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "" -#~ "REPL và hệ thống tệp đều sử " -#~ "dụng cùng một kết nối nối tiếp " -#~ "USB. Vào mỗi thời điểm, chỉ một" -#~ " cái có thể hoạt động. Tắt hệ" -#~ " thống tệp và thử lại." - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "Hệ thống tệp và máy vẽ không thể hoạt động cùng một lúc." - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "" -#~ "Máy vẽ và hệ thống tệp đều " -#~ "sử dụng cùng một kết nối nối " -#~ "tiếp USB. Vào mỗi thời điểm, chỉ" -#~ " một cái có thể hoạt động. Tắt" -#~ " hệ thống tệp và thử lại." - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "Hệ thống tệp không thể hoạt động cùng lúc với REPL hoặc bản vẽ." - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "" -#~ "Hệ thống tệp, REPL và máy vẽ " -#~ "sử dụng cùng một kết nối nối " -#~ "tiếp USB. Hãy tắt REPL và máy " -#~ "vẽ rồi thử lại." - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Không thể tìm thấy thiết bị được gắn vào." - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "Hãy đảm bảo rằng thiết bị được cắm vào máy tính này.\n" -#~ "\n" -#~ "Thiết bị phải được nạp sẵn " -#~ "MicroPython trước khi hệ thống tệp " -#~ "hoạt động.\n" -#~ "\n" -#~ "Cuối cùng, nhấn nút reset thiết bị và đợi vài giây trước khi thử lại." - -#~ msgid "{board_name} board" -#~ msgstr "" - -#~ msgid "Lego MicroPython" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "Viết MicroPython cho BBC micro:bit." - -#~ msgid "Flash" -#~ msgstr "Nạp" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "Nạp mã của bạn lên micro:bit." - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "Truy cập hệ thống tệp trên micro:bit." - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "Sử dụng REPL để chạy lệnh tức thời trên micro:bit." - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "Tệp lệnh của bạn quá dài và bộ thu gọn mã không khả dụng" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "Tệp lệnh của bạn quá dài và bộ thu gọn mã không khả dụng" - -#~ msgid "Problem minifying script" -#~ msgstr "Có sự cố với tệp lệnh" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "Trình thu gọn mã đã thử, nhưng tệp lệnh của bạn quá dài!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "Không thể nạp \"{}\"" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "Không thể tìm thấy BBC micro:bit được gắn vào." - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "Hãy đảm bảo bạn đợi đủ thời " -#~ "gian cho BBC micro:bit để kết nối" -#~ " vào định cấu hình chính xác " -#~ "bằng máy tính của bạn. Điều này" -#~ " có thể mất vài giây. Ngoài ra," -#~ " hãy thử gỡ ra và gắn lại " -#~ "thiết bị, hoặc lưu công việc của" -#~ " bạn và khởi động lại Mu nếu" -#~ " thiết bị vẫn không được nhận " -#~ "ra." - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "BBC micro:bit không được hỗ trợ." - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "Thiết bị của bạn mới hơn phiên " -#~ "bản Mu này. Vui lòng cập nhật " -#~ "Mu lên phiên bản mới nhất để " -#~ "hỗ trợ thiết bị này.\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "Nạp \"{}\" lên micro:bit." - -#~ msgid "Runtime" -#~ msgstr "Chưa có tiêu đề" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "Đã sao chép mã vào micro:bit." - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "Đã xảy ra sự cố khi nạp micro:bit." - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "" -#~ "Vui lòng không ngắt kết nối thiết" -#~ " bị cho đến khi việc nạp hoàn" -#~ " tất. Vui lòng kiểm tra nhật ký" -#~ " để biết thêm thông tin." - -#~ msgid "micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "RP2040" -#~ msgstr "" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "Sử dụng CircuitPython trên dòng bo mạch của Adafruit." - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "Không thể tìm thấy thiết bị được gắn vào." - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Các tệp Python cho các thiết bị" -#~ " Adafruit CircuitPython được lưu trữ " -#~ "trên thiết bị. Do đó, để chỉnh " -#~ "sửa các tệp này, bạn cần phải " -#~ "cắm thiết bị vào. Cho đến khi " -#~ "bạn cắm thiết bị, Mu sẽ sử " -#~ "dụng thư mục được tìm thấy ở " -#~ "đây:\n" -#~ "\n" -#~ "{}\n" -#~ "\n" -#~ "... để lưu trữ chương trình của bạn." - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "" - -#~ msgid "Run the web server." -#~ msgstr "" - -#~ msgid "Open your website in a browser." -#~ msgstr "Hiển thị trợ giúp về Mu trong trình duyệt." - -#~ msgid "Templates" -#~ msgstr "" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "" - -#~ msgid "CSS" -#~ msgstr "" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "" - -#~ msgid "Stop the web server." -#~ msgstr "" - -#~ msgid "This is not a Python file!" -#~ msgstr "" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "" - -#~ msgid "Cannot find template directory!" -#~ msgstr "" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "" - diff --git a/mu/locale/zh_CN/LC_MESSAGES/mu.po b/mu/locale/zh_CN/LC_MESSAGES/mu.po index 5d926624f..f3cc25c91 100644 --- a/mu/locale/zh_CN/LC_MESSAGES/mu.po +++ b/mu/locale/zh_CN/LC_MESSAGES/mu.po @@ -1537,452 +1537,3 @@ msgstr "显示 Pygame Zero 使用的音乐。" #: plugins/pygamezero/nu_pygamezero/mode.py:151 msgid "Stop your Pygame Zero game." msgstr "停止你的 Pygame Zero 游戏。" - -#~ msgid "Logging to {}" -#~ msgstr "记录日志到 {}" - -#~ msgid "Debugger requires a Python script filename to run." -#~ msgstr "调试器需要一个Python脚本才能运行。" - -#~ msgid "Files on your micro:bit:" -#~ msgstr "在 micro:bit 上的文件:" - -#~ msgid "{} [{}:{}]" -#~ msgstr "{} [{}:{}]" - -#~ msgid "Your script is too long!" -#~ msgstr "你的脚本太长了!" - -#~ msgid " Runtime: {}" -#~ msgstr " 运行时:{}" - -#~ msgid "Minify Python code before flashing?" -#~ msgstr "在刷入之前简化 Python 代码?" - -#~ msgid "" -#~ "Override the built-in MicroPython " -#~ "runtime with the following hex file " -#~ "(empty means use the default):" -#~ msgstr "使用下面的hex文件重写内置的 MicroPython 运行环境(留空使用默认文件):" - -#~ msgid "" -#~ "Please select the language for Mu's " -#~ "user interface from the choices listed" -#~ " below. Restart Mu for these " -#~ "changes to take effect." -#~ msgstr "" - -#~ msgid "How to flash MicroPython to your device" -#~ msgstr "如何将 MicroPython 刷入到你的设备" - -#~ msgid "" -#~ " 1. Determine the type of device" -#~ " (ESP8266 or ESP32)
 2. Download" -#~ " firmware from the https://micropython.org/download
 3." -#~ " Connect your device
 4. Load the" -#~ " .bin file below using the 'Browse'" -#~ " button
 5. Press 'Erase & write" -#~ " firmware'" -#~ msgstr "" -#~ " 1. 确定设备类型( ESP8266 或 ESP32 ) 2. 从 https://micropython.org/download " -#~ "下载固件
 3. 连接设备
 4. 用“浏览”按钮加载 .bin" -#~ " 文件
 5. 点击“擦除 & 写入固件”" - -#~ msgid "Browse" -#~ msgstr "浏览" - -#~ msgid "Erase && write firmware" -#~ msgstr "擦除 & 写入固件" - -#~ msgid "BBC micro:bit Settings" -#~ msgstr "BBC micro:bit 设置" - -#~ msgid "ESP Firmware flasher" -#~ msgstr "ESP 固件刷入器" - -#~ msgid "Filesystem on " -#~ msgstr "micro:bit 上的文件系统 " - -#~ msgid "Mu" -#~ msgstr "Mu" - -#~ msgid "File already exists; overwrite it?" -#~ msgstr "文件已存在,是否覆盖?" - -#~ msgid "File already exists" -#~ msgstr "文件已存在" - -#~ msgid "Copying '{}' to device." -#~ msgstr "正在将“{}”复制到设备。" - -#~ msgid "'{}' successfully copied to device." -#~ msgstr "已成功将“{}”复制到设备。" - -#~ msgid "Delete (cannot be undone)" -#~ msgstr "删除(无法撤销)" - -#~ msgid "Deleting '{}' from device." -#~ msgstr "正在从设备中删除“{}”。" - -#~ msgid "'{}' successfully deleted from device." -#~ msgstr "已成功从设备中删除“{}”。" - -#~ msgid "Getting '{}' from device. Copying to '{}'." -#~ msgstr "正从设备中获取“{}”并复制到“{}”。" - -#~ msgid "Successfully copied '{}' from the device to your computer." -#~ msgstr "已成功将“{}”从设备复制到你的电脑上。" - -#~ msgid "Open in Mu" -#~ msgstr "在 Mu 中打开" - -#~ msgid "Write to main.py on device" -#~ msgstr "写入到设备上的 main.py" - -#~ msgid "Opening '{}'" -#~ msgstr "正在打开“{}”" - -#~ msgid "Files on your device:" -#~ msgstr "设备上的文件:" - -#~ msgid "Files on your computer:" -#~ msgstr "电脑上的文件:" - -#~ msgid "" -#~ "There was a problem getting the " -#~ "list of files on the device. " -#~ "Please check Mu's logs for technical " -#~ "information. Alternatively, try unplugging" -#~ "/plugging-in your device and/or restarting" -#~ " Mu." -#~ msgstr "获取设备上的文件列表时出现问题。 请查看Mu的日志以获取技术信息。 或者尝试重新插拔设备和/或重启 Mu 。" - -#~ msgid "" -#~ "There was a problem copying the " -#~ "file '{}' onto the device. Please " -#~ "check Mu's logs for more information." -#~ msgstr "将文件“{}”复制到设备上时出现问题。 请查看 Mu 的日志以获取更多信息。" - -#~ msgid "" -#~ "There was a problem deleting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "从设备删除“{}”时出现问题。 请查看 Mu 的日志以获取更多信息。" - -#~ msgid "" -#~ "There was a problem getting '{}' " -#~ "from the device. Please check Mu's " -#~ "logs for more information." -#~ msgstr "从设备获取“{}\"时出现问题。 请查看 Mu 的日志以获取更多信息。" - -#~ msgid "Could not find MicroPython runtime." -#~ msgstr "找不到 MicroPython 运行时。" - -#~ msgid "" -#~ "The micro:bit runtime you specified " -#~ "('{}') does not exist. Please try " -#~ "again." -#~ msgstr "您指定的 micro:bit 运行时(”{}“)不存在。请再试一次。" - -#~ msgid "ESP MicroPython" -#~ msgstr "ESP MicroPython" - -#~ msgid "Write MicroPython on ESP8266/ESP32 boards." -#~ msgstr "向 ESP8266/ESP32 开发板刷入 MicroPython。" - -#~ msgid "Run your code directly on the {board_name} via the REPL." -#~ msgstr "通过 REPL 直接在 {board_name} 上运行你的代码。" - -#~ msgid "Files" -#~ msgstr "文件" - -#~ msgid "Access the file system on {board_name}." -#~ msgstr "访问 {board_name} 上的文件系统。" - -#~ msgid "Use the REPL to live-code on the {board_name}." -#~ msgstr "使用 REPL 在 {board_name} 上实时编写代码。" - -#~ msgid "REPL and file system cannot work at the same time." -#~ msgstr "REPL和文件系统不能同时工作。" - -#~ msgid "" -#~ "The REPL and file system both use" -#~ " the same USB serial connection. Only" -#~ " one can be active at any time." -#~ " Toggle the file system off and " -#~ "try again." -#~ msgstr "REPL和文件系统都使用相同的USB串口通讯。任何时候只能使用其中一个功能。请关闭文件系统,然后重试。" - -#~ msgid "The plotter and file system cannot work at the same time." -#~ msgstr "绘图器和文件系统无法同时工作。" - -#~ msgid "" -#~ "The plotter and file system both " -#~ "use the same USB serial connection. " -#~ "Only one can be active at any " -#~ "time. Toggle the file system off " -#~ "and try again." -#~ msgstr "绘图器和文件系统都使用相同的USB串口通讯。任何时候只能使用其中一个功能。请关闭文件系统,然后重试。" - -#~ msgid "Cannot run anything without any active editor tabs." -#~ msgstr "不能在没有活动编辑器标签页时运行程序。" - -#~ msgid "" -#~ "Running transfers the content of the " -#~ "current tab onto the device. It " -#~ "seems like you don't have any " -#~ "tabs open." -#~ msgstr "“运行”将把当前编辑器标签页的内容传输至设备。未能找到任何打开的标签页。" - -#~ msgid "File system cannot work at the same time as the REPL or plotter." -#~ msgstr "文件系统无法与REPL或绘图器同时工作。" - -#~ msgid "" -#~ "The file system and the REPL and" -#~ " plotter use the same USB serial " -#~ "connection. Toggle the REPL and plotter" -#~ " off and try again." -#~ msgstr "文件系统、REPL、绘图器使用相同的USB串口通讯。 请关闭REPL和绘图器,然后重试。" - -#~ msgid "Could not find an attached {board_name}" -#~ msgstr "Could not find an attached {board_name}" - -#~ msgid "" -#~ "Please make sure the device is plugged into this computer.\n" -#~ "\n" -#~ "The device must have MicroPython flashed" -#~ " onto it before the file system " -#~ "will work.\n" -#~ "\n" -#~ "Finally, press the device's reset button" -#~ " and wait a few seconds before " -#~ "trying again." -#~ msgstr "" -#~ "请确保已将设备插入此计算机。\n" -#~ "\n" -#~ "在文件系统工作之前,设备必须已输入MicroPython。\n" -#~ "\n" -#~ "最后,按设备的重置(reset)按钮并等待几秒钟后再重试。" - -#~ msgid "{board_name} board" -#~ msgstr "{board_name} 开发板" - -#~ msgid "Lego MicroPython" -#~ msgstr "Lego MicroPython" - -#~ msgid "Write MicroPython directly on Lego Spike devices." -#~ msgstr "向 Lego Spike 设备直接刷入 MicroPython 。" - -#~ msgid "BBC micro:bit" -#~ msgstr "BBC micro:bit" - -#~ msgid "Write MicroPython for the BBC micro:bit." -#~ msgstr "为 BBC micro:bit 编写 MicroPython 。" - -#~ msgid "Flash" -#~ msgstr "刷入" - -#~ msgid "Flash your code onto the micro:bit." -#~ msgstr "将代码刷入到 micro:bit 上。" - -#~ msgid "Access the file system on the micro:bit." -#~ msgstr "访问 micro:bit 上的文件系统。" - -#~ msgid "Use the REPL to live-code on the micro:bit." -#~ msgstr "使用 REPL 在 micro:bit 上实时编写代码。" - -#~ msgid "Your script is too long and code minification is disabled" -#~ msgstr "您的脚本太长,简化器已被禁用" - -#~ msgid "Your script is too long and the minifier isn't available" -#~ msgstr "您的脚本太长,简化器不可用" - -#~ msgid "Problem minifying script" -#~ msgstr "无法简化脚本" - -#~ msgid "Our minifier tried but your script is too long!" -#~ msgstr "我们的简化器尝试过了,但你的脚本实在太长!" - -#~ msgid "Unable to flash \"{}\"" -#~ msgstr "无法刷入“{}”" - -#~ msgid "Could not find an attached BBC micro:bit." -#~ msgstr "找不到已连接的 BBC micro:bit 。" - -#~ msgid "" -#~ "Please ensure you leave enough time " -#~ "for the BBC micro:bit to be " -#~ "attached and configured correctly by " -#~ "your computer. This may take several " -#~ "seconds. Alternatively, try removing and " -#~ "re-attaching the device or saving " -#~ "your work and restarting Mu if the" -#~ " device remains unfound." -#~ msgstr "" -#~ "请确保您留出了足够的时间让您的计算机正确连接和配置 BBC micro:bit " -#~ "设备。这可能需要几秒钟的时间。 或者您可以尝试保存文件并重新连接设备,如果仍未发现设备,您还可以尝试重新启动 Mu" -#~ " 。" - -#~ msgid "Cannot save a custom hex file to a local directory." -#~ msgstr "无法将自定义 hex 文件保存至本地目录。" - -#~ msgid "" -#~ "When a custom hex file is " -#~ "configured in the settings a local " -#~ "directory cannot be used to saved " -#~ "the final hex file." -#~ msgstr "" - -#~ msgid "Cannot use a custom hex file without micro:bit port." -#~ msgstr "" - -#~ msgid "" -#~ "Mu was unable to detect the " -#~ "micro:bit serial port. Normally this is" -#~ " okay, as Mu can inject the " -#~ "Python code into the hex to flash." -#~ " However, this cannot be done with" -#~ " a custom hex file." -#~ msgstr "" - -#~ msgid "Unsupported BBC micro:bit." -#~ msgstr "不支持的 BBC micro:bit 。" - -#~ msgid "" -#~ "Your device is newer than this " -#~ "version of Mu. Please update Mu to" -#~ " the latest version to support this" -#~ " device.\n" -#~ "\n" -#~ "https://codewith.mu/" -#~ msgstr "" -#~ "您的设备比此版本的 Mu 更新。 请将 Mu 更新到最新版本以支持此设备。\n" -#~ "\n" -#~ "https://codewith.mu/" - -#~ msgid "Flashing the micro:bit" -#~ msgstr "正在刷入到 micro:bit " - -#~ msgid "Runtime" -#~ msgstr "运行时" - -#~ msgid "Copied code onto micro:bit." -#~ msgstr "已将代码复制到 micro:bit 。" - -#~ msgid "There was a problem flashing the micro:bit." -#~ msgstr "刷入程序到 micro:bit 时出现了一个问题。" - -#~ msgid "" -#~ "Please do not disconnect the device " -#~ "until flashing has completed. Please " -#~ "check the logs for more information." -#~ msgstr "在刷入完成之前,请不要断开设备。 请查看日志以获取更多信息。" - -#~ msgid "micro:bit" -#~ msgstr "micro:bit" - -#~ msgid "RP2040" -#~ msgstr "RP2040" - -#~ msgid "Write MicroPython directly on a Raspberry Pi Pico." -#~ msgstr "向 Raspberry Pi Pico 直接刷入 MicroPython 。" - -#~ msgid "Pyboard MicroPython" -#~ msgstr "Pyboard MicroPython" - -#~ msgid "Use MicroPython on the Pyboard line of boards" -#~ msgstr "在 Pyboard 系列开发板上使用 MicroPython " - -#~ msgid "Could not find an attached PyBoard device." -#~ msgstr "找不到已连接的设备。" - -#~ msgid "" -#~ "Python files for PyBoard MicroPython " -#~ "devices are stored on the device. " -#~ "Therefore, to edit these files you " -#~ "need to have the device plugged " -#~ "in. Until you plug in a device," -#~ " Mu will use the directory found " -#~ "here:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "...to store your code." -#~ msgstr "" -#~ "Adafruit CircuitPython 设备的 Python 文件存储在设备上。" -#~ " 因此,要编辑这些文件,需要您插入设备。在插入设备之前,Mu 将使用这个目录:\n" -#~ "\n" -#~ " {}\n" -#~ "\n" -#~ "…来存储您的代码。" - -#~ msgid "Web" -#~ msgstr "" - -#~ msgid "Build simple websites with the \"Flask\" web framework." -#~ msgstr "使用 Flask Web 框架构建简单的网页。" - -#~ msgid "Run the web server." -#~ msgstr "运行网页服务器。" - -#~ msgid "Open your website in a browser." -#~ msgstr "在浏览器中打开你的网站。" - -#~ msgid "Templates" -#~ msgstr "模板" - -#~ msgid "Load HTML templates used by your website." -#~ msgstr "加载你的网站使用的 HTML 模板。" - -#~ msgid "CSS" -#~ msgstr "CSS" - -#~ msgid "Load CSS files used by your website." -#~ msgstr "加载你的网站使用的 CSS 文件。" - -#~ msgid "Open the directory containing images used by your website." -#~ msgstr "打开你的网站使用的图片文件目录。" - -#~ msgid "Stop the web server." -#~ msgstr "停止网页服务器。" - -#~ msgid "This is not a Python file!" -#~ msgstr "这不是 Python 文件!" - -#~ msgid "" -#~ "Mu is only able to serve a " -#~ "Python file. Please make sure the " -#~ "current tab in Mu is the one " -#~ "for your web application and then " -#~ "try again." -#~ msgstr "Mu 只能识别 Python 文件。请确认 Mu 编辑器当前标签页打开的文件属于你的网页应用,然后重试。" - -#~ msgid "Cannot find template directory!" -#~ msgstr "无法找到模板目录!" - -#~ msgid "" -#~ "To serve your web application, there " -#~ "needs to be a 'templates' directory " -#~ "in the same place as your web " -#~ "application's Python code. Please fix " -#~ "this and try again. (Hint: Mu was" -#~ " expecting the `templates` directory to " -#~ "be here: )" -#~ msgstr "" - -#~ msgid "Cannot Open Website - Server not Running." -#~ msgstr "无法打开网站 - 服务器未运行。" - -#~ msgid "" -#~ "You must have the local web server" -#~ " running in order to view your " -#~ "website in a browser. Click on the" -#~ " 'Run' button to start the server " -#~ "and then try again." -#~ msgstr "要在浏览器中访问你的网站,必须在本地运行 Web 服务器。点击“运行”按钮以启动服务器,然后重试。" - diff --git a/mu/logic.py b/mu/logic.py index b69d39fec..e9d9e2c57 100644 --- a/mu/logic.py +++ b/mu/logic.py @@ -63,17 +63,6 @@ FLAKE_REGEX = re.compile(r".*:(\d+):(\d+):?\s+(.*)") # Regex to match undefined name errors for given builtins BUILTINS_REGEX = r"^undefined name '({})'" -# Regex to match false positive flake errors if microbit.* is expanded. -EXPAND_FALSE_POSITIVE = re.compile(r"^.*'microbit\.(\w+)' imported but unused$") -# The text to which "from microbit import \*" should be expanded. -EXPANDED_IMPORT = ( - "from microbit import pin15, pin2, pin0, pin1, " - " pin3, pin6, pin4, i2c, pin5, pin7, pin8, Image, " - "pin9, pin14, pin16, reset, pin19, temperature, " - "sleep, pin20, button_a, button_b, running_time, " - "accelerometer, display, uart, spi, panic, pin13, " - "pin12, pin11, pin10, compass" -) MOTD = [ # Candidate phrases for the message of the day (MOTD). _("Hello, World!"), _( @@ -348,7 +337,7 @@ def save_session(session): settings.session.save() -def check_flake(filename, code, builtins=None): +def check_flake(filename, code, builtins=None, star_imports=None): """ Given a filename and some code to be checked, uses the PyFlakesmodule to return a dictionary describing issues of code quality per line. See: @@ -356,24 +345,38 @@ def check_flake(filename, code, builtins=None): https://github.com/PyCQA/pyflakes If a list symbols is passed in as "builtins" these are assumed to be - additional builtins available when run by Mu. + additional builtins available when run by Nu. + + `star_imports` maps a module to the names its ``import *`` brings in + (a mode's `star_imports`, e.g. the micro:bit's ``from microbit import + *``): the import is checked as if it named them, so pyflakes can still + spot undefined names, and the names left unused aren't reported. """ - import_all = "from microbit import *" in code - if import_all: - # Massage code so "from microbit import *" is expanded so the symbols - # are known to flake. - code = code.replace("from microbit import *", EXPANDED_IMPORT) + expanded = [] + for module, names in (star_imports or {}).items(): + star = "from {} import *".format(module) + if star in code and names: + # On one line, so the line numbers stay the same. + code = code.replace( + star, "from {} import {}".format(module, ", ".join(names)) + ) + expanded.append(module) + unused_expanded = None + if expanded: + unused_expanded = re.compile( + r"^'({})\.\w+' imported but unused$".format( + "|".join(re.escape(module) for module in expanded) + ) + ) reporter = MuFlakeCodeReporter() check(code, filename, reporter) if builtins: builtins_regex = re.compile(BUILTINS_REGEX.format("|".join(builtins))) feedback = {} for log in reporter.log: - if import_all: - # Guard to stop unwanted "microbit.* imported but unused" messages. - message = log["message"] - if EXPAND_FALSE_POSITIVE.match(message): - continue + if unused_expanded and unused_expanded.match(log["message"]): + # Names an expanded "import *" brought in but the code didn't use. + continue if builtins: if builtins_regex.match(log["message"]): continue @@ -884,12 +887,6 @@ def restore_session(self, paths=None): old_window = old_session.get("window", {}) self._view.size_window(**old_window) - # - # Doesn't seem to do anything useful - # - # ~ if old_session is None: - # ~ self._view.set_theme(self.theme) - # handle os passed file last, # so it will not be focused over by another tab if paths and len(paths) > 0: @@ -1255,8 +1252,13 @@ def check_code(self): logger.info("Checking code.") self._view.reset_annotations() filename = tab.path if tab.path else _("untitled") - builtins = self.modes[self.mode].builtins - flake = check_flake(filename, tab.text(), builtins) + mode = self.modes[self.mode] + flake = check_flake( + filename, + tab.text(), + mode.builtins, + getattr(mode, "star_imports", None), + ) if flake: logger.info(flake) self._view.annotate_code(flake, "error") @@ -1404,7 +1406,6 @@ def show_admin(self, event=None, focus=None): settings, "\n".join(packages), mode, - self.connected_devices, environment=environment, focus=focus, plugins=plugins, @@ -1516,12 +1517,10 @@ def change_mode(self, mode): Given the name of a mode, will make the necessary changes to put the editor into the new mode. """ - # Remove the old mode's REPL / filesystem / plotter if required. + # Remove the old mode's REPL / plotter if required. old_mode = self.modes[self.mode] if hasattr(old_mode, "remove_repl"): old_mode.remove_repl() - if hasattr(old_mode, "remove_fs"): - old_mode.remove_fs() if hasattr(old_mode, "remove_plotter"): if old_mode.plotter: old_mode.remove_plotter() diff --git a/mu/modes/base.py b/mu/modes/base.py index 70288623e..7d1daf047 100644 --- a/mu/modes/base.py +++ b/mu/modes/base.py @@ -26,14 +26,12 @@ import pkgutil from serial import Serial from PyQt6.QtSerialPort import QSerialPort, QSerialPortInfo -from PyQt6.QtCore import QObject, pyqtSignal, QIODevice, QTimer +from PyQt6.QtCore import QObject, pyqtSignal, QIODevice from mu.logic import Device from .. import config, settings -ENTER_RAW_MODE = b"\x01" # CTRL-A EXIT_RAW_MODE = b"\x02" # CTRL-B KEYBOARD_INTERRUPT = b"\x03" # CTRL-C -SOFT_REBOOT = b"\x04" # CTRL-C logger = logging.getLogger(__name__) @@ -122,42 +120,6 @@ def send_interrupt(self): self.write(EXIT_RAW_MODE) # CTRL-B self.write(KEYBOARD_INTERRUPT) # CTRL-C - def execute(self, commands): - """ - Execute a series of commands over a period of time (scheduling - remaining commands to be run in the next iteration of the event loop). - """ - if commands: - command = commands[0] - logger.info("Sending command {}".format(command)) - self.write(command) - remainder = commands[1:] - remaining_task = lambda commands=remainder: self.execute(commands) - QTimer.singleShot(2, remaining_task) - - def send_commands(self, commands): - """ - Send commands to the REPL via raw mode. - """ - # Sequence of commands to get into raw mode (From pyboard.py). - raw_on = [ - KEYBOARD_INTERRUPT, - KEYBOARD_INTERRUPT, - ENTER_RAW_MODE, - SOFT_REBOOT, - KEYBOARD_INTERRUPT, - KEYBOARD_INTERRUPT, - ] - - newline = [b'print("\\n");'] - commands = [c.encode("utf-8") + b"\r" for c in commands] - commands.append(b"\r") - commands.append(SOFT_REBOOT) - raw_off = [EXIT_RAW_MODE] - command_sequence = raw_on + newline + commands + raw_off - logger.info(command_sequence) - self.execute(command_sequence) - class BaseMode(QObject): """ @@ -174,6 +136,9 @@ class BaseMode(QObject): has_debugger = False save_timeout = 5 #: Number of seconds to wait before saving work. builtins = None #: Symbols to assume as builtins when checking code style. + #: Modules whose ``import *`` Check should expand, each mapped to the + #: names it brings in, so it can still spot undefined names. + star_imports = {} file_extensions = [] module_names = MODULE_NAMES code_template = _("# Write your code here :-)") diff --git a/mu/plugin/errors.py b/mu/plugin/errors.py index 06eebf6f0..3b9d3f83b 100644 --- a/mu/plugin/errors.py +++ b/mu/plugin/errors.py @@ -84,7 +84,6 @@ def _workspace_dir_fallback(): "open_file": None, "remove_repl": None, "remove_plotter": None, - "remove_fs": None, "ensure_workspace_assets": None, } diff --git a/mu/resources/images/check-bad.png b/mu/resources/images/check-bad.png deleted file mode 100644 index 33a9c7afa..000000000 Binary files a/mu/resources/images/check-bad.png and /dev/null differ diff --git a/mu/resources/images/check-good.png b/mu/resources/images/check-good.png deleted file mode 100644 index 7f8990f61..000000000 Binary files a/mu/resources/images/check-good.png and /dev/null differ diff --git a/mu/resources/images/check.png b/mu/resources/images/check.png deleted file mode 100644 index 06aa3e140..000000000 Binary files a/mu/resources/images/check.png and /dev/null differ diff --git a/mu/resources/images/css.png b/mu/resources/images/css.png deleted file mode 100644 index 967dcb553..000000000 Binary files a/mu/resources/images/css.png and /dev/null differ diff --git a/mu/resources/images/css.svg b/mu/resources/images/css.svg deleted file mode 100644 index cb818a8df..000000000 --- a/mu/resources/images/css.svg +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/mu/resources/images/debug.png b/mu/resources/images/debug.png deleted file mode 100644 index 340c8aaed..000000000 Binary files a/mu/resources/images/debug.png and /dev/null differ diff --git a/mu/resources/images/dropdown-arrow-contrast.png b/mu/resources/images/dropdown-arrow-contrast.png deleted file mode 100644 index 85fcb06c9..000000000 Binary files a/mu/resources/images/dropdown-arrow-contrast.png and /dev/null differ diff --git a/mu/resources/images/dropdown-arrow-night.png b/mu/resources/images/dropdown-arrow-night.png deleted file mode 100644 index f18c88358..000000000 Binary files a/mu/resources/images/dropdown-arrow-night.png and /dev/null differ diff --git a/mu/resources/images/dropdown-arrow.png b/mu/resources/images/dropdown-arrow.png deleted file mode 100644 index 0fde20965..000000000 Binary files a/mu/resources/images/dropdown-arrow.png and /dev/null differ diff --git a/mu/resources/images/help.png b/mu/resources/images/help.png deleted file mode 100644 index 76d3ed391..000000000 Binary files a/mu/resources/images/help.png and /dev/null differ diff --git a/mu/resources/images/load.png b/mu/resources/images/load.png deleted file mode 100644 index 39b1b16ee..000000000 Binary files a/mu/resources/images/load.png and /dev/null differ diff --git a/mu/resources/images/logs.png b/mu/resources/images/logs.png deleted file mode 100644 index 7b1a14d9d..000000000 Binary files a/mu/resources/images/logs.png and /dev/null differ diff --git a/mu/resources/images/new.png b/mu/resources/images/new.png deleted file mode 100644 index 1b7354622..000000000 Binary files a/mu/resources/images/new.png and /dev/null differ diff --git a/mu/resources/images/plotter.png b/mu/resources/images/plotter.png deleted file mode 100644 index 91d3824c9..000000000 Binary files a/mu/resources/images/plotter.png and /dev/null differ diff --git a/mu/resources/images/python.png b/mu/resources/images/python.png deleted file mode 100644 index 1d526cf97..000000000 Binary files a/mu/resources/images/python.png and /dev/null differ diff --git a/mu/resources/images/quit.png b/mu/resources/images/quit.png deleted file mode 100644 index 8e1023124..000000000 Binary files a/mu/resources/images/quit.png and /dev/null differ diff --git a/mu/resources/images/repl.png b/mu/resources/images/repl.png deleted file mode 100644 index d779cd81b..000000000 Binary files a/mu/resources/images/repl.png and /dev/null differ diff --git a/mu/resources/images/run.png b/mu/resources/images/run.png deleted file mode 100644 index f3d301671..000000000 Binary files a/mu/resources/images/run.png and /dev/null differ diff --git a/mu/resources/images/save.png b/mu/resources/images/save.png deleted file mode 100644 index 1b2534796..000000000 Binary files a/mu/resources/images/save.png and /dev/null differ diff --git a/mu/resources/images/scroll-down.png b/mu/resources/images/scroll-down.png deleted file mode 100644 index 1764d175a..000000000 Binary files a/mu/resources/images/scroll-down.png and /dev/null differ diff --git a/mu/resources/images/scroll-left.png b/mu/resources/images/scroll-left.png deleted file mode 100644 index 05e47d85f..000000000 Binary files a/mu/resources/images/scroll-left.png and /dev/null differ diff --git a/mu/resources/images/scroll-right.png b/mu/resources/images/scroll-right.png deleted file mode 100644 index 89bab7aec..000000000 Binary files a/mu/resources/images/scroll-right.png and /dev/null differ diff --git a/mu/resources/images/scroll-up.png b/mu/resources/images/scroll-up.png deleted file mode 100644 index b5056d3c0..000000000 Binary files a/mu/resources/images/scroll-up.png and /dev/null differ diff --git a/mu/resources/images/step-in.png b/mu/resources/images/step-in.png deleted file mode 100644 index a7f627454..000000000 Binary files a/mu/resources/images/step-in.png and /dev/null differ diff --git a/mu/resources/images/step-out.png b/mu/resources/images/step-out.png deleted file mode 100644 index d480df3d8..000000000 Binary files a/mu/resources/images/step-out.png and /dev/null differ diff --git a/mu/resources/images/step-over.png b/mu/resources/images/step-over.png deleted file mode 100644 index bbc8a07f9..000000000 Binary files a/mu/resources/images/step-over.png and /dev/null differ diff --git a/mu/resources/images/stop.png b/mu/resources/images/stop.png deleted file mode 100644 index 2de181482..000000000 Binary files a/mu/resources/images/stop.png and /dev/null differ diff --git a/mu/resources/images/theme.png b/mu/resources/images/theme.png deleted file mode 100644 index ffffd479d..000000000 Binary files a/mu/resources/images/theme.png and /dev/null differ diff --git a/mu/resources/images/theme_contrast.png b/mu/resources/images/theme_contrast.png deleted file mode 100644 index b16c47ae5..000000000 Binary files a/mu/resources/images/theme_contrast.png and /dev/null differ diff --git a/mu/resources/images/theme_day.png b/mu/resources/images/theme_day.png deleted file mode 100644 index 00c76cd30..000000000 Binary files a/mu/resources/images/theme_day.png and /dev/null differ diff --git a/mu/resources/images/tidy.png b/mu/resources/images/tidy.png deleted file mode 100644 index ddb9904ef..000000000 Binary files a/mu/resources/images/tidy.png and /dev/null differ diff --git a/mu/resources/images/zoom-in.png b/mu/resources/images/zoom-in.png deleted file mode 100644 index 27f00e48b..000000000 Binary files a/mu/resources/images/zoom-in.png and /dev/null differ diff --git a/mu/resources/images/zoom-out.png b/mu/resources/images/zoom-out.png deleted file mode 100644 index 880ea2132..000000000 Binary files a/mu/resources/images/zoom-out.png and /dev/null differ diff --git a/mu/virtual_environment.py b/mu/virtual_environment.py index bc93693fd..a1532548c 100644 --- a/mu/virtual_environment.py +++ b/mu/virtual_environment.py @@ -1691,9 +1691,6 @@ def install_baseline_packages(self): """ logger.info("Installing baseline packages.") logger.info("pip version: %s", compact(self.pip.version())) - # - # TODO: Add semver check to ensure filepath is safe - # zipped_wheels_filepath = os.path.join(wheels_dirpath, "%s.zip" % mu_version) logger.info("Expecting zipped wheels at %s", zipped_wheels_filepath) if not os.path.exists(zipped_wheels_filepath): diff --git a/plugins/microbit/nu_microbit/mode.py b/plugins/microbit/nu_microbit/mode.py index 176bbbf3c..740d2a184 100644 --- a/plugins/microbit/nu_microbit/mode.py +++ b/plugins/microbit/nu_microbit/mode.py @@ -52,6 +52,45 @@ class MicrobitMode(MicroPythonMode): # Every micro:bit's USB interface (DAPLink) has these ids. # VID, PID, manufacturer, name valid_boards = [(board.MICROBIT_VID, board.MICROBIT_PID, None, "BBC micro:bit")] + #: What "from microbit import *" brings in, so Check can still spot + #: undefined names in code that uses it. + star_imports = { + "microbit": [ + "accelerometer", + "button_a", + "button_b", + "compass", + "display", + "i2c", + "Image", + "panic", + "pin0", + "pin1", + "pin2", + "pin3", + "pin4", + "pin5", + "pin6", + "pin7", + "pin8", + "pin9", + "pin10", + "pin11", + "pin12", + "pin13", + "pin14", + "pin15", + "pin16", + "pin19", + "pin20", + "reset", + "running_time", + "sleep", + "spi", + "temperature", + "uart", + ] + } # Modules built into micro:bit MicroPython, which the learner's files # mustn't shadow. diff --git a/plugins/microbit/tests/test_microbit_plugin.py b/plugins/microbit/tests/test_microbit_plugin.py index 3dcc40b63..0d3a60ca1 100644 --- a/plugins/microbit/tests/test_microbit_plugin.py +++ b/plugins/microbit/tests/test_microbit_plugin.py @@ -499,3 +499,20 @@ def test_flash_with_no_microbit_end_to_end(mm, host): **{"microbit-flash": True, "repl": True, "plotter": True} ) assert mode_module.FLASH_BUTTON == "microbit-flash" + + +def test_check_understands_from_microbit_import_star(): + """ + With the mode's star_imports, Check reads "from microbit import *" as + naming the micro:bit's things: no noise about the star import, and a + real undefined name is still caught. + """ + import mu.logic + from nu_microbit.mode import MicrobitMode + + code = "from microbit import *\ndisplay.scroll('hi')\nsleep(10)\nprint(oops)\n" + result = mu.logic.check_flake( + "main.py", code, star_imports=MicrobitMode.star_imports + ) + messages = [log["message"] for logs in result.values() for log in logs] + assert messages == ["undefined name 'oops'"] diff --git a/pyproject.toml b/pyproject.toml index ace170749..6748f3d66 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -72,7 +72,6 @@ dependencies = [ "pyzmq", # Serial connections to MicroPython-family boards (MicroPythonMode). "pyserial~=3.5", - "nudatus>=0.0.3", # flake8 brings pycodestyle + pyflakes, which are runtime dependencies # (the in-editor code checker in mu/logic.py uses their APIs directly). "flake8>=3.8.3", @@ -83,7 +82,6 @@ dependencies = [ # is gone; click now comes in transitively via black. "black>=24", "platformdirs>=2.6", - "semver>=2.8.0", # Reads the learner-env requirements plugins declare (mu/wheels). "packaging>=22", # `uv` creates and manages the user's virtual environment (Phase 4a, see @@ -249,11 +247,9 @@ requires = [ "tornado>=6.5.9", "pyzmq", "pyserial~=3.5", - "nudatus>=0.0.3", "flake8>=3.8.3", "black>=24", "platformdirs>=2.6", - "semver>=2.8.0", "uv>=0.5", "wheel", ] @@ -295,7 +291,6 @@ target-version = "py311" # `_` is gettext's translation function, injected as a builtin at runtime. builtins = ["_"] extend-exclude = [ - "mu/contrib", # vendored third-party code (now empty) "mu/modes/api", # generated API stubs "plugins/*/nu_*/api", # plugins' generated API stubs "docs", @@ -326,7 +321,6 @@ pythonpath = [ [tool.coverage.run] omit = [ - "mu/contrib/*", "mu/mu_debug.py", "mu/__main__.py", "mu/wheels/*", diff --git a/tests/interface/test_dialogs.py b/tests/interface/test_dialogs.py index ff556c122..6fe8cfdd7 100644 --- a/tests/interface/test_dialogs.py +++ b/tests/interface/test_dialogs.py @@ -160,10 +160,8 @@ def test_AdminDialog_setup_python_mode(): mode.short_name = "a-mode-that-runs-code" mode.name = "Python 3" mode.uses_user_environment = True - modes = mock.MagicMock() - device_list = mu.logic.DeviceList(modes) ad = mu.interface.dialogs.AdminDialog(mock_window) - ad.setup(log, settings, packages, mode, device_list) + ad.setup(log, settings, packages, mode) assert ad.log_widget.log_text_area.toPlainText() == log s = ad.settings() assert s["packages"] == packages @@ -188,7 +186,6 @@ def test_AdminDialog_focus_environment(): {"envars": "", "locale": ""}, "", _python_mode(), - None, focus="environment", ) assert ad.tabs.currentWidget() is ad.environment_tab @@ -208,7 +205,7 @@ def test_AdminDialog_focus_environment_in_other_modes(): mode.uses_user_environment = False parent = QWidget() ad = mu.interface.dialogs.AdminDialog(parent) - ad.setup("log", {"locale": ""}, "", mode, None, focus="environment") + ad.setup("log", {"locale": ""}, "", mode, focus="environment") assert ad.tabs.currentWidget() is ad.log_widget @@ -227,7 +224,6 @@ def test_AdminDialog_commands_tab_in_other_modes(): {"locale": ""}, "", mode, - None, environment={"commands": "$ mpremote connect COM3 fs cp a.py :main.py"}, ) assert ad.environment_tab is None @@ -261,10 +257,8 @@ def test_AdminDialog_setup(): mode.short_name = "python" mode.name = "Debugger" mode.uses_user_environment = False - modes = mock.MagicMock() - device_list = mu.logic.DeviceList(modes) ad = mu.interface.dialogs.AdminDialog(mock_window) - ad.setup(log, settings, packages, mode, device_list) + ad.setup(log, settings, packages, mode) assert ad.log_widget.log_text_area.toPlainText() == log s = ad.settings() assert s == settings @@ -765,7 +759,7 @@ def test_AdminDialog_environment_tab(): parent = QWidget() ad = mu.interface.dialogs.AdminDialog(parent) settings = {"envars": "A=b", "locale": ""} - ad.setup("log", settings, "cowsay", _python_mode(), None, environment=ENVIRONMENT) + ad.setup("log", settings, "cowsay", _python_mode(), environment=ENVIRONMENT) titles = [ad.tabs.tabText(i) for i in range(ad.tabs.count())] assert titles == ["Current Log", "Environment", "Select Language"] assert ad.environment_tab.fields["path"].text() == ENVIRONMENT["path"] @@ -1134,7 +1128,6 @@ def test_AdminDialog_plugins_tab(): {"envars": "", "locale": ""}, "", _python_mode(), - None, plugins=PLUGINS, open_directory=opener, ) @@ -1149,7 +1142,7 @@ def test_AdminDialog_focus_plugins(): mode.uses_user_environment = False parent = QWidget() ad = mu.interface.dialogs.AdminDialog(parent) - ad.setup("log", {"locale": ""}, "", mode, None, focus="plugins", plugins=PLUGINS) + ad.setup("log", {"locale": ""}, "", mode, focus="plugins", plugins=PLUGINS) assert ad.tabs.currentWidget() is ad.plugins_tab assert "plugins" in ad.settings() @@ -1426,7 +1419,7 @@ def test_AdminDialog_reports_the_chosen_environment(): ad = mu.interface.dialogs.AdminDialog(parent) settings = {"envars": "", "locale": ""} environment = dict(ENVIRONMENT, environments=[DEFAULT_ENV, PROJECT_ENV]) - ad.setup("log", settings, "", _python_mode(), None, environment=environment) + ad.setup("log", settings, "", _python_mode(), environment=environment) section = ad.environment_tab.environments_section assert "environment" not in ad.settings() section.tree.setCurrentItem(section.tree.topLevelItem(1)) @@ -1445,7 +1438,6 @@ def test_EnvironmentsWidget_expanding_makes_room(): {"envars": "", "locale": ""}, "", _python_mode(), - None, environment=environment, ) ad.resize(760, 300) diff --git a/tests/interface/test_editor.py b/tests/interface/test_editor.py index 7b8a919cb..d5dd14e4e 100644 --- a/tests/interface/test_editor.py +++ b/tests/interface/test_editor.py @@ -503,30 +503,6 @@ def test_EditorPane_show_annotations_real_scintilla(): ) -def test_EditorPane_find_next_match(): - """ - Ensures that the expected arg values are passed through to QsciScintilla - for highlighting matched text. - """ - ep = mu.interface.editor.EditorPane(None, "baz") - ep.findFirst = mock.MagicMock(return_value=True) - assert ep.find_next_match( - "foo", from_line=10, from_col=5, case_sensitive=True, wrap_around=False - ) - ep.findFirst.assert_called_once_with( - "foo", - False, - True, - True, - False, - forward=True, - line=10, - index=5, - show=False, - posix=False, - ) - - def _ranges_in_text(text, search_for): """Find any instances of `search_for` inside text and return the equivalent Scintilla Ranges of (line_start, column_start, line_end, column_end). diff --git a/tests/interface/test_main.py b/tests/interface/test_main.py index 2a2099c45..45e649537 100644 --- a/tests/interface/test_main.py +++ b/tests/interface/test_main.py @@ -1438,14 +1438,13 @@ def test_Window_show_admin(): mock_admin_display.return_value = mock_admin_box with mock.patch("mu.interface.main.AdminDialog", mock_admin_display): w = mu.interface.main.Window() - result = w.show_admin("log", "envars", "packages", "mode", "devices") + result = w.show_admin("log", "envars", "packages", "mode") mock_admin_display.assert_called_once_with(w) mock_admin_box.setup.assert_called_once_with( "log", "envars", "packages", "mode", - "devices", environment=None, focus=None, plugins=None, @@ -1466,7 +1465,6 @@ def test_Window_show_admin_focus(): "s", "p", "mode", - "devices", environment={"a": 1}, focus="environment", plugins={"plugins": []}, @@ -1476,7 +1474,6 @@ def test_Window_show_admin_focus(): "s", "p", "mode", - "devices", environment={"a": 1}, focus="environment", plugins={"plugins": []}, @@ -1495,14 +1492,13 @@ def test_Window_show_admin_cancelled(): mock_admin_display.return_value = mock_admin_box with mock.patch("mu.interface.main.AdminDialog", mock_admin_display): w = mu.interface.main.Window() - result = w.show_admin("log", "envars", "packages", "mode", "devices") + result = w.show_admin("log", "envars", "packages", "mode") mock_admin_display.assert_called_once_with(w) mock_admin_box.setup.assert_called_once_with( "log", "envars", "packages", "mode", - "devices", environment=None, focus=None, plugins=None, diff --git a/tests/modes/test_base.py b/tests/modes/test_base.py index 4f4f18aa8..c449addde 100644 --- a/tests/modes/test_base.py +++ b/tests/modes/test_base.py @@ -893,50 +893,3 @@ def test_REPLConnection_send_interrupt(): mock_serial.write.assert_any_call(b"\x02") # CTRL-B mock_serial.write.assert_any_call(b"\x03") # CTRL-C - - -def test_REPLConnection_execute(): - """ - Ensure the first command is sent via serial to the connected device, and - further commands are scheduled for the future. - """ - mock_serial_class = mock.MagicMock() - with mock.patch("mu.modes.base.QSerialPort", mock_serial_class): - conn = REPLConnection("COM0") - conn.write = mock.MagicMock() - - # Mocks QTimer, so only first command will be sent - commands = [b"A", b"B"] - with mock.patch("mu.modes.base.QTimer") as mock_timer: - conn.execute(commands) - conn.write.assert_called_once_with(b"A") - assert mock_timer.singleShot.call_count == 1 - - -def test_REPLConnection_send_commands(): - """ - Ensure the list of commands is correctly encoded and bound by control - commands to put the board into and out of raw mode. - """ - mock_serial_class = mock.MagicMock() - with mock.patch("mu.modes.base.QSerialPort", mock_serial_class): - conn = REPLConnection("COM0") - conn.execute = mock.MagicMock() - commands = ["import os", "print(os.listdir())"] - conn.send_commands(commands) - - expected = [ - b"\x03", # Keyboard interrupt - b"\x03", # Keyboard interrupt - b"\x01", # Put the board into raw mode. - b"\x04", # Soft-reboot - b"\x03", # Keyboard interrupt - b"\x03", # Keyboard interrupt - b'print("\\n");', # Ensure a newline at the start of output. - b"import os\r", # The commands to run. - b"print(os.listdir())\r", - b"\r", # Ensure newline after commands. - b"\x04", # Evaluate the commands. - b"\x02", # Leave raw mode. - ] - conn.execute.assert_called_once_with(expected) diff --git a/tests/test_logic.py b/tests/test_logic.py index 6172481c7..d30393f15 100644 --- a/tests/test_logic.py +++ b/tests/test_logic.py @@ -475,20 +475,29 @@ def test_check_flake(): def test_check_flake_needing_expansion(): """ - Ensure the check_flake method calls PyFlakes with the expected code - reporter. + A mode's star import is checked as if it named what it brings in: the + names the code doesn't use aren't reported, its undefined names are. """ - mock_r = mock.MagicMock() - msg = "'microbit.foo' imported but unused" - mock_r.log = [{"line_no": 2, "column": 0, "message": msg}] - with ( - mock.patch("mu.logic.MuFlakeCodeReporter", return_value=mock_r), - mock.patch("mu.logic.check", return_value=None) as mock_check, - ): - code = "from microbit import *" - result = mu.logic.check_flake("foo.py", code) - assert result == {} - mock_check.assert_called_once_with(mu.logic.EXPANDED_IMPORT, "foo.py", mock_r) + code = "from robot import *\nwheels.turn(1)\nprint(oops)\n" + result = mu.logic.check_flake( + "foo.py", code, star_imports={"robot": ["wheels", "eyes", "horn"]} + ) + messages = [log["message"] for logs in result.values() for log in logs] + assert messages == ["undefined name 'oops'"] + assert list(result) == [2] # (Line numbers count from 0.) + + +def test_check_flake_star_import_not_expanded(): + """ + Another module's star import is left alone (pyflakes reports it as + usual), and a mode without star imports changes nothing. + """ + code = "from os.path import *\nprint(join)\n" + plain = mu.logic.check_flake("foo.py", code) + assert mu.logic.check_flake("foo.py", code, star_imports={"robot": ["x"]}) == ( + plain + ) + assert any("import *" in log["message"] for log in plain[0]) def test_check_flake_with_builtins(): @@ -2473,7 +2482,6 @@ def test_change_mode(): ed.change_mode("python") # Check the old mode is closed properly. old_mode.remove_repl.assert_called_once_with() - old_mode.remove_fs.assert_called_once_with() old_mode.remove_plotter.assert_called_once_with() # Check the new mode is set up correctly. assert ed.mode == "python" diff --git a/tests/test_resources.py b/tests/test_resources.py index b7b1c562e..fe1859472 100644 --- a/tests/test_resources.py +++ b/tests/test_resources.py @@ -153,7 +153,7 @@ def plugin_images(tmp_path): A folder of plugin images ("rocket.png", "rocket.svg" and "badge.png"), unregistered again after the test. """ - core_png = mu.resources.path("python", ext=".png") + core_png = mu.resources.path("checked", ext=".png") # any real PNG directory = tmp_path / "images" directory.mkdir() for name in ("rocket.png", "badge.png"): diff --git a/utils/README.rst b/utils/README.rst index d58c0bead..c90fdcdc5 100644 --- a/utils/README.rst +++ b/utils/README.rst @@ -1,6 +1,7 @@ Utilities ========= -This directory contains utilities used to help maintain Mu. For example, -scripts used to extract API documentation for use in Mu's auto-suggest and -tool tips. +This directory contains utilities used to help maintain Nu. For example, +scripts used to extract API documentation for use in Nu's auto-suggest and +tool tips, and make_artwork.py, which draws the splash screens and the Mode +button from the app icon. diff --git a/utils/avatar.py b/utils/avatar.py deleted file mode 100644 index 8a273dc9d..000000000 --- a/utils/avatar.py +++ /dev/null @@ -1,58 +0,0 @@ -# Grab Gravatar images for the contributors listed in the GIT log. -import os -import subprocess -import shutil -import hashlib -import requests - - -def get_gravatar(email): - """ - Given an email, attempt to get the gravatar image associated with it. - """ - md5 = hashlib.md5(email.encode("utf-8")).hexdigest() - url = f"http://www.gravatar.com/avatar/{md5}?d=404&size=90" - return requests.get(url, stream=True) - - -def get_github(username): - """ - Given a GitHub username, attempt to get the user's avatar. - """ - url = f"https://github.com/{username}.png" - return requests.get(url, stream=True) - - -def get_gitlog(): - """ - Get unique tuples of username / email address from GIT log. - """ - command = ["git", "log", "--pretty=format:%an|%ae"] - raw = subprocess.check_output(command, stderr=subprocess.STDOUT).decode("utf-8") - lines = raw.split("\n") - result = set() - for line in lines: - username, email = line.split("|") - result.add((username, email)) - return tuple(result) - - -users = get_gitlog() -path = os.path.abspath(os.path.join(".git", "avatar")) -if not os.path.exists(path): - os.makedirs(path) - -for username, email in users: - print(f"Processing {username} {email}") - if email.rpartition("@")[2] == "users.noreply.github.com": - raw_username, _ = email.split("@") - response = get_github(raw_username) - _, mime = response.headers["content-type"].split("/") - else: - response = get_gravatar(email) - _, mime = response.headers["content-type"].split("/") - if response.status_code == 200: - filename = os.path.join(path, f"{username}.{mime}") - with open(filename, "wb") as out_file: - print(f"Writing to {filename}") - shutil.copyfileobj(response.raw, out_file) diff --git a/utils/flask.json b/utils/flask.json deleted file mode 100644 index 8cd360ed9..000000000 --- a/utils/flask.json +++ /dev/null @@ -1,756 +0,0 @@ -[ -{"name": "has_request_context", "args": [], "description": "If you have code that wants to test if a request context is there or\nnot this function can be used. For instance, you may want to take advantage\nof request information if the request object is available, but fail\nsilently if it is unavailable.\nclass User(db.Model):\n\n def __init__(self, username, remote_addr=None):\n self.username = username\n if remote_addr is None and has_request_context():\n remote_addr = request.remote_addr\n self.remote_addr = remote_addr\n\n\nAlternatively you can also just test any of the context bound objects\n(such as request or g for truthness):\nclass User(db.Model):\n\n def __init__(self, username, remote_addr=None):\n self.username = username\n if remote_addr is None and request:\n remote_addr = request.remote_addr\n self.remote_addr = remote_addr\n\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "copy_current_request_context", "args": ["f"], "description": "A helper function that decorates a function to retain the current\nrequest context. This is useful when working with greenlets. The moment\nthe function is decorated a copy of the request context is created and\nthen pushed when the function is called.\nExample:\nimport gevent\nfrom flask import copy_current_request_context\n\n@app.route('/')\ndef index():\n @copy_current_request_context\n def do_some_work():\n # do some work here, it can access flask.request like you\n # would otherwise in the view function.\n ...\n gevent.spawn(do_some_work)\n return 'Regular response'\n\n\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "has_app_context", "args": [], "description": "Works like has_request_context() but for the application\ncontext. You can also just do a boolean check on the\ncurrent_app object instead.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "url_for", "args": ["endpoint", "**values"], "description": "Generates a URL to the given endpoint with the method provided.\nVariable arguments that are unknown to the target endpoint are appended\nto the generated URL as query arguments. If the value of a query argument\nis None, the whole pair is skipped. In case blueprints are active\nyou can shortcut references to the same blueprint by prefixing the\nlocal endpoint with a dot (.).\nThis will reference the index function local to the current blueprint:\nurl_for('.index')\n\n\nFor more information, head over to the Quickstart.\nTo integrate applications, Flask has a hook to intercept URL build\nerrors through Flask.url_build_error_handlers. The url_for\nfunction results in a BuildError when the current\napp does not have a URL for the given endpoint and values. When it does, the\ncurrent_app calls its url_build_error_handlers if\nit is not None, which can return a string to use as the result of\nurl_for (instead of url_for\u2019s default to raise the\nBuildError exception) or re-raise the exception.\nAn example:\ndef external_url_handler(error, endpoint, values):\n \"Looks up an external URL when `url_for` cannot build a URL.\"\n # This is an example of hooking the build_error_handler.\n # Here, lookup_url is some utility function you've built\n # which looks up the endpoint in some external URL registry.\n url = lookup_url(endpoint, **values)\n if url is None:\n # External lookup did not have a URL.\n # Re-raise the BuildError, in context of original traceback.\n exc_type, exc_value, tb = sys.exc_info()\n if exc_value is error:\n raise exc_type, exc_value, tb\n else:\n raise error\n # url_for will use this result, instead of raising BuildError.\n return url\n\napp.url_build_error_handlers.append(external_url_handler)\n\n\nHere, error is the instance of BuildError, and\nendpoint and values are the arguments passed into url_for. Note\nthat this is for building URLs outside the current application, and not for\nhandling 404 NotFound errors.\n\nChangelog\nNew in version 0.10: The _scheme parameter was added.\n\n\nNew in version 0.9: The _anchor and _method parameters were added.\n\n\nNew in version 0.9: Calls Flask.handle_build_error() on\nBuildError.\n\n\n\n\n\nParameters:\nendpoint \u2013 the endpoint of the URL (name of the function)\nvalues \u2013 the variable arguments of the URL rule\n_external \u2013 if set to True, an absolute URL is generated. Server\naddress can be changed via SERVER_NAME configuration variable which\ndefaults to localhost.\n_scheme \u2013 a string specifying the desired URL scheme. The _external\nparameter must be set to True or a ValueError is raised. The default\nbehavior uses the same scheme as the current request, or\nPREFERRED_URL_SCHEME from the app configuration if no\nrequest context is available. As of Werkzeug 0.10, this also can be set\nto an empty string to build protocol-relative URLs.\n_anchor \u2013 if provided this is added as anchor to the URL.\n_method \u2013 if provided this explicitly specifies an HTTP method.\n\n\n\n\n\n"}, -{"name": "abort", "args": ["status", "*args", "**kwargs"], "description": "Raises an HTTPException for the given status code or WSGI\napplication:\nabort(404) # 404 Not Found\nabort(Response('Hello World'))\n\n\nCan be passed a WSGI application or a status code. If a status code is\ngiven it\u2019s looked up in the list of exceptions and will raise that\nexception, if passed a WSGI application it will wrap it in a proxy WSGI\nexception and raise that:\nabort(404)\nabort(Response('Hello World'))\n\n\n"}, -{"name": "redirect", "args": ["location", "code=302", "Response=None"], "description": "Returns a response object (a WSGI application) that, if called,\nredirects the client to the target location. Supported codes are 301,\n302, 303, 305, and 307. 300 is not supported because it\u2019s not a real\nredirect and 304 because it\u2019s the answer for a request with a request\nwith defined If-Modified-Since headers.\n\nChangelog\nNew in version 0.10: The class used for the Response object can now be passed in.\n\n\nNew in version 0.6: The location can now be a unicode string that is encoded using\nthe iri_to_uri() function.\n\n\n\n\n\nParameters:\nlocation \u2013 the location the response should redirect to.\ncode \u2013 the redirect status code. defaults to 302.\nResponse (class) \u2013 a Response class to use when instantiating a\nresponse. The default is werkzeug.wrappers.Response if\nunspecified.\n\n\n\n\n\n"}, -{"name": "make_response", "args": ["*args"], "description": "Sometimes it is necessary to set additional headers in a view. Because\nviews do not have to return response objects but can return a value that\nis converted into a response object by Flask itself, it becomes tricky to\nadd headers to it. This function can be called instead of using a return\nand you will get a response object which you can use to attach headers.\nIf view looked like this and you want to add a new header:\ndef index():\n return render_template('index.html', foo=42)\n\n\nYou can now do something like this:\ndef index():\n response = make_response(render_template('index.html', foo=42))\n response.headers['X-Parachutes'] = 'parachutes are cool'\n return response\n\n\nThis function accepts the very same arguments you can return from a\nview function. This for example creates a response with a 404 error\ncode:\nresponse = make_response(render_template('not_found.html'), 404)\n\n\nThe other use case of this function is to force the return value of a\nview function into a response which is helpful with view\ndecorators:\nresponse = make_response(view_function())\nresponse.headers['X-Parachutes'] = 'parachutes are cool'\n\n\nInternally this function does the following things:\n\nif no arguments are passed, it creates a new response argument\nif one argument is passed, flask.Flask.make_response()\nis invoked with it.\nif more than one argument is passed, the arguments are passed\nto the flask.Flask.make_response() function as tuple.\n\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "after_this_request", "args": ["f"], "description": "Executes a function after this request. This is useful to modify\nresponse objects. The function is passed the response object and has\nto return the same or a new one.\nExample:\n@app.route('/')\ndef index():\n @after_this_request\n def add_header(response):\n response.headers['X-Foo'] = 'Parachute'\n return response\n return 'Hello World!'\n\n\nThis is more useful if a function other than the view function wants to\nmodify a response. For instance think of a decorator that wants to add\nsome headers without converting the return value into a response object.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "send_file", "args": ["filename_or_fp", "mimetype=None", "as_attachment=False", "attachment_filename=None", "add_etags=True", "cache_timeout=None", "conditional=False", "last_modified=None"], "description": "Sends the contents of a file to the client. This will use the\nmost efficient method available and configured. By default it will\ntry to use the WSGI server\u2019s file_wrapper support. Alternatively\nyou can set the application\u2019s use_x_sendfile attribute\nto True to directly emit an X-Sendfile header. This however\nrequires support of the underlying webserver for X-Sendfile.\nBy default it will try to guess the mimetype for you, but you can\nalso explicitly provide one. For extra security you probably want\nto send certain files as attachment (HTML for instance). The mimetype\nguessing requires a filename or an attachment_filename to be\nprovided.\nETags will also be attached automatically if a filename is provided. You\ncan turn this off by setting add_etags=False.\nIf conditional=True and filename is provided, this method will try to\nupgrade the response stream to support range requests. This will allow\nthe request to be answered with partial content response.\nPlease never pass filenames to this function from user sources;\nyou should use send_from_directory() instead.\n\nChanged in version 1.0: UTF-8 filenames, as specified in RFC 2231, are supported.\n\n\nChangelog\nChanged in version 0.12: The filename is no longer automatically inferred from file objects. If\nyou want to use automatic mimetype and etag support, pass a filepath via\nfilename_or_fp or attachment_filename.\n\n\nChanged in version 0.12: The attachment_filename is preferred over filename for MIME-type\ndetection.\n\n\nChanged in version 0.9: cache_timeout pulls its default from application config, when None.\n\n\nChanged in version 0.7: mimetype guessing and etag support for file objects was\ndeprecated because it was unreliable. Pass a filename if you are\nable to, otherwise attach an etag yourself. This functionality\nwill be removed in Flask 1.0\n\n\nNew in version 0.5: The add_etags, cache_timeout and conditional parameters were\nadded. The default behavior is now to attach etags.\n\n\nNew in version 0.2.\n\n\n\n\n\nParameters:\nfilename_or_fp \u2013 the filename of the file to send.\nThis is relative to the root_path\nif a relative path is specified.\nAlternatively a file object might be provided in\nwhich case X-Sendfile might not work and fall\nback to the traditional method. Make sure that the\nfile pointer is positioned at the start of data to\nsend before calling send_file().\nmimetype \u2013 the mimetype of the file if provided. If a file path is\ngiven, auto detection happens as fallback, otherwise an\nerror will be raised.\nas_attachment \u2013 set to True if you want to send this file with\na Content-Disposition: attachment header.\nattachment_filename \u2013 the filename for the attachment if it\ndiffers from the file\u2019s filename.\nadd_etags \u2013 set to False to disable attaching of etags.\nconditional \u2013 set to True to enable conditional responses.\ncache_timeout \u2013 the timeout in seconds for the headers. When None\n(default), this value is set by\nget_send_file_max_age() of\ncurrent_app.\nlast_modified \u2013 set the Last-Modified header to this value,\na datetime or timestamp.\nIf a file was passed, this overrides its mtime.\n\n\n\n\n\n"}, -{"name": "send_from_directory", "args": ["directory", "filename", "**options"], "description": "Send a file from a given directory with send_file(). This\nis a secure way to quickly expose static files from an upload folder\nor something similar.\nExample usage:\n@app.route('/uploads/')\ndef download_file(filename):\n return send_from_directory(app.config['UPLOAD_FOLDER'],\n filename, as_attachment=True)\n\n\n\nSending files and Performance\nIt is strongly recommended to activate either X-Sendfile support in\nyour webserver or (if no authentication happens) to tell the webserver\nto serve files for the given path on its own without calling into the\nweb application for improved performance.\n\n\nChangelog\nNew in version 0.5.\n\n\n\n\n\nParameters:\ndirectory \u2013 the directory where all the files are stored.\nfilename \u2013 the filename relative to that directory to\ndownload.\noptions \u2013 optional keyword arguments that are directly\nforwarded to send_file().\n\n\n\n\n\n"}, -{"name": "safe_join", "args": ["directory", "*pathnames"], "description": "Safely join directory and zero or more untrusted pathnames\ncomponents.\nExample usage:\n@app.route('/wiki/')\ndef wiki_page(filename):\n filename = safe_join(app.config['WIKI_FOLDER'], filename)\n with open(filename, 'rb') as fd:\n content = fd.read() # Read and process the file content...\n\n\n\n\n\n\nParameters:\ndirectory \u2013 the trusted base directory.\npathnames \u2013 the untrusted pathnames relative to that directory.\n\n\n\nRaises:NotFound if one or more passed\npaths fall out of its boundaries.\n\n\n\n\n"}, -{"name": "escape", "args": ["s"], "description": "Convert the characters &, <, >, \u2018, and \u201d in string s to HTML-safe\nsequences. Use this if you need to display text that might contain\nsuch characters in HTML. Marks return value as markup string.\n"}, -{"name": "flash", "args": ["message", "category='message'"], "description": "Flashes a message to the next request. In order to remove the\nflashed message from the session and to display it to the user,\nthe template has to call get_flashed_messages().\n\nChangelog\nChanged in version 0.3: category parameter added.\n\n\n\n\n\nParameters:\nmessage \u2013 the message to be flashed.\ncategory \u2013 the category for the message. The following values\nare recommended: 'message' for any kind of message,\n'error' for errors, 'info' for information\nmessages and 'warning' for warnings. However any\nkind of string can be used as category.\n\n\n\n\n\n"}, -{"name": "get_flashed_messages", "args": ["with_categories=False", "category_filter=[]"], "description": "Pulls all flashed messages from the session and returns them.\nFurther calls in the same request to the function will return\nthe same messages. By default just the messages are returned,\nbut when with_categories is set to True, the return value will\nbe a list of tuples in the form (category, message) instead.\nFilter the flashed messages to one or more categories by providing those\ncategories in category_filter. This allows rendering categories in\nseparate html blocks. The with_categories and category_filter\narguments are distinct:\n\nwith_categories controls whether categories are returned with message\ntext (True gives a tuple, where False gives just the message text).\ncategory_filter filters the messages down to only those matching the\nprovided categories.\n\nSee Message Flashing for examples.\n\nChangelog\nChanged in version 0.9: category_filter parameter added.\n\n\nChanged in version 0.3: with_categories parameter added.\n\n\n\n\n\nParameters:\nwith_categories \u2013 set to True to also receive categories.\ncategory_filter \u2013 whitelist of categories to limit return values\n\n\n\n\n\n"}, -{"name": "jsonify", "args": ["*args", "**kwargs"], "description": "This function wraps dumps() to add a few enhancements that make\nlife easier. It turns the JSON output into a Response\nobject with the application/json mimetype. For convenience, it\nalso converts multiple arguments into an array or multiple keyword arguments\ninto a dict. This means that both jsonify(1,2,3) and\njsonify([1,2,3]) serialize to [1,2,3].\nFor clarity, the JSON serialization behavior has the following differences\nfrom dumps():\n\nSingle argument: Passed straight through to dumps().\nMultiple arguments: Converted to an array before being passed to\ndumps().\nMultiple keyword arguments: Converted to a dict before being passed to\ndumps().\nBoth args and kwargs: Behavior undefined and will throw an exception.\n\nExample usage:\nfrom flask import jsonify\n\n@app.route('/_get_current_user')\ndef get_current_user():\n return jsonify(username=g.user.username,\n email=g.user.email,\n id=g.user.id)\n\n\nThis will send a JSON response like this to the browser:\n{\n \"username\": \"admin\",\n \"email\": \"admin@localhost\",\n \"id\": 42\n}\n\n\n\nChangelog\nChanged in version 0.11: Added support for serializing top-level arrays. This introduces a\nsecurity risk in ancient browsers. See JSON Security for details.\n\nThis function\u2019s response will be pretty printed if the\nJSONIFY_PRETTYPRINT_REGULAR config parameter is set to True or the\nFlask app is running in debug mode. Compressed (not pretty) formatting\ncurrently means no indents and no spaces after separators.\n\nChangelog\nNew in version 0.2.\n\n"}, -{"name": "dumps", "args": ["obj", "**kwargs"], "description": "Serialize obj to a JSON formatted str by using the application\u2019s\nconfigured encoder (json_encoder) if there is an\napplication on the stack.\nThis function can return unicode strings or ascii-only bytestrings by\ndefault which coerce into unicode strings automatically. That behavior by\ndefault is controlled by the JSON_AS_ASCII configuration variable\nand can be overridden by the simplejson ensure_ascii parameter.\n"}, -{"name": "dump", "args": ["obj", "fp", "**kwargs"], "description": "Like dumps() but writes into a file object.\n"}, -{"name": "loads", "args": ["s", "**kwargs"], "description": "Unserialize a JSON object from a string s by using the application\u2019s\nconfigured decoder (json_decoder) if there is an\napplication on the stack.\n"}, -{"name": "load", "args": ["fp", "**kwargs"], "description": "Like loads() but reads from a file object.\n"}, -{"name": "render_template", "args": ["template_name_or_list", "**context"], "description": "Renders a template from the template folder with the given\ncontext.\n\n\n\n\nParameters:\ntemplate_name_or_list \u2013 the name of the template to be\nrendered, or an iterable with template names\nthe first one existing will be rendered\ncontext \u2013 the variables that should be available in the\ncontext of the template.\n\n\n\n\n\n"}, -{"name": "render_template_string", "args": ["source", "**context"], "description": "Renders a template from the given template source string\nwith the given context. Template variables will be autoescaped.\n\n\n\n\nParameters:\nsource \u2013 the source code of the template to be\nrendered\ncontext \u2013 the variables that should be available in the\ncontext of the template.\n\n\n\n\n\n"}, -{"name": "get_template_attribute", "args": ["template_name", "attribute"], "description": "Loads a macro (or variable) a template exports. This can be used to\ninvoke a macro from within Python code. If you for example have a\ntemplate named _cider.html with the following contents:\n{% macro hello(name) %}Hello {{ name }}!{% endmacro %}\n\n\nYou can access this from Python code like this:\nhello = get_template_attribute('_cider.html', 'hello')\nreturn hello('World')\n\n\n\nChangelog\nNew in version 0.2.\n\n\n\n\n\nParameters:\ntemplate_name \u2013 the name of the template\nattribute \u2013 the name of the variable of macro to access\n\n\n\n\n\n"}, -{"name": "stream_with_context", "args": ["generator_or_function"], "description": "Request contexts disappear when the response is started on the server.\nThis is done for efficiency reasons and to make it less likely to encounter\nmemory leaks with badly written WSGI middlewares. The downside is that if\nyou are using streamed responses, the generator cannot access request bound\ninformation any more.\nThis function however can help you keep the context around for longer:\nfrom flask import stream_with_context, request, Response\n\n@app.route('/stream')\ndef streamed_response():\n @stream_with_context\n def generate():\n yield 'Hello '\n yield request.args['name']\n yield '!'\n return Response(generate())\n\n\nAlternatively it can also be used around a specific generator:\nfrom flask import stream_with_context, request, Response\n\n@app.route('/stream')\ndef streamed_response():\n def generate():\n yield 'Hello '\n yield request.args['name']\n yield '!'\n return Response(stream_with_context(generate()))\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "load_dotenv", "args": ["path=None"], "description": "Load \u201cdotenv\u201d files in order of precedence to set environment variables.\nIf an env var is already set it is not overwritten, so earlier files in the\nlist are preferred over later files.\nChanges the current working directory to the location of the first file\nfound, with the assumption that it is in the top level project directory\nand will be where the Python path should import local packages from.\nThis is a no-op if python-dotenv is not installed.\n\n\n\n\nParameters:path \u2013 Load the file at this location instead of searching.\n\nReturns:True if a file was loaded.\n\n\n\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "with_appcontext", "args": ["f"], "description": "Wraps a callback so that it\u2019s guaranteed to be executed with the\nscript\u2019s application context. If callbacks are registered directly\nto the app.cli object then they are wrapped with this function\nby default unless it\u2019s disabled.\n"}, -{"name": "pass_script_info", "args": ["f"], "description": "Marks a function so that an instance of ScriptInfo is passed\nas first argument to the click callback.\n"}, -{"name": "Flask", "args": ["import_name", "static_url_path=None", "static_folder='static'", "static_host=None", "host_matching=False", "subdomain_matching=False", "template_folder='templates'", "instance_path=None", "instance_relative_config=False", "root_path=None"], "description": "The flask object implements a WSGI application and acts as the central\nobject. It is passed the name of the module or package of the\napplication. Once it is created it will act as a central registry for\nthe view functions, the URL rules, template configuration and much more.\n\nThe name of the package is used to resolve resources from inside the\npackage or the folder the module is contained in depending on if the\npackage parameter resolves to an actual python package (a folder with\nan __init__.py file inside) or a standard module (just a .py file).\n\nFor more information about resource loading, see open_resource().\n\nUsually you create a Flask instance in your main module or\nin the __init__.py file of your package like this:\n\n\nParameters:\nimport_name \u2013 the name of the application package\nstatic_url_path \u2013 can be used to specify a different path for the\nstatic files on the web. Defaults to the name\nof the static_folder folder.\nstatic_folder \u2013 the folder with static files that should be served\nat static_url_path. Defaults to the 'static'\nfolder in the root path of the application.\nstatic_host \u2013 the host to use when adding the static route.\nDefaults to None. Required when using host_matching=True\nwith a static_folder configured.\nhost_matching \u2013 set url_map.host_matching attribute.\nDefaults to False.\nsubdomain_matching \u2013 consider the subdomain relative to\nSERVER_NAME when matching routes. Defaults to False.\ntemplate_folder \u2013 the folder that contains the templates that should\nbe used by the application. Defaults to\n'templates' folder in the root path of the\napplication.\ninstance_path \u2013 An alternative instance path for the application.\nBy default the folder 'instance' next to the\npackage or module is assumed to be the instance\npath.\ninstance_relative_config \u2013 if set to True relative filenames\nfor loading the config are assumed to\nbe relative to the instance path instead\nof the application root.\nroot_path \u2013 Flask by default will automatically calculate the path\nto the root of the application. In certain situations\nthis cannot be achieved (for instance if the package\nis a Python 3 namespace package) and needs to be\nmanually defined."}, -{"name": "Flask.add_template_filter", "args": ["f", "name=None"], "description": "Register a custom template filter. Works exactly like the\ntemplate_filter() decorator.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_template_global", "args": ["f", "name=None"], "description": "Register a custom template global function. Works exactly like the\ntemplate_global() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global function, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_template_test", "args": ["f", "name=None"], "description": "Register a custom template test. Works exactly like the\ntemplate_test() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "provide_automatic_options=None", "**options"], "description": "Connects a URL rule. Works exactly like the route()\ndecorator. If a view_func is provided it will be registered with the\nendpoint.\nBasically this example:\n@app.route('/')\ndef index():\n pass\n\n\nIs equivalent to the following:\ndef index():\n pass\napp.add_url_rule('/', 'index', index)\n\n\nIf the view_func is not provided you will need to connect the endpoint\nto a view function like so:\napp.view_functions['index'] = index\n\n\nInternally route() invokes add_url_rule() so if you want\nto customize the behavior via subclassing you only need to change\nthis method.\nFor more information refer to URL Route Registrations.\n\nChangelog\nChanged in version 0.6: OPTIONS is added automatically as method.\n\n\nChanged in version 0.2: view_func parameter added.\n\n\n\n\n\nParameters:\nrule \u2013 the URL rule as string\nendpoint \u2013 the endpoint for the registered URL rule. Flask\nitself assumes the name of the view function as\nendpoint\nview_func \u2013 the function to call when serving a request to the\nprovided endpoint\nprovide_automatic_options \u2013 controls whether the OPTIONS\nmethod should be added automatically. This can also be controlled\nby setting the view_func.provide_automatic_options = False\nbefore adding the rule.\noptions \u2013 the options to be forwarded to the underlying\nRule object. A change\nto Werkzeug is handling of method options. methods\nis a list of methods this rule should be limited\nto (GET, POST etc.). By default a rule\njust listens for GET (and implicitly HEAD).\nStarting with Flask 0.6, OPTIONS is implicitly\nadded and handled by the standard request handling.\n\n\n\n\n\n"}, -{"name": "Flask.after_request", "args": ["f"], "description": "Register a function to be run after each request.\nYour function must take one parameter, an instance of\nresponse_class and return a new response object or the\nsame (see process_response()).\nAs of Flask 0.7 this function might not be executed at the end of the\nrequest in case an unhandled exception occurred.\n"}, -{"name": "Flask.app_context", "args": [], "description": "Create an AppContext. Use as a with\nblock to push the context, which will make current_app\npoint at this application.\nAn application context is automatically pushed by\nRequestContext.push()\nwhen handling a request, and when running a CLI command. Use\nthis to manually create a context outside of these situations.\nwith app.app_context():\n init_db()\n\n\nSee The Application Context.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.auto_find_instance_path", "args": [], "description": "Tries to locate the instance path if it was not provided to the\nconstructor of the application class. It will basically calculate\nthe path to a folder named instance next to your main file or\nthe package.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_first_request", "args": ["f"], "description": "Registers a function to be run before the first request to this\ninstance of the application.\nThe function will be called without any arguments and its return\nvalue is ignored.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_request", "args": ["f"], "description": "Registers a function to run before each request.\nFor example, this can be used to open a database connection, or to load\nthe logged in user from the session.\nThe function will be called without any arguments. If it returns a\nnon-None value, the value is handled as if it was the return value from\nthe view, and further request handling is stopped.\n"}, -{"name": "Flask.context_processor", "args": ["f"], "description": "Registers a template context processor function.\n"}, -{"name": "Flask.create_global_jinja_loader", "args": [], "description": "Creates the loader for the Jinja2 environment. Can be used to\noverride just the loader and keeping the rest unchanged. It\u2019s\ndiscouraged to override this function. Instead one should override\nthe jinja_loader() function instead.\nThe global loader dispatches between the loaders of the application\nand the individual blueprints.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.create_jinja_environment", "args": [], "description": "Creates the Jinja2 environment based on jinja_options\nand select_jinja_autoescape(). Since 0.7 this also adds\nthe Jinja2 globals and filters after initialization. Override\nthis function to customize the behavior.\n\nChangelog\nChanged in version 0.11: Environment.auto_reload set in accordance with\nTEMPLATES_AUTO_RELOAD configuration option.\n\n\nNew in version 0.5.\n\n"}, -{"name": "Flask.create_url_adapter", "args": ["request"], "description": "Creates a URL adapter for the given request. The URL adapter\nis created at a point where the request context is not yet set\nup so the request is passed explicitly.\n\nChanged in version 1.0: SERVER_NAME no longer implicitly enables subdomain\nmatching. Use subdomain_matching instead.\n\n\nChangelog\nChanged in version 0.9: This can now also be called without a request object when the\nURL adapter is created for the application context.\n\n\nNew in version 0.6.\n\n"}, -{"name": "Flask.dispatch_request", "args": [], "description": "Does the request dispatching. Matches the URL and returns the\nreturn value of the view or error handler. This does not have to\nbe a response object. In order to convert the return value to a\nproper response object, call make_response().\n\nChangelog\nChanged in version 0.7: This no longer does the exception handling, this code was\nmoved to the new full_dispatch_request().\n\n"}, -{"name": "Flask.do_teardown_appcontext", "args": ["exc=<object object>"], "description": "Called right before the application context is popped.\nWhen handling a request, the application context is popped\nafter the request context. See do_teardown_request().\nThis calls all functions decorated with\nteardown_appcontext(). Then the\nappcontext_tearing_down signal is sent.\nThis is called by\nAppContext.pop().\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.do_teardown_request", "args": ["exc=<object object>"], "description": "Called after the request is dispatched and the response is\nreturned, right before the request context is popped.\nThis calls all functions decorated with\nteardown_request(), and Blueprint.teardown_request()\nif a blueprint handled the request. Finally, the\nrequest_tearing_down signal is sent.\nThis is called by\nRequestContext.pop(),\nwhich may be delayed during testing to maintain access to\nresources.\n\n\n\n\nParameters:exc \u2013 An unhandled exception raised while dispatching the\nrequest. Detected from the current exception information if\nnot passed. Passed to each teardown function.\n\n\n\n\nChangelog\nChanged in version 0.9: Added the exc argument.\n\n"}, -{"name": "Flask.endpoint", "args": ["endpoint"], "description": "A decorator to register a function as an endpoint.\nExample:\n@app.endpoint('example.endpoint')\ndef example():\n return \"example\"\n\n\n\n\n\n\nParameters:endpoint \u2013 the name of the endpoint\n\n\n\n"}, -{"name": "Flask.errorhandler", "args": ["code_or_exception"], "description": "Register a function to handle errors by code or exception class.\nA decorator that is used to register a function given an\nerror code. Example:\n@app.errorhandler(404)\ndef page_not_found(error):\n return 'This page does not exist', 404\n\n\nYou can also register handlers for arbitrary exceptions:\n@app.errorhandler(DatabaseError)\ndef special_exception_handler(error):\n return 'Database connection failed', 500\n\n\n\nChangelog\nNew in version 0.7: Use register_error_handler() instead of modifying\nerror_handler_spec directly, for application wide error\nhandlers.\n\n\nNew in version 0.7: One can now additionally also register custom exception types\nthat do not necessarily have to be a subclass of the\nHTTPException class.\n\n\n\n\n\nParameters:code_or_exception \u2013 the code as integer for the handler, or\nan arbitrary exception\n\n\n\n"}, -{"name": "Flask.full_dispatch_request", "args": [], "description": "Dispatches the request and on top of that performs request\npre and postprocessing as well as HTTP exception catching and\nerror handling.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.get_send_file_max_age", "args": ["filename"], "description": "Provides default cache_timeout for the send_file() functions.\nBy default, this function returns SEND_FILE_MAX_AGE_DEFAULT from\nthe configuration of current_app.\nStatic file functions such as send_from_directory() use this\nfunction, and send_file() calls this function on\ncurrent_app when the given cache_timeout is None. If a\ncache_timeout is given in send_file(), that timeout is used;\notherwise, this method is called.\nThis allows subclasses to change the behavior when sending files based\non the filename. For example, to set the cache timeout for .js files\nto 60 seconds:\nclass MyFlask(flask.Flask):\n def get_send_file_max_age(self, name):\n if name.lower().endswith('.js'):\n return 60\n return flask.Flask.get_send_file_max_age(self, name)\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.handle_exception", "args": ["e"], "description": "Default exception handling that kicks in when an exception\noccurs that is not caught. In debug mode the exception will\nbe re-raised immediately, otherwise it is logged and the handler\nfor a 500 internal server error is used. If no such handler\nexists, a default 500 internal server error message is displayed.\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.handle_http_exception", "args": ["e"], "description": "Handles an HTTP exception. By default this will invoke the\nregistered error handlers and fall back to returning the\nexception as response.\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.handle_url_build_error", "args": ["error", "endpoint", "values"], "description": "Handle BuildError on url_for().\n"}, -{"name": "Flask.handle_user_exception", "args": ["e"], "description": "This method is called whenever an exception occurs that should be\nhandled. A special case are\nHTTPExceptions which are forwarded by\nthis function to the handle_http_exception() method. This\nfunction will either return a response value or reraise the\nexception with the same traceback.\n\nChanged in version 1.0: Key errors raised from request data like form show the the bad\nkey in debug mode rather than a generic bad request message.\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.inject_url_defaults", "args": ["endpoint", "values"], "description": "Injects the URL defaults for the given endpoint directly into\nthe values dictionary passed. This is used internally and\nautomatically called on URL building.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.iter_blueprints", "args": [], "description": "Iterates over all blueprints by the order they were registered.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.log_exception", "args": ["exc_info"], "description": "Logs an exception. This is called by handle_exception()\nif debugging is disabled and right before the handler is called.\nThe default implementation logs the exception as error on the\nlogger.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.make_config", "args": ["instance_relative=False"], "description": "Used to create the config attribute by the Flask constructor.\nThe instance_relative parameter is passed in from the constructor\nof Flask (there named instance_relative_config) and indicates if\nthe config should be relative to the instance path or the root path\nof the application.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.make_default_options_response", "args": [], "description": "This method is called to create the default OPTIONS response.\nThis can be changed through subclassing to change the default\nbehavior of OPTIONS responses.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.make_null_session", "args": [], "description": "Creates a new instance of a missing session. Instead of overriding\nthis method we recommend replacing the session_interface.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.make_response", "args": ["rv"], "description": "Convert the return value from a view function to an instance of\nresponse_class.\n\n\n\n\nParameters:rv \u2013 the return value from the view function. The view function\nmust return a response. Returning None, or the view ending\nwithout returning, is not allowed. The following types are allowed\nfor view_rv:\n\nstr (unicode in Python 2)\nA response object is created with the string encoded to UTF-8\nas the body.\nbytes (str in Python 2)\nA response object is created with the bytes as the body.\ntuple\nEither (body, status, headers), (body, status), or\n(body, headers), where body is any of the other types\nallowed here, status is a string or an integer, and\nheaders is a dictionary or a list of (key, value)\ntuples. If body is a response_class instance,\nstatus overwrites the exiting value and headers are\nextended.\nresponse_class\nThe object is returned unchanged.\nother Response class\nThe object is coerced to response_class.\ncallable()\nThe function is called as a WSGI application. The result is\nused to create a response object.\n\n\n\n\n\n\nChangelog\nChanged in version 0.9: Previously a tuple was interpreted as the arguments for the\nresponse object.\n\n"}, -{"name": "Flask.make_shell_context", "args": [], "description": "Returns the shell context for an interactive shell for this\napplication. This runs all the registered shell context\nprocessors.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.open_instance_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s instance folder\n(instance_path). Otherwise works like\nopen_resource(). Instance resources can also be opened for\nwriting.\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Flask.open_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s resource folder. To see\nhow this works, consider the following folder structure:\n/myapplication.py\n/schema.sql\n/static\n /style.css\n/templates\n /layout.html\n /index.html\n\n\nIf you want to open the schema.sql file you would do the\nfollowing:\nwith app.open_resource('schema.sql') as f:\n contents = f.read()\n do_something_with(contents)\n\n\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Flask.open_session", "args": ["request"], "description": "Creates or opens a new session. Default implementation stores all\nsession data in a signed cookie. This requires that the\nsecret_key is set. Instead of overriding this method\nwe recommend replacing the session_interface.\n\n\n\n\nParameters:request \u2013 an instance of request_class.\n\n\n\n"}, -{"name": "Flask.preprocess_request", "args": [], "description": "Called before the request is dispatched. Calls\nurl_value_preprocessors registered with the app and the\ncurrent blueprint (if any). Then calls before_request_funcs\nregistered with the app and the blueprint.\nIf any before_request() handler returns a non-None value, the\nvalue is handled as if it was the return value from the view, and\nfurther request handling is stopped.\n"}, -{"name": "Flask.process_response", "args": ["response"], "description": "Can be overridden in order to modify the response object\nbefore it\u2019s sent to the WSGI server. By default this will\ncall all the after_request() decorated functions.\n\nChangelog\nChanged in version 0.5: As of Flask 0.5 the functions registered for after request\nexecution are called in reverse order of registration.\n\n\n\n\n\nParameters:response \u2013 a response_class object.\n\nReturns:a new response object or the same, has to be an\ninstance of response_class.\n\n\n\n"}, -{"name": "Flask.register_blueprint", "args": ["blueprint", "**options"], "description": "Register a Blueprint on the application. Keyword\narguments passed to this method will override the defaults set on the\nblueprint.\nCalls the blueprint\u2019s register() method after\nrecording the blueprint in the application\u2019s blueprints.\n\n\n\n\nParameters:\nblueprint \u2013 The blueprint to register.\nurl_prefix \u2013 Blueprint routes will be prefixed with this.\nsubdomain \u2013 Blueprint routes will match on this subdomain.\nurl_defaults \u2013 Blueprint routes will use these default values for\nview arguments.\noptions \u2013 Additional keyword arguments are passed to\nBlueprintSetupState. They can be\naccessed in record() callbacks.\n\n\n\n\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.register_error_handler", "args": ["code_or_exception", "f"], "description": "Alternative error attach function to the errorhandler()\ndecorator that is more straightforward to use for non decorator\nusage.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.request_context", "args": ["environ"], "description": "Create a RequestContext representing a\nWSGI environment. Use a with block to push the context,\nwhich will make request point at this request.\nSee The Request Context.\nTypically you should not call this from your own code. A request\ncontext is automatically pushed by the wsgi_app() when\nhandling a request. Use test_request_context() to create\nan environment and context instead of this method.\n\n\n\n\nParameters:environ \u2013 a WSGI environment\n\n\n\n"}, -{"name": "Flask.route", "args": ["rule", "**options"], "description": "A decorator that is used to register a view function for a\ngiven URL rule. This does the same thing as add_url_rule()\nbut is intended for decorator usage:\n@app.route('/')\ndef index():\n return 'Hello World'\n\n\nFor more information refer to URL Route Registrations.\n\n\n\n\nParameters:\nrule \u2013 the URL rule as string\nendpoint \u2013 the endpoint for the registered URL rule. Flask\nitself assumes the name of the view function as\nendpoint\noptions \u2013 the options to be forwarded to the underlying\nRule object. A change\nto Werkzeug is handling of method options. methods\nis a list of methods this rule should be limited\nto (GET, POST etc.). By default a rule\njust listens for GET (and implicitly HEAD).\nStarting with Flask 0.6, OPTIONS is implicitly\nadded and handled by the standard request handling.\n\n\n\n\n\n"}, -{"name": "Flask.run", "args": ["host=None", "port=None", "debug=None", "load_dotenv=True", "**options"], "description": "Runs the application on a local development server.\nDo not use run() in a production setting. It is not intended to\nmeet security and performance requirements for a production server.\nInstead, see Deployment Options for WSGI server recommendations.\nIf the debug flag is set the server will automatically reload\nfor code changes and show a debugger in case an exception happened.\nIf you want to run the application in debug mode, but disable the\ncode execution on the interactive debugger, you can pass\nuse_evalex=False as parameter. This will keep the debugger\u2019s\ntraceback screen active, but disable code execution.\nIt is not recommended to use this function for development with\nautomatic reloading as this is badly supported. Instead you should\nbe using the flask command line script\u2019s run support.\n\nKeep in Mind\nFlask will suppress any server error with a generic error page\nunless it is in debug mode. As such to enable just the\ninteractive debugger without the code reloading, you have to\ninvoke run() with debug=True and use_reloader=False.\nSetting use_debugger to True without being in debug mode\nwon\u2019t catch any exceptions because there won\u2019t be any to\ncatch.\n\n\n\n\n\nParameters:\nhost \u2013 the hostname to listen on. Set this to '0.0.0.0' to\nhave the server available externally as well. Defaults to\n'127.0.0.1' or the host in the SERVER_NAME config variable\nif present.\nport \u2013 the port of the webserver. Defaults to 5000 or the\nport defined in the SERVER_NAME config variable if present.\ndebug \u2013 if given, enable or disable debug mode. See\ndebug.\nload_dotenv \u2013 Load the nearest .env and .flaskenv\nfiles to set environment variables. Will also change the working\ndirectory to the directory containing the first file found.\noptions \u2013 the options to be forwarded to the underlying Werkzeug\nserver. See werkzeug.serving.run_simple() for more\ninformation.\n\n\n\n\n\n\nChanged in version 1.0: If installed, python-dotenv will be used to load environment\nvariables from .env and .flaskenv files.\nIf set, the FLASK_ENV and FLASK_DEBUG\nenvironment variables will override env and\ndebug.\nThreaded mode is enabled by default.\n\n\nChangelog\nChanged in version 0.10: The default port is now picked from the SERVER_NAME\nvariable.\n\n"}, -{"name": "Flask.save_session", "args": ["session", "response"], "description": "Saves the session if it needs updates. For the default\nimplementation, check open_session(). Instead of overriding this\nmethod we recommend replacing the session_interface.\n\n\n\n\nParameters:\nsession \u2013 the session to be saved (a\nSecureCookie\nobject)\nresponse \u2013 an instance of response_class\n\n\n\n\n\n"}, -{"name": "Flask.select_jinja_autoescape", "args": ["filename"], "description": "Returns True if autoescaping should be active for the given\ntemplate name. If no template name is given, returns True.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.send_static_file", "args": ["filename"], "description": "Function used internally to send static files from the static\nfolder to the browser.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.shell_context_processor", "args": ["f"], "description": "Registers a shell context processor function.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.should_ignore_error", "args": ["error"], "description": "This is called to figure out if an error should be ignored\nor not as far as the teardown system is concerned. If this\nfunction returns True then the teardown handlers will not be\npassed the error.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "Flask.teardown_appcontext", "args": ["f"], "description": "Registers a function to be called when the application context\nends. These functions are typically also called when the request\ncontext is popped.\nExample:\nctx = app.app_context()\nctx.push()\n...\nctx.pop()\n\n\nWhen ctx.pop() is executed in the above example, the teardown\nfunctions are called just before the app context moves from the\nstack of active contexts. This becomes relevant if you are using\nsuch constructs in tests.\nSince a request context typically also manages an application\ncontext it would also be called when you pop a request context.\nWhen a teardown function was called because of an unhandled exception\nit will be passed an error object. If an errorhandler() is\nregistered, it will handle the exception and the teardown will not\nreceive it.\nThe return values of teardown functions are ignored.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.teardown_request", "args": ["f"], "description": "Register a function to be run at the end of each request,\nregardless of whether there was an exception or not. These functions\nare executed when the request context is popped, even if not an\nactual request was performed.\nExample:\nctx = app.test_request_context()\nctx.push()\n...\nctx.pop()\n\n\nWhen ctx.pop() is executed in the above example, the teardown\nfunctions are called just before the request context moves from the\nstack of active contexts. This becomes relevant if you are using\nsuch constructs in tests.\nGenerally teardown functions must take every necessary step to avoid\nthat they will fail. If they do execute code that might fail they\nwill have to surround the execution of these code by try/except\nstatements and log occurring errors.\nWhen a teardown function was called because of an exception it will\nbe passed an error object.\nThe return values of teardown functions are ignored.\n\nDebug Note\nIn debug mode Flask will not tear down a request on an exception\nimmediately. Instead it will keep it alive so that the interactive\ndebugger can still access it. This behavior can be controlled\nby the PRESERVE_CONTEXT_ON_EXCEPTION configuration variable.\n\n"}, -{"name": "Flask.template_filter", "args": ["name=None"], "description": "A decorator that is used to register custom template filter.\nYou can specify a name for the filter, otherwise the function\nname will be used. Example:\n@app.template_filter()\ndef reverse(s):\n return s[::-1]\n\n\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.template_global", "args": ["name=None"], "description": "A decorator that is used to register a custom template global function.\nYou can specify a name for the global function, otherwise the function\nname will be used. Example:\n@app.template_global()\ndef double(n):\n return 2 * n\n\n\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global function, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.template_test", "args": ["name=None"], "description": "A decorator that is used to register custom template test.\nYou can specify a name for the test, otherwise the function\nname will be used. Example:\n@app.template_test()\ndef is_prime(n):\n if n == 2:\n return True\n for i in range(2, int(math.ceil(math.sqrt(n))) + 1):\n if n % i == 0:\n return False\n return True\n\n\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.test_cli_runner", "args": ["**kwargs"], "description": "Create a CLI runner for testing CLI commands.\nSee Testing CLI Commands.\nReturns an instance of test_cli_runner_class, by default\nFlaskCliRunner. The Flask app object is\npassed as the first argument.\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "Flask.test_client", "args": ["use_cookies=True", "**kwargs"], "description": "Creates a test client for this application. For information\nabout unit testing head over to Testing Flask Applications.\nNote that if you are testing for assertions or exceptions in your\napplication code, you must set app.testing = True in order for the\nexceptions to propagate to the test client. Otherwise, the exception\nwill be handled by the application (not visible to the test client) and\nthe only indication of an AssertionError or other exception will be a\n500 status code response to the test client. See the testing\nattribute. For example:\napp.testing = True\nclient = app.test_client()\n\n\nThe test client can be used in a with block to defer the closing down\nof the context until the end of the with block. This is useful if\nyou want to access the context locals for testing:\nwith app.test_client() as c:\n rv = c.get('/?vodka=42')\n assert request.args['vodka'] == '42'\n\n\nAdditionally, you may pass optional keyword arguments that will then\nbe passed to the application\u2019s test_client_class constructor.\nFor example:\nfrom flask.testing import FlaskClient\n\nclass CustomClient(FlaskClient):\n def __init__(self, *args, **kwargs):\n self._authentication = kwargs.pop(\"authentication\")\n super(CustomClient,self).__init__( *args, **kwargs)\n\napp.test_client_class = CustomClient\nclient = app.test_client(authentication='Basic ....')\n\n\nSee FlaskClient for more information.\n\nChangelog\nChanged in version 0.11: Added **kwargs to support passing additional keyword arguments to\nthe constructor of test_client_class.\n\n\nNew in version 0.7: The use_cookies parameter was added as well as the ability\nto override the client to be used by setting the\ntest_client_class attribute.\n\n\nChanged in version 0.4: added support for with block usage for the client.\n\n"}, -{"name": "Flask.test_request_context", "args": ["*args", "**kwargs"], "description": "Create a RequestContext for a WSGI\nenvironment created from the given values. This is mostly useful\nduring testing, where you may want to run a function that uses\nrequest data without dispatching a full request.\nSee The Request Context.\nUse a with block to push the context, which will make\nrequest point at the request for the created\nenvironment.\nwith test_request_context(...):\n generate_report()\n\n\nWhen using the shell, it may be easier to push and pop the\ncontext manually to avoid indentation.\nctx = app.test_request_context(...)\nctx.push()\n...\nctx.pop()\n\n\nTakes the same arguments as Werkzeug\u2019s\nEnvironBuilder, with some defaults from\nthe application. See the linked Werkzeug docs for most of the\navailable arguments. Flask-specific behavior is listed here.\n\n\n\n\nParameters:\npath \u2013 URL path being requested.\nbase_url \u2013 Base URL where the app is being served, which\npath is relative to. If not given, built from\nPREFERRED_URL_SCHEME, subdomain,\nSERVER_NAME, and APPLICATION_ROOT.\nsubdomain \u2013 Subdomain name to append to\nSERVER_NAME.\nurl_scheme \u2013 Scheme to use instead of\nPREFERRED_URL_SCHEME.\ndata \u2013 The request body, either as a string or a dict of\nform keys and values.\njson \u2013 If given, this is serialized as JSON and passed as\ndata. Also defaults content_type to\napplication/json.\nargs \u2013 other positional arguments passed to\nEnvironBuilder.\nkwargs \u2013 other keyword arguments passed to\nEnvironBuilder.\n\n\n\n\n\n"}, -{"name": "Flask.trap_http_exception", "args": ["e"], "description": "Checks if an HTTP exception should be trapped or not. By default\nthis will return False for all exceptions except for a bad request\nkey error if TRAP_BAD_REQUEST_ERRORS is set to True. It\nalso returns True if TRAP_HTTP_EXCEPTIONS is set to True.\nThis is called for all HTTP exceptions raised by a view function.\nIf it returns True for any exception the error handler for this\nexception is not called and it shows up as regular exception in the\ntraceback. This is helpful for debugging implicitly raised HTTP\nexceptions.\n\nChanged in version 1.0: Bad request errors are not trapped by default in debug mode.\n\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.update_template_context", "args": ["context"], "description": "Update the template context with some commonly used variables.\nThis injects request, session, config and g into the template\ncontext as well as everything template context processors want\nto inject. Note that the as of Flask 0.6, the original values\nin the context will not be overridden if a context processor\ndecides to return a value with the same key.\n\n\n\n\nParameters:context \u2013 the context as a dictionary that is updated in place\nto add extra variables.\n\n\n\n"}, -{"name": "Flask.url_defaults", "args": ["f"], "description": "Callback function for URL defaults for all view functions of the\napplication. It\u2019s called with the endpoint and values and should\nupdate the values passed in place.\n"}, -{"name": "Flask.url_value_preprocessor", "args": ["f"], "description": "Register a URL value preprocessor function for all view\nfunctions in the application. These functions will be called before the\nbefore_request() functions.\nThe function can modify the values captured from the matched url before\nthey are passed to the view. For example, this can be used to pop a\ncommon language code value and place it in g rather than pass it to\nevery view.\nThe function is passed the endpoint name and values dict. The return\nvalue is ignored.\n"}, -{"name": "Flask.wsgi_app", "args": ["environ", "start_response"], "description": "The actual WSGI application. This is not implemented in\n__call__() so that middlewares can be applied without\nlosing a reference to the app object. Instead of doing this:\napp = MyMiddleware(app)\n\n\nIt\u2019s a better idea to do this instead:\napp.wsgi_app = MyMiddleware(app.wsgi_app)\n\n\nThen you still have the original application object around and\ncan continue to call methods on it.\n\nChangelog\nChanged in version 0.7: Teardown events for the request and app contexts are called\neven if an unhandled error occurs. Other events may not be\ncalled depending on when an error occurs during dispatch.\nSee Callbacks and Errors.\n\n\n\n\n\nParameters:\nenviron \u2013 A WSGI environment.\nstart_response \u2013 A callable accepting a status code,\na list of headers, and an optional exception context to\nstart the response.\n\n\n\n\n\n"}, -{"name": "Flask.after_request_funcs", "args": null, "description": "A dictionary with lists of functions that should be called after\neach request. The key of the dictionary is the name of the blueprint\nthis function is active for, None for all requests. This can for\nexample be used to close database connections. To register a function\nhere, use the after_request() decorator.\n"}, -{"name": "Flask.app_ctx_globals_class", "args": null, "description": "alias of flask.ctx._AppCtxGlobals\n"}, -{"name": "Flask.before_first_request_funcs", "args": null, "description": "A list of functions that will be called at the beginning of the\nfirst request to this instance. To register a function, use the\nbefore_first_request() decorator.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_request_funcs", "args": null, "description": "A dictionary with lists of functions that will be called at the\nbeginning of each request. The key of the dictionary is the name of\nthe blueprint this function is active for, or None for all\nrequests. To register a function, use the before_request()\ndecorator.\n"}, -{"name": "Flask.blueprints", "args": null, "description": "all the attached blueprints in a dictionary by name. Blueprints\ncan be attached multiple times so this dictionary does not tell\nyou how often they got attached.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.cli", "args": null, "description": "The click command line context for this application. Commands\nregistered here show up in the flask command once the\napplication has been discovered. The default commands are\nprovided by Flask itself and can be overridden.\nThis is an instance of a click.Group object.\n"}, -{"name": "Flask.config", "args": null, "description": "The configuration dictionary as Config. This behaves\nexactly like a regular dictionary but supports additional methods\nto load a config from files.\n"}, -{"name": "Flask.config_class", "args": null, "description": "alias of flask.config.Config\n"}, -{"name": "Flask.debug", "args": null, "description": "Whether debug mode is enabled. When using flask run to start\nthe development server, an interactive debugger will be shown for\nunhandled exceptions, and the server will be reloaded when code\nchanges. This maps to the DEBUG config key. This is\nenabled when env is 'development' and is overridden\nby the FLASK_DEBUG environment variable. It may not behave as\nexpected if set in code.\nDo not enable debug mode when deploying in production.\nDefault: True if env is 'development', or\nFalse otherwise.\n"}, -{"name": "Flask.default_config", "args": null, "description": "Default configuration parameters.\n"}, -{"name": "Flask.env", "args": null, "description": "What environment the app is running in. Flask and extensions may\nenable behaviors based on the environment, such as enabling debug\nmode. This maps to the ENV config key. This is set by the\nFLASK_ENV environment variable and may not behave as\nexpected if set in code.\nDo not enable development when deploying in production.\nDefault: 'production'\n"}, -{"name": "Flask.error_handler_spec", "args": null, "description": "A dictionary of all registered error handlers. The key is None\nfor error handlers active on the application, otherwise the key is\nthe name of the blueprint. Each key points to another dictionary\nwhere the key is the status code of the http exception. The\nspecial key None points to a list of tuples where the first item\nis the class for the instance check and the second the error handler\nfunction.\nTo register an error handler, use the errorhandler()\ndecorator.\n"}, -{"name": "Flask.extensions", "args": null, "description": "a place where extensions can store application specific state. For\nexample this is where an extension could store database engines and\nsimilar things. For backwards compatibility extensions should register\nthemselves like this:\nif not hasattr(app, 'extensions'):\n app.extensions = {}\napp.extensions['extensionname'] = SomeObject()\n\n\nThe key must match the name of the extension module. For example in\ncase of a \u201cFlask-Foo\u201d extension in flask_foo, the key would be\n'foo'.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.got_first_request", "args": null, "description": "This attribute is set to True if the application started\nhandling the first request.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.has_static_folder", "args": null, "description": "This is True if the package bound object\u2019s container has a\nfolder for static files.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.import_name", "args": null, "description": "The name of the package or module that this app belongs to. Do not\nchange this once it is set by the constructor.\n"}, -{"name": "Flask.instance_path", "args": null, "description": "Holds the path to the instance folder.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.jinja_env", "args": null, "description": "The Jinja2 environment used to load templates.\n"}, -{"name": "Flask.jinja_environment", "args": null, "description": "alias of flask.templating.Environment\n"}, -{"name": "Flask.jinja_loader", "args": null, "description": "The Jinja loader for this package bound object.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.jinja_options", "args": null, "description": "Options that are passed directly to the Jinja2 environment.\n"}, -{"name": "Flask.json_decoder", "args": null, "description": "alias of flask.json.JSONDecoder\n"}, -{"name": "Flask.json_encoder", "args": null, "description": "alias of flask.json.JSONEncoder\n"}, -{"name": "Flask.logger", "args": null, "description": "The 'flask.app' logger, a standard Python\nLogger.\nIn debug mode, the logger\u2019s level will be set\nto DEBUG.\nIf there are no handlers configured, a default handler will be added.\nSee Logging for more information.\n\nChanged in version 1.0: Behavior was simplified. The logger is always named\nflask.app. The level is only set during configuration, it\ndoesn\u2019t check app.debug each time. Only one format is used,\nnot different ones depending on app.debug. No handlers are\nremoved, and a handler is only added if no handlers are already\nconfigured.\n\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.name", "args": null, "description": "The name of the application. This is usually the import name\nwith the difference that it\u2019s guessed from the run file if the\nimport name is main. This name is used as a display name when\nFlask needs the name of the application. It can be set and overridden\nto change the value.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.permanent_session_lifetime", "args": null, "description": "A timedelta which is used to set the expiration\ndate of a permanent session. The default is 31 days which makes a\npermanent session survive for roughly one month.\nThis attribute can also be configured from the config with the\nPERMANENT_SESSION_LIFETIME configuration key. Defaults to\ntimedelta(days=31)\n"}, -{"name": "Flask.preserve_context_on_exception", "args": null, "description": "Returns the value of the PRESERVE_CONTEXT_ON_EXCEPTION\nconfiguration value in case it\u2019s set, otherwise a sensible default\nis returned.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.propagate_exceptions", "args": null, "description": "Returns the value of the PROPAGATE_EXCEPTIONS configuration\nvalue in case it\u2019s set, otherwise a sensible default is returned.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.request_class", "args": null, "description": "alias of flask.wrappers.Request\n"}, -{"name": "Flask.response_class", "args": null, "description": "alias of flask.wrappers.Response\n"}, -{"name": "Flask.root_path", "args": null, "description": "Absolute path to the package on the filesystem. Used to look up\nresources contained in the package.\n"}, -{"name": "Flask.secret_key", "args": null, "description": "If a secret key is set, cryptographic components can use this to\nsign cookies and other things. Set this to a complex random value\nwhen you want to use the secure cookie for instance.\nThis attribute can also be configured from the config with the\nSECRET_KEY configuration key. Defaults to None.\n"}, -{"name": "Flask.send_file_max_age_default", "args": null, "description": "A timedelta which is used as default cache_timeout\nfor the send_file() functions. The default is 12 hours.\nThis attribute can also be configured from the config with the\nSEND_FILE_MAX_AGE_DEFAULT configuration key. This configuration\nvariable can also be set with an integer value used as seconds.\nDefaults to timedelta(hours=12)\n"}, -{"name": "Flask.session_cookie_name", "args": null, "description": "The secure cookie uses this for the name of the session cookie.\nThis attribute can also be configured from the config with the\nSESSION_COOKIE_NAME configuration key. Defaults to 'session'\n"}, -{"name": "Flask.session_interface", "args": null, "description": "the session interface to use. By default an instance of\nSecureCookieSessionInterface is used here.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.shell_context_processors", "args": null, "description": "A list of shell context processor functions that should be run\nwhen a shell context is created.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.static_folder", "args": null, "description": "The absolute path to the configured static folder.\n"}, -{"name": "Flask.static_url_path", "args": null, "description": "The URL prefix that the static route will be registered for.\n"}, -{"name": "Flask.teardown_appcontext_funcs", "args": null, "description": "A list of functions that are called when the application context\nis destroyed. Since the application context is also torn down\nif the request ends this is the place to store code that disconnects\nfrom databases.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.teardown_request_funcs", "args": null, "description": "A dictionary with lists of functions that are called after\neach request, even if an exception has occurred. The key of the\ndictionary is the name of the blueprint this function is active for,\nNone for all requests. These functions are not allowed to modify\nthe request, and their return values are ignored. If an exception\noccurred while processing the request, it gets passed to each\nteardown_request function. To register a function here, use the\nteardown_request() decorator.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.template_context_processors", "args": null, "description": "A dictionary with list of functions that are called without argument\nto populate the template context. The key of the dictionary is the\nname of the blueprint this function is active for, None for all\nrequests. Each returns a dictionary that the template context is\nupdated with. To register a function here, use the\ncontext_processor() decorator.\n"}, -{"name": "Flask.template_folder", "args": null, "description": "Location of the template files to be added to the template lookup.\nNone if templates should not be added.\n"}, -{"name": "Flask.templates_auto_reload", "args": null, "description": "Reload templates when they are changed. Used by\ncreate_jinja_environment().\nThis attribute can be configured with TEMPLATES_AUTO_RELOAD. If\nnot set, it will be enabled in debug mode.\n\nNew in version 1.0: This property was added but the underlying config and behavior\nalready existed.\n\n\nChangelog"}, -{"name": "Flask.test_cli_runner_class", "args": null, "description": "The CliRunner subclass, by default\nFlaskCliRunner that is used by\ntest_cli_runner(). Its __init__ method should take a\nFlask app object as the first argument.\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "Flask.test_client_class", "args": null, "description": "the test client that is used with when test_client is used.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.testing", "args": null, "description": "The testing flag. Set this to True to enable the test mode of\nFlask extensions (and in the future probably also Flask itself).\nFor example this might activate test helpers that have an\nadditional runtime cost which should not be enabled by default.\nIf this is enabled and PROPAGATE_EXCEPTIONS is not changed from the\ndefault it\u2019s implicitly enabled.\nThis attribute can also be configured from the config with the\nTESTING configuration key. Defaults to False.\n"}, -{"name": "Flask.url_build_error_handlers", "args": null, "description": "A list of functions that are called when url_for() raises a\nBuildError. Each function registered here\nis called with error, endpoint and values. If a function\nreturns None or raises a BuildError the next function is\ntried.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.url_default_functions", "args": null, "description": "A dictionary with lists of functions that can be used as URL value\npreprocessors. The key None here is used for application wide\ncallbacks, otherwise the key is the name of the blueprint.\nEach of these functions has the chance to modify the dictionary\nof URL values before they are used as the keyword arguments of the\nview function. For each function registered this one should also\nprovide a url_defaults() function that adds the parameters\nautomatically again that were removed that way.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.url_map", "args": null, "description": "The Map for this instance. You can use\nthis to change the routing converters after the class was created\nbut before any routes are connected. Example:\nfrom werkzeug.routing import BaseConverter\n\nclass ListConverter(BaseConverter):\n def to_python(self, value):\n return value.split(',')\n def to_url(self, values):\n return ','.join(super(ListConverter, self).to_url(value)\n for value in values)\n\napp = Flask(__name__)\napp.url_map.converters['list'] = ListConverter\n\n\n"}, -{"name": "Flask.url_rule_class", "args": null, "description": "alias of werkzeug.routing.Rule\n"}, -{"name": "Flask.url_value_preprocessors", "args": null, "description": "A dictionary with lists of functions that are called before the\nbefore_request_funcs functions. The key of the dictionary is\nthe name of the blueprint this function is active for, or None\nfor all requests. To register a function, use\nurl_value_preprocessor().\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.use_x_sendfile", "args": null, "description": "Enable this if you want to use the X-Sendfile feature. Keep in\nmind that the server has to support this. This only affects files\nsent with the send_file() method.\n\nChangelog\nNew in version 0.2.\n\nThis attribute can also be configured from the config with the\nUSE_X_SENDFILE configuration key. Defaults to False.\n"}, -{"name": "Flask.view_functions", "args": null, "description": "A dictionary of all view functions registered. The keys will\nbe function names which are also used to generate URLs and\nthe values are the function objects themselves.\nTo register a view function, use the route() decorator.\n"}, -{"name": "Blueprint", "args": ["name", "import_name", "static_folder=None", "static_url_path=None", "template_folder=None", "url_prefix=None", "subdomain=None", "url_defaults=None", "root_path=None"], "description": "Represents a blueprint. A blueprint is an object that records\nfunctions that will be called with the\nBlueprintSetupState later to register functions\nor other things on the main application. See Modular Applications with Blueprints for more\ninformation.\n\n"}, -{"name": "Blueprint.add_app_template_filter", "args": ["f", "name=None"], "description": "Register a custom template filter, available application wide. Like\nFlask.add_template_filter() but for a blueprint. Works exactly\nlike the app_template_filter() decorator.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_app_template_global", "args": ["f", "name=None"], "description": "Register a custom template global, available application wide. Like\nFlask.add_template_global() but for a blueprint. Works exactly\nlike the app_template_global() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_app_template_test", "args": ["f", "name=None"], "description": "Register a custom template test, available application wide. Like\nFlask.add_template_test() but for a blueprint. Works exactly\nlike the app_template_test() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "**options"], "description": "Like Flask.add_url_rule() but for a blueprint. The endpoint for\nthe url_for() function is prefixed with the name of the blueprint.\n"}, -{"name": "Blueprint.after_app_request", "args": ["f"], "description": "Like Flask.after_request() but for a blueprint. Such a function\nis executed after each request, even if outside of the blueprint.\n"}, -{"name": "Blueprint.after_request", "args": ["f"], "description": "Like Flask.after_request() but for a blueprint. This function\nis only executed after each request that is handled by a function of\nthat blueprint.\n"}, -{"name": "Blueprint.app_context_processor", "args": ["f"], "description": "Like Flask.context_processor() but for a blueprint. Such a\nfunction is executed each request, even if outside of the blueprint.\n"}, -{"name": "Blueprint.app_errorhandler", "args": ["code"], "description": "Like Flask.errorhandler() but for a blueprint. This\nhandler is used for all requests, even if outside of the blueprint.\n"}, -{"name": "Blueprint.app_template_filter", "args": ["name=None"], "description": "Register a custom template filter, available application wide. Like\nFlask.template_filter() but for a blueprint.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_template_global", "args": ["name=None"], "description": "Register a custom template global, available application wide. Like\nFlask.template_global() but for a blueprint.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_template_test", "args": ["name=None"], "description": "Register a custom template test, available application wide. Like\nFlask.template_test() but for a blueprint.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_url_defaults", "args": ["f"], "description": "Same as url_defaults() but application wide.\n"}, -{"name": "Blueprint.app_url_value_preprocessor", "args": ["f"], "description": "Same as url_value_preprocessor() but application wide.\n"}, -{"name": "Blueprint.before_app_first_request", "args": ["f"], "description": "Like Flask.before_first_request(). Such a function is\nexecuted before the first request to the application.\n"}, -{"name": "Blueprint.before_app_request", "args": ["f"], "description": "Like Flask.before_request(). Such a function is executed\nbefore each request, even if outside of a blueprint.\n"}, -{"name": "Blueprint.before_request", "args": ["f"], "description": "Like Flask.before_request() but for a blueprint. This function\nis only executed before each request that is handled by a function of\nthat blueprint.\n"}, -{"name": "Blueprint.context_processor", "args": ["f"], "description": "Like Flask.context_processor() but for a blueprint. This\nfunction is only executed for requests handled by a blueprint.\n"}, -{"name": "Blueprint.endpoint", "args": ["endpoint"], "description": "Like Flask.endpoint() but for a blueprint. This does not\nprefix the endpoint with the blueprint name, this has to be done\nexplicitly by the user of this method. If the endpoint is prefixed\nwith a . it will be registered to the current blueprint, otherwise\nit\u2019s an application independent endpoint.\n"}, -{"name": "Blueprint.errorhandler", "args": ["code_or_exception"], "description": "Registers an error handler that becomes active for this blueprint\nonly. Please be aware that routing does not happen local to a\nblueprint so an error handler for 404 usually is not handled by\na blueprint unless it is caused inside a view function. Another\nspecial case is the 500 internal server error which is always looked\nup from the application.\nOtherwise works as the errorhandler() decorator\nof the Flask object.\n"}, -{"name": "Blueprint.get_send_file_max_age", "args": ["filename"], "description": "Provides default cache_timeout for the send_file() functions.\nBy default, this function returns SEND_FILE_MAX_AGE_DEFAULT from\nthe configuration of current_app.\nStatic file functions such as send_from_directory() use this\nfunction, and send_file() calls this function on\ncurrent_app when the given cache_timeout is None. If a\ncache_timeout is given in send_file(), that timeout is used;\notherwise, this method is called.\nThis allows subclasses to change the behavior when sending files based\non the filename. For example, to set the cache timeout for .js files\nto 60 seconds:\nclass MyFlask(flask.Flask):\n def get_send_file_max_age(self, name):\n if name.lower().endswith('.js'):\n return 60\n return flask.Flask.get_send_file_max_age(self, name)\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Blueprint.make_setup_state", "args": ["app", "options", "first_registration=False"], "description": "Creates an instance of BlueprintSetupState()\nobject that is later passed to the register callback functions.\nSubclasses can override this to return a subclass of the setup state.\n"}, -{"name": "Blueprint.open_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s resource folder. To see\nhow this works, consider the following folder structure:\n/myapplication.py\n/schema.sql\n/static\n /style.css\n/templates\n /layout.html\n /index.html\n\n\nIf you want to open the schema.sql file you would do the\nfollowing:\nwith app.open_resource('schema.sql') as f:\n contents = f.read()\n do_something_with(contents)\n\n\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Blueprint.record", "args": ["func"], "description": "Registers a function that is called when the blueprint is\nregistered on the application. This function is called with the\nstate as argument as returned by the make_setup_state()\nmethod.\n"}, -{"name": "Blueprint.record_once", "args": ["func"], "description": "Works like record() but wraps the function in another\nfunction that will ensure the function is only called once. If the\nblueprint is registered a second time on the application, the\nfunction passed is not called.\n"}, -{"name": "Blueprint.register", "args": ["app", "options", "first_registration=False"], "description": "Called by Flask.register_blueprint() to register all views\nand callbacks registered on the blueprint with the application. Creates\na BlueprintSetupState and calls each record() callback\nwith it.\n\n\n\n\nParameters:\napp \u2013 The application this blueprint is being registered with.\noptions \u2013 Keyword arguments forwarded from\nregister_blueprint().\nfirst_registration \u2013 Whether this is the first time this\nblueprint has been registered on the application.\n\n\n\n\n\n"}, -{"name": "Blueprint.register_error_handler", "args": ["code_or_exception", "f"], "description": "Non-decorator version of the errorhandler() error attach\nfunction, akin to the register_error_handler()\napplication-wide function of the Flask object but\nfor error handlers limited to this blueprint.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Blueprint.route", "args": ["rule", "**options"], "description": "Like Flask.route() but for a blueprint. The endpoint for the\nurl_for() function is prefixed with the name of the blueprint.\n"}, -{"name": "Blueprint.send_static_file", "args": ["filename"], "description": "Function used internally to send static files from the static\nfolder to the browser.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.teardown_app_request", "args": ["f"], "description": "Like Flask.teardown_request() but for a blueprint. Such a\nfunction is executed when tearing down each request, even if outside of\nthe blueprint.\n"}, -{"name": "Blueprint.teardown_request", "args": ["f"], "description": "Like Flask.teardown_request() but for a blueprint. This\nfunction is only executed when tearing down requests handled by a\nfunction of that blueprint. Teardown request functions are executed\nwhen the request context is popped, even when no actual request was\nperformed.\n"}, -{"name": "Blueprint.url_defaults", "args": ["f"], "description": "Callback function for URL defaults for this blueprint. It\u2019s called\nwith the endpoint and values and should update the values passed\nin place.\n"}, -{"name": "Blueprint.url_value_preprocessor", "args": ["f"], "description": "Registers a function as URL value preprocessor for this\nblueprint. It\u2019s called before the view functions are called and\ncan modify the url values provided.\n"}, -{"name": "Blueprint.has_static_folder", "args": null, "description": "This is True if the package bound object\u2019s container has a\nfolder for static files.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.import_name", "args": null, "description": "The name of the package or module that this app belongs to. Do not\nchange this once it is set by the constructor.\n"}, -{"name": "Blueprint.jinja_loader", "args": null, "description": "The Jinja loader for this package bound object.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.json_decoder", "args": null, "description": "Blueprint local JSON decoder class to use.\nSet to None to use the app\u2019s json_decoder.\n"}, -{"name": "Blueprint.json_encoder", "args": null, "description": "Blueprint local JSON decoder class to use.\nSet to None to use the app\u2019s json_encoder.\n"}, -{"name": "Blueprint.root_path", "args": null, "description": "Absolute path to the package on the filesystem. Used to look up\nresources contained in the package.\n"}, -{"name": "Blueprint.static_folder", "args": null, "description": "The absolute path to the configured static folder.\n"}, -{"name": "Blueprint.static_url_path", "args": null, "description": "The URL prefix that the static route will be registered for.\n"}, -{"name": "Blueprint.template_folder", "args": null, "description": "Location of the template files to be added to the template lookup.\nNone if templates should not be added.\n"}, -{"name": "Request", "args": ["environ", "populate_request=True", "shallow=False"], "description": "The request object used by default in Flask. Remembers the\nmatched endpoint and view arguments.\n\nIt is what ends up as request. If you want to replace\nthe request object used you can subclass this and set\nrequest_class to your subclass.\n\nThe request object is a Request subclass and\nprovides all of the attributes Werkzeug defines plus a few Flask\nspecific ones.\n\n"}, -{"name": "Request.close", "args": [], "description": "Closes associated resources of this request object. This\ncloses all file handles explicitly. You can also use the request\nobject in a with statement which will automatically close it.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.get_data", "args": ["cache=True", "as_text=False", "parse_form_data=False"], "description": "This reads the buffered incoming data from the client into one\nbytestring. By default this is cached but that behavior can be\nchanged by setting cache to False.\nUsually it\u2019s a bad idea to call this method without checking the\ncontent length first as a client could send dozens of megabytes or more\nto cause memory problems on the server.\nNote that if the form data was already parsed this method will not\nreturn anything as form data parsing does not cache the data like\nthis method does. To implicitly invoke form data parsing function\nset parse_form_data to True. When this is done the return value\nof this method will be an empty string if the form parser handles\nthe data. This generally is not necessary as if the whole data is\ncached (which is the default) the form parser will used the cached\ndata to parse the form data. Please be generally aware of checking\nthe content length first in any case before calling this method\nto avoid exhausting server memory.\nIf as_text is set to True the return value will be a decoded\nunicode string.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.get_json", "args": ["force=False", "silent=False", "cache=True", "application/json"], "description": "Parse and return the data as JSON. If the mimetype does not\nindicate JSON (application/json, see\nis_json()), this returns None unless force is\ntrue. If parsing fails, on_json_loading_failed() is called\nand its return value is used as the return value.\n\n\n\n\nParameters:\nforce \u2013 Ignore the mimetype and always try to parse JSON.\nsilent \u2013 Silence parsing errors and return None\ninstead.\ncache \u2013 Store the parsed JSON to return for subsequent\ncalls.\n\n\n\n\n\n"}, -{"name": "Request.make_form_data_parser", "args": [], "description": "Creates the form data parser. Instantiates the\nform_data_parser_class with some parameters.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Request.on_json_loading_failed", "args": ["e"], "description": "Called if get_json() parsing fails and isn\u2019t silenced. If\nthis method returns a value, it is used as the return value for\nget_json(). The default implementation raises a\nBadRequest exception.\n\nChangelog\nChanged in version 0.10: Raise a BadRequest error instead of returning an error\nmessage as JSON. If you want that behavior you can add it by\nsubclassing.\n\n\nNew in version 0.8.\n\n"}, -{"name": "Request.environ", "args": null, "description": "The underlying WSGI environment.\n"}, -{"name": "Request.path", "args": null, "description": ""}, -{"name": "Request.full_path", "args": null, "description": ""}, -{"name": "Request.script_root", "args": null, "description": ""}, -{"name": "Request.url", "args": null, "description": ""}, -{"name": "Request.base_url", "args": null, "description": ""}, -{"name": "Request.url_root", "args": null, "description": "Provides different ways to look at the current IRI. Imagine your application is\nlistening on the following application root:\nhttp://www.example.com/myapplication\n\n\nAnd a user requests the following URI:\nhttp://www.example.com/myapplication/%CF%80/page.html?x=y\n\n\nIn this case the values of the above mentioned attributes would be\nthe following:\n\n\n\n\n\n\npath\nu'/\u03c0/page.html'\n\nfull_path\nu'/\u03c0/page.html?x=y'\n\nscript_root\nu'/myapplication'\n\nbase_url\nu'http://www.example.com/myapplication/\u03c0/page.html'\n\nurl\nu'http://www.example.com/myapplication/\u03c0/page.html?x=y'\n\nurl_root\nu'http://www.example.com/myapplication/'\n\n\n\n"}, -{"name": "Request.accept_charsets", "args": null, "description": "List of charsets this client supports as\nCharsetAccept object.\n"}, -{"name": "Request.accept_encodings", "args": null, "description": "List of encodings this client accepts. Encodings in a HTTP term\nare compression encodings such as gzip. For charsets have a look at\naccept_charset.\n"}, -{"name": "Request.accept_languages", "args": null, "description": "List of languages this client accepts as\nLanguageAccept object.\n"}, -{"name": "Request.accept_mimetypes", "args": null, "description": "List of mimetypes this client supports as\nMIMEAccept object.\n"}, -{"name": "Request.access_route", "args": null, "description": "If a forwarded header exists this is a list of all ip addresses\nfrom the client ip to the last proxy server.\n"}, -{"name": "Request.args", "args": null, "description": "The parsed URL parameters (the part in the URL after the question\nmark).\nBy default an\nImmutableMultiDict\nis returned from this function. This can be changed by setting\nparameter_storage_class to a different type. This might\nbe necessary if the order of the form data is important.\n"}, -{"name": "Request.authorization", "args": null, "description": "The Authorization object in parsed form.\n"}, -{"name": "Request.base_url", "args": null, "description": "Like url but without the querystring\nSee also: trusted_hosts.\n"}, -{"name": "Request.blueprint", "args": null, "description": "The name of the current blueprint\n"}, -{"name": "Request.cache_control", "args": null, "description": "A RequestCacheControl object\nfor the incoming cache control headers.\n"}, -{"name": "Request.content_encoding", "args": null, "description": "The Content-Encoding entity-header field is used as a modifier to the\nmedia-type. When present, its value indicates what additional content\ncodings have been applied to the entity-body, and thus what decoding\nmechanisms must be applied in order to obtain the media-type\nreferenced by the Content-Type header field.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.content_length", "args": null, "description": "The Content-Length entity-header field indicates the size of the\nentity-body in bytes or, in the case of the HEAD method, the size of\nthe entity-body that would have been sent had the request been a\nGET.\n"}, -{"name": "Request.content_md5", "args": null, "description": "\nThe Content-MD5 entity-header field, as defined in RFC 1864, is an\nMD5 digest of the entity-body for the purpose of providing an\nend-to-end message integrity check (MIC) of the entity-body. (Note:\na MIC is good for detecting accidental modification of the\nentity-body in transit, but is not proof against malicious attacks.)\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.content_type", "args": null, "description": "The Content-Type entity-header field indicates the media type of\nthe entity-body sent to the recipient or, in the case of the HEAD\nmethod, the media type that would have been sent had the request\nbeen a GET.\n"}, -{"name": "Request.cookies", "args": null, "description": "A dict with the contents of all cookies transmitted with\nthe request.\n"}, -{"name": "Request.data", "args": null, "description": "Contains the incoming request data as string in case it came with\na mimetype Werkzeug does not handle.\n"}, -{"name": "Request.date", "args": null, "description": "The Date general-header field represents the date and time at which\nthe message was originated, having the same semantics as orig-date\nin RFC 822.\n"}, -{"name": "Request.dict_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableTypeConversionDict\n"}, -{"name": "Request.endpoint", "args": null, "description": "The endpoint that matched the request. This in combination with\nview_args can be used to reconstruct the same or a\nmodified URL. If an exception happened when matching, this will\nbe None.\n"}, -{"name": "Request.files", "args": null, "description": "MultiDict object containing\nall uploaded files. Each key in files is the name from the\n. Each value in files is a\nWerkzeug FileStorage object.\nIt basically behaves like a standard file object you know from Python,\nwith the difference that it also has a\nsave() function that can\nstore the file on the filesystem.\nNote that files will only contain data if the request method was\nPOST, PUT or PATCH and the
that posted to the request had\nenctype=\"multipart/form-data\". It will be empty otherwise.\nSee the MultiDict /\nFileStorage documentation for\nmore details about the used data structure.\n"}, -{"name": "Request.form", "args": null, "description": "The form parameters. By default an\nImmutableMultiDict\nis returned from this function. This can be changed by setting\nparameter_storage_class to a different type. This might\nbe necessary if the order of the form data is important.\nPlease keep in mind that file uploads will not end up here, but instead\nin the files attribute.\n\nChangelog\nChanged in version 0.9: Previous to Werkzeug 0.9 this would only contain form data for POST\nand PUT requests.\n\n"}, -{"name": "Request.form_data_parser_class", "args": null, "description": "alias of werkzeug.formparser.FormDataParser\n"}, -{"name": "Request.full_path", "args": null, "description": "Requested path as unicode, including the query string.\n"}, -{"name": "Request.headers", "args": null, "description": "The headers from the WSGI environ as immutable\nEnvironHeaders.\n"}, -{"name": "Request.host", "args": null, "description": "Just the host including the port if available.\nSee also: trusted_hosts.\n"}, -{"name": "Request.host_url", "args": null, "description": "Just the host with scheme as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.if_match", "args": null, "description": "An object containing all the etags in the If-Match header.\n\n\n\n\nReturn type:ETags\n\n\n\n"}, -{"name": "Request.if_modified_since", "args": null, "description": "The parsed If-Modified-Since header as datetime object.\n"}, -{"name": "Request.if_none_match", "args": null, "description": "An object containing all the etags in the If-None-Match header.\n\n\n\n\nReturn type:ETags\n\n\n\n"}, -{"name": "Request.if_range", "args": null, "description": "The parsed If-Range header.\n\nChangelog\nNew in version 0.7.\n\n\n\n\n\nReturn type:IfRange\n\n\n\n"}, -{"name": "Request.if_unmodified_since", "args": null, "description": "The parsed If-Unmodified-Since header as datetime object.\n"}, -{"name": "Request.is_json", "args": null, "description": "Check if the mimetype indicates JSON data, either\napplication/json or application/*+json.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Request.is_multiprocess", "args": null, "description": "boolean that is True if the application is served by\na WSGI server that spawns multiple processes.\n"}, -{"name": "Request.is_multithread", "args": null, "description": "boolean that is True if the application is served by\na multithreaded WSGI server.\n"}, -{"name": "Request.is_run_once", "args": null, "description": "boolean that is True if the application will be executed only\nonce in a process lifetime. This is the case for CGI for example,\nbut it\u2019s not guaranteed that the execution only happens one time.\n"}, -{"name": "Request.is_secure", "args": null, "description": "True if the request is secure.\n"}, -{"name": "Request.is_xhr", "args": null, "description": "True if the request was triggered via a JavaScript XMLHttpRequest.\nThis only works with libraries that support the X-Requested-With\nheader and set it to \u201cXMLHttpRequest\u201d. Libraries that do that are\nprototype, jQuery and Mochikit and probably some more.\n\nDeprecated since version 0.13: X-Requested-With is not standard and is unreliable.\n\n\nChangelog"}, -{"name": "Request.json", "args": null, "description": "This will contain the parsed JSON data if the mimetype indicates\nJSON (application/json, see is_json()), otherwise it\nwill be None.\n"}, -{"name": "Request.list_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableList\n"}, -{"name": "Request.max_content_length", "args": null, "description": "Read-only view of the MAX_CONTENT_LENGTH config key.\n"}, -{"name": "Request.max_forwards", "args": null, "description": "The Max-Forwards request-header field provides a mechanism with the\nTRACE and OPTIONS methods to limit the number of proxies or gateways\nthat can forward the request to the next inbound server.\n"}, -{"name": "Request.method", "args": null, "description": "The request method. (For example 'GET' or 'POST').\n"}, -{"name": "Request.mimetype", "args": null, "description": "Like content_type, but without parameters (eg, without\ncharset, type etc.) and always lowercase. For example if the content\ntype is text/HTML; charset=utf-8 the mimetype would be\n'text/html'.\n"}, -{"name": "Request.mimetype_params", "args": null, "description": "The mimetype parameters as dict. For example if the content\ntype is text/html; charset=utf-8 the params would be\n{'charset': 'utf-8'}.\n"}, -{"name": "Request.parameter_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableMultiDict\n"}, -{"name": "Request.path", "args": null, "description": "Requested path as unicode. This works a bit like the regular path\ninfo in the WSGI environment but will always include a leading slash,\neven if the URL root is accessed.\n"}, -{"name": "Request.pragma", "args": null, "description": "The Pragma general-header field is used to include\nimplementation-specific directives that might apply to any recipient\nalong the request/response chain. All pragma directives specify\noptional behavior from the viewpoint of the protocol; however, some\nsystems MAY require that behavior be consistent with the directives.\n"}, -{"name": "Request.query_string", "args": null, "description": "The URL parameters as raw bytestring.\n"}, -{"name": "Request.range", "args": null, "description": "The parsed Range header.\n\nChangelog\nNew in version 0.7.\n\n\n\n\n\nReturn type:Range\n\n\n\n"}, -{"name": "Request.referrer", "args": null, "description": "The Referer[sic] request-header field allows the client to specify,\nfor the server\u2019s benefit, the address (URI) of the resource from which\nthe Request-URI was obtained (the \u201creferrer\u201d, although the header\nfield is misspelled).\n"}, -{"name": "Request.remote_addr", "args": null, "description": "The remote address of the client.\n"}, -{"name": "Request.remote_user", "args": null, "description": "If the server supports user authentication, and the script is\nprotected, this attribute contains the username the user has\nauthenticated as.\n"}, -{"name": "Request.routing_exception", "args": null, "description": "If matching the URL failed, this is the exception that will be\nraised / was raised as part of the request handling. This is\nusually a NotFound exception or\nsomething similar.\n"}, -{"name": "Request.scheme", "args": null, "description": "URL scheme (http or https).\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Request.script_root", "args": null, "description": "The root path of the script without the trailing slash.\n"}, -{"name": "Request.stream", "args": null, "description": "If the incoming form data was not encoded with a known mimetype\nthe data is stored unmodified in this stream for consumption. Most\nof the time it is a better idea to use data which will give\nyou that data as a string. The stream only returns the data once.\nUnlike input_stream this stream is properly guarded that you\ncan\u2019t accidentally read past the length of the input. Werkzeug will\ninternally always refer to this stream to read data which makes it\npossible to wrap this object with a stream that does filtering.\n\nChangelog\nChanged in version 0.9: This stream is now always available but might be consumed by the\nform parser later on. Previously the stream was only set if no\nparsing happened.\n\n"}, -{"name": "Request.url", "args": null, "description": "The reconstructed current URL as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.url_charset", "args": null, "description": "The charset that is assumed for URLs. Defaults to the value\nof charset.\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "Request.url_root", "args": null, "description": "The full URL root (with hostname), this is the application\nroot as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.url_rule", "args": null, "description": "The internal URL rule that matched the request. This can be\nuseful to inspect which methods are allowed for the URL from\na before/after handler (request.url_rule.methods) etc.\nThough if the request\u2019s method was invalid for the URL rule,\nthe valid list is available in routing_exception.valid_methods\ninstead (an attribute of the Werkzeug exception MethodNotAllowed)\nbecause the request was never internally bound.\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "Request.user_agent", "args": null, "description": "The current user agent.\n"}, -{"name": "Request.values", "args": null, "description": "A werkzeug.datastructures.CombinedMultiDict that combines\nargs and form.\n"}, -{"name": "Request.view_args", "args": null, "description": "A dict of view arguments that matched the request. If an exception\nhappened when matching, this will be None.\n"}, -{"name": "Request.want_form_data_parsed", "args": null, "description": "Returns True if the request method carries content. As of\nWerkzeug 0.9 this will be the case if a content type is transmitted.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Response", "args": ["response=None", "status=None", "headers=None", "mimetype=None", "content_type=None", "direct_passthrough=False"], "description": "The response object that is used by default in Flask. Works like the\nresponse object from Werkzeug but is set to have an HTML mimetype by\ndefault. Quite often you don\u2019t have to create this object yourself because\nmake_response() will take care of that for you.\n\nIf you want to replace the response object used you can subclass this and\nset response_class to your subclass.\n\n"}, -{"name": "Response.get_json", "args": ["force=False", "silent=False", "cache=True", "application/json"], "description": "Parse and return the data as JSON. If the mimetype does not\nindicate JSON (application/json, see\nis_json()), this returns None unless force is\ntrue. If parsing fails, on_json_loading_failed() is called\nand its return value is used as the return value.\n\n\n\n\nParameters:\nforce \u2013 Ignore the mimetype and always try to parse JSON.\nsilent \u2013 Silence parsing errors and return None\ninstead.\ncache \u2013 Store the parsed JSON to return for subsequent\ncalls.\n\n\n\n\n\n"}, -{"name": "Response.set_cookie", "args": ["key", "value=''", "max_age=None", "expires=None", "path='/'", "domain=None", "secure=False", "httponly=False", "samesite=None"], "description": "Sets a cookie. The parameters are the same as in the cookie Morsel\nobject in the Python standard library but it accepts unicode data, too.\nA warning is raised if the size of the cookie header exceeds\nmax_cookie_size, but the header will still be set.\n\n\n\n\nParameters:\nkey \u2013 the key (name) of the cookie to be set.\nvalue \u2013 the value of the cookie.\nmax_age \u2013 should be a number of seconds, or None (default) if\nthe cookie should last only as long as the client\u2019s\nbrowser session.\nexpires \u2013 should be a datetime object or UNIX timestamp.\npath \u2013 limits the cookie to a given path, per default it will\nspan the whole domain.\ndomain \u2013 if you want to set a cross-domain cookie. For example,\ndomain=\".example.com\" will set a cookie that is\nreadable by the domain www.example.com,\nfoo.example.com etc. Otherwise, a cookie will only\nbe readable by the domain that set it.\nsecure \u2013 If True, the cookie will only be available via HTTPS\nhttponly \u2013 disallow JavaScript to access the cookie. This is an\nextension to the cookie standard and probably not\nsupported by all browsers.\nsamesite \u2013 Limits the scope of the cookie such that it will only\nbe attached to requests if those requests are\n\u201csame-site\u201d.\n\n\n\n\n\n"}, -{"name": "Response.headers", "args": null, "description": "A Headers object representing the response headers.\n"}, -{"name": "Response.status", "args": null, "description": "A string with a response status.\n"}, -{"name": "Response.status_code", "args": null, "description": "The response status as integer.\n"}, -{"name": "Response.data", "args": null, "description": "A descriptor that calls get_data() and set_data(). This\nshould not be used and will eventually get deprecated.\n"}, -{"name": "Response.is_json", "args": null, "description": "Check if the mimetype indicates JSON data, either\napplication/json or application/*+json.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Response.max_cookie_size", "args": null, "description": "Read-only view of the MAX_COOKIE_SIZE config key.\nSee max_cookie_size in\nWerkzeug\u2019s docs.\n"}, -{"name": "Response.mimetype", "args": null, "description": "The mimetype (content type without charset etc.)\n"}, -{"name": "session", "args": [], "description": "The session object works pretty much like an ordinary dict, with the\ndifference that it keeps track on modifications.\n\nThis is a proxy. See Notes On Proxies for more information.\n\nThe following attributes are interesting:\n\n"}, -{"name": "session.new", "args": null, "description": "True if the session is new, False otherwise.\n"}, -{"name": "session.modified", "args": null, "description": "True if the session object detected a modification. Be advised\nthat modifications on mutable structures are not picked up\nautomatically, in that situation you have to explicitly set the\nattribute to True yourself. Here an example:\n# this change is not picked up because a mutable object (here\n# a list) is changed.\nsession['objects'].append(42)\n# so mark it as modified yourself\nsession.modified = True\n\n\n"}, -{"name": "session.permanent", "args": null, "description": "If set to True the session lives for\npermanent_session_lifetime seconds. The\ndefault is 31 days. If set to False (which is the default) the\nsession will be deleted when the user closes the browser.\n"}, -{"name": "SessionInterface", "args": [], "description": "The basic interface you have to implement in order to replace the\ndefault session interface which uses werkzeug\u2019s securecookie\nimplementation. The only methods you have to implement are\nopen_session() and save_session(), the others have\nuseful defaults which you don\u2019t need to change.\n\nThe session object returned by the open_session() method has to\nprovide a dictionary like interface plus the properties and methods\nfrom the SessionMixin. We recommend just subclassing a dict\nand adding that mixin:\n\nIf open_session() returns None Flask will call into\nmake_null_session() to create a session that acts as replacement\nif the session support cannot work because some requirement is not\nfulfilled. The default NullSession class that is created\nwill complain that the secret key was not set.\n\nTo replace the session interface on an application all you have to do\nis to assign flask.Flask.session_interface:\n\n"}, -{"name": "SessionInterface.get_cookie_domain", "args": ["app"], "description": "Returns the domain that should be set for the session cookie.\nUses SESSION_COOKIE_DOMAIN if it is configured, otherwise\nfalls back to detecting the domain based on SERVER_NAME.\nOnce detected (or if not set at all), SESSION_COOKIE_DOMAIN is\nupdated to avoid re-running the logic.\n"}, -{"name": "SessionInterface.get_cookie_httponly", "args": ["app"], "description": "Returns True if the session cookie should be httponly. This\ncurrently just returns the value of the SESSION_COOKIE_HTTPONLY\nconfig var.\n"}, -{"name": "SessionInterface.get_cookie_path", "args": ["app"], "description": "Returns the path for which the cookie should be valid. The\ndefault implementation uses the value from the SESSION_COOKIE_PATH\nconfig var if it\u2019s set, and falls back to APPLICATION_ROOT or\nuses / if it\u2019s None.\n"}, -{"name": "SessionInterface.get_cookie_samesite", "args": ["app"], "description": "Return 'Strict' or 'Lax' if the cookie should use the\nSameSite attribute. This currently just returns the value of\nthe SESSION_COOKIE_SAMESITE setting.\n"}, -{"name": "SessionInterface.get_cookie_secure", "args": ["app"], "description": "Returns True if the cookie should be secure. This currently\njust returns the value of the SESSION_COOKIE_SECURE setting.\n"}, -{"name": "SessionInterface.get_expiration_time", "args": ["app", "session"], "description": "A helper method that returns an expiration date for the session\nor None if the session is linked to the browser session. The\ndefault implementation returns now + the permanent session\nlifetime configured on the application.\n"}, -{"name": "SessionInterface.is_null_session", "args": ["obj"], "description": "Checks if a given object is a null session. Null sessions are\nnot asked to be saved.\nThis checks if the object is an instance of null_session_class\nby default.\n"}, -{"name": "SessionInterface.make_null_session", "args": ["app"], "description": "Creates a null session which acts as a replacement object if the\nreal session support could not be loaded due to a configuration\nerror. This mainly aids the user experience because the job of the\nnull session is to still support lookup without complaining but\nmodifications are answered with a helpful error message of what\nfailed.\nThis creates an instance of null_session_class by default.\n"}, -{"name": "SessionInterface.open_session", "args": ["app", "request"], "description": "This method has to be implemented and must either return None\nin case the loading failed because of a configuration error or an\ninstance of a session object which implements a dictionary like\ninterface + the methods and attributes on SessionMixin.\n"}, -{"name": "SessionInterface.save_session", "args": ["app", "session", "response"], "description": "This is called for actual sessions returned by open_session()\nat the end of the request. This is still called during a request\ncontext so if you absolutely need access to the request you can do\nthat.\n"}, -{"name": "SessionInterface.should_set_cookie", "args": ["app", "session"], "description": "Used by session backends to determine if a Set-Cookie header\nshould be set for this session cookie for this response. If the session\nhas been modified, the cookie is set. If the session is permanent and\nthe SESSION_REFRESH_EACH_REQUEST config is true, the cookie is\nalways set.\nThis check is usually skipped if the session was deleted.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "SessionInterface.null_session_class", "args": null, "description": "make_null_session() will look here for the class that should\nbe created when a null session is requested. Likewise the\nis_null_session() method will perform a typecheck against\nthis type.\nalias of NullSession\n"}, -{"name": "SessionInterface.pickle_based", "args": null, "description": "A flag that indicates if the session interface is pickle based.\nThis can be used by Flask extensions to make a decision in regards\nto how to deal with the session object.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "SecureCookieSessionInterface", "args": [], "description": "The default session interface that stores sessions in signed cookies\nthrough the itsdangerous module.\n\n"}, -{"name": "SecureCookieSessionInterface.open_session", "args": ["app", "request"], "description": "This method has to be implemented and must either return None\nin case the loading failed because of a configuration error or an\ninstance of a session object which implements a dictionary like\ninterface + the methods and attributes on SessionMixin.\n"}, -{"name": "SecureCookieSessionInterface.save_session", "args": ["app", "session", "response"], "description": "This is called for actual sessions returned by open_session()\nat the end of the request. This is still called during a request\ncontext so if you absolutely need access to the request you can do\nthat.\n"}, -{"name": "SecureCookieSessionInterface.key_derivation", "args": null, "description": "the name of the itsdangerous supported key derivation. The default\nis hmac.\n"}, -{"name": "SecureCookieSessionInterface.salt", "args": null, "description": "the salt that should be applied on top of the secret key for the\nsigning of cookie based sessions.\n"}, -{"name": "SecureCookieSessionInterface.serializer", "args": null, "description": "A python serializer for the payload. The default is a compact\nJSON derived serializer with support for some extra Python types\nsuch as datetime objects or tuples.\n"}, -{"name": "SecureCookieSessionInterface.session_class", "args": null, "description": "alias of SecureCookieSession\n"}, -{"name": "SecureCookieSession", "args": ["initial=None"], "description": "Base class for sessions based on signed cookies.\n\nThis session backend will set the modified and\naccessed attributes. It cannot reliably track whether a\nsession is new (vs. empty), so new remains hard coded to\nFalse.\n\n"}, -{"name": "SecureCookieSession.get", "args": ["k", "d"], "description": ""}, -{"name": "SecureCookieSession.setdefault", "args": ["k", "d"], "description": ""}, -{"name": "SecureCookieSession.accessed", "args": null, "description": "header, which allows caching proxies to cache different pages for\ndifferent users.\n"}, -{"name": "SecureCookieSession.modified", "args": null, "description": "When data is changed, this is set to True. Only the session\ndictionary itself is tracked; if the session contains mutable\ndata (for example a nested dict) then this must be set to\nTrue manually when modifying that data. The session cookie\nwill only be written to the response if this is True.\n"}, -{"name": "NullSession", "args": ["initial=None"], "description": "Class used to generate nicer error messages if sessions are not\navailable. Will still allow read-only access to the empty session\nbut fail on setting.\n\n"}, -{"name": "SessionMixin", "args": [], "description": "Expands a basic dictionary with session attributes.\n\n"}, -{"name": "SessionMixin.accessed", "args": null, "description": "Some implementations can detect when session data is read or\nwritten and set this when that happens. The mixin default is hard\ncoded to True.\n"}, -{"name": "SessionMixin.modified", "args": null, "description": "Some implementations can detect changes to the session and set\nthis when that happens. The mixin default is hard coded to\nTrue.\n"}, -{"name": "SessionMixin.permanent", "args": null, "description": "This reflects the '_permanent' key in the dict.\n"}, -{"name": "FlaskClient", "args": ["*args", "**kwargs"], "description": "Works like a regular Werkzeug test client but has some knowledge about\nhow Flask works to defer the cleanup of the request context stack to the\nend of a with body when used in a with statement. For general\ninformation about how to use this class refer to\nwerkzeug.test.Client.\n\nBasic usage is outlined in the Testing Flask Applications chapter.\n\n"}, -{"name": "FlaskClient.open", "args": ["*args", "**kwargs"], "description": "Takes the same arguments as the EnvironBuilder class with\nsome additions: You can provide a EnvironBuilder or a WSGI\nenvironment as only argument instead of the EnvironBuilder\narguments and two optional keyword arguments (as_tuple, buffered)\nthat change the type of the return value or the way the application is\nexecuted.\n\nChangelog\nChanged in version 0.5: If a dict is provided as file in the dict for the data parameter\nthe content type has to be called content_type now instead of\nmimetype. This change was made for consistency with\nwerkzeug.FileWrapper.\n\nThe follow_redirects parameter was added to open().\n\nAdditional parameters:\n\n\n\n\nParameters:\nas_tuple \u2013 Returns a tuple in the form (environ, result)\nbuffered \u2013 Set this to True to buffer the application run.\nThis will automatically close the application for\nyou as well.\nfollow_redirects \u2013 Set this to True if the Client should\nfollow HTTP redirects.\n\n\n\n\n\n"}, -{"name": "FlaskClient.session_transaction", "args": ["*args", "**kwargs"], "description": "When used in combination with a with statement this opens a\nsession transaction. This can be used to modify the session that\nthe test client uses. Once the with block is left the session is\nstored back.\nwith client.session_transaction() as session:\n session['value'] = 42\n\n\nInternally this is implemented by going through a temporary test\nrequest context and since session handling could depend on\nrequest variables this function accepts the same arguments as\ntest_request_context() which are directly\npassed through.\n"}, -{"name": "FlaskCliRunner", "args": ["app", "**kwargs"], "description": "A CliRunner for testing a Flask app\u2019s\nCLI commands. Typically created using\ntest_cli_runner(). See Testing CLI Commands.\n\n"}, -{"name": "FlaskCliRunner.invoke", "args": ["cli=None", "args=None", "**kwargs"], "description": "Invokes a CLI command in an isolated environment. See\nCliRunner.invoke for\nfull method documentation. See Testing CLI Commands for examples.\nIf the obj argument is not given, passes an instance of\nScriptInfo that knows how to load the Flask\napp being tested.\n\n\n\n\nParameters:\ncli \u2013 Command object to invoke. Default is the app\u2019s\ncli group.\nargs \u2013 List of strings to invoke the command with.\n\n\n\nReturns:a Result object.\n\n\n\n\n"}, -{"name": "_AppCtxGlobals", "args": [], "description": "A plain object. Used as a namespace for storing data during an\napplication context.\n\nCreating an app context automatically creates this object, which is\nmade available as the g proxy.\n\n"}, -{"name": "_AppCtxGlobals.get", "args": ["name", "default=None"], "description": "Get an attribute by name, or a default value. Like\ndict.get().\n\n\n\n\nParameters:\nname \u2013 Name of attribute to get.\ndefault \u2013 Value to return if the attribute is not present.\n\n\n\n\n\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "_AppCtxGlobals.pop", "args": ["name", "default=<object object>"], "description": "Get and remove an attribute by name. Like dict.pop().\n\n\n\n\nParameters:\nname \u2013 Name of attribute to pop.\ndefault \u2013 Value to return if the attribute is not present,\ninstead of raise a KeyError.\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "_AppCtxGlobals.setdefault", "args": ["name", "default=None"], "description": "Get the value of an attribute if it is present, otherwise\nset and return a default value. Like dict.setdefault().\n\n\n\n\nParameters:name \u2013 Name of attribute to get.\n\nParam:default: Value to set and return if the attribute is not\npresent.\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Markup", "args": [], "description": "Marks a string as being safe for inclusion in HTML/XML output without\nneeding to be escaped. This implements the __html__ interface a couple\nof frameworks and web applications use. Markup is a direct\nsubclass of unicode and provides all the methods of unicode just that\nit escapes arguments passed and always returns Markup.\n\nThe escape function returns markup objects so that double escaping can\u2019t\nhappen.\n\nThe constructor of the Markup class can be used for three\ndifferent things: When passed an unicode object it\u2019s assumed to be safe,\nwhen passed an object with an HTML representation (has an __html__\nmethod) that representation is used, otherwise the object passed is\nconverted into a unicode string and then assumed to be safe:\n\nIf you want object passed being always treated as unsafe you can use the\nescape() classmethod to create a Markup object:\n\nOperations on a markup string are markup aware which means that all\narguments are passed through the escape() function:\n\n"}, -{"name": "Markup.striptags", "args": [], "description": "Unescape markup into an text_type string and strip all tags. This\nalso resolves known HTML4 and XHTML entities. Whitespace is\nnormalized to one:\n>>> Markup(\"Main » About\").striptags()\nu'Main \\xbb About'\n\n\n"}, -{"name": "Markup.unescape", "args": [], "description": "Unescape markup again into an text_type string. This also resolves\nknown HTML4 and XHTML entities:\n>>> Markup(\"Main » About\").unescape()\nu'Main \\xbb About'\n\n\n"}, -{"name": "JSONEncoder", "args": ["*", "skipkeys=False", "ensure_ascii=True", "check_circular=True", "allow_nan=True", "sort_keys=False", "indent=None", "separators=None", "default=None"], "description": "The default Flask JSON encoder. This one extends the default simplejson\nencoder by also supporting datetime objects, UUID as well as\nMarkup objects which are serialized as RFC 822 datetime strings (same\nas the HTTP date format). In order to support more data types override the\ndefault() method.\n\n"}, -{"name": "JSONEncoder.default", "args": ["o"], "description": "Implement this method in a subclass such that it returns a\nserializable object for o, or calls the base implementation (to\nraise a TypeError).\nFor example, to support arbitrary iterators, you could implement\ndefault like this:\ndef default(self, o):\n try:\n iterable = iter(o)\n except TypeError:\n pass\n else:\n return list(iterable)\n return JSONEncoder.default(self, o)\n\n\n"}, -{"name": "JSONDecoder", "args": ["*", "object_hook=None", "parse_float=None", "parse_int=None", "parse_constant=None", "strict=True", "object_pairs_hook=None"], "description": "The default JSON decoder. This one does not change the behavior from\nthe default simplejson decoder. Consult the json documentation\nfor more information. This decoder is not only used for the load\nfunctions of this module but also Request.\n\n"}, -{"name": "TaggedJSONSerializer", "args": [], "description": "Serializer that uses a tag system to compactly represent objects that\nare not JSON types. Passed as the intermediate serializer to\nitsdangerous.Serializer.\n\nThe following extra types are supported:\n\n"}, -{"name": "TaggedJSONSerializer.dumps", "args": ["value"], "description": "Tag the value and dump it to a compact JSON string.\n"}, -{"name": "TaggedJSONSerializer.loads", "args": ["value"], "description": "Load data from a JSON string and deserialized any tagged objects.\n"}, -{"name": "TaggedJSONSerializer.register", "args": ["tag_class", "force=False", "index=None"], "description": "Register a new tag with this serializer.\n\n\n\n\nParameters:\ntag_class \u2013 tag class to register. Will be instantiated with this\nserializer instance.\nforce \u2013 overwrite an existing tag. If false (default), a\nKeyError is raised.\nindex \u2013 index to insert the new tag in the tag order. Useful when\nthe new tag is a special case of an existing tag. If None\n(default), the tag is appended to the end of the order.\n\n\n\nRaises:KeyError \u2013 if the tag key is already registered and force is\nnot true.\n\n\n\n\n"}, -{"name": "TaggedJSONSerializer.tag", "args": ["value"], "description": "Convert a value to a tagged representation if necessary.\n"}, -{"name": "TaggedJSONSerializer.untag", "args": ["value"], "description": "Convert a tagged representation back to the original type.\n"}, -{"name": "TaggedJSONSerializer.default_tags", "args": null, "description": "Tag classes to bind when creating the serializer. Other tags can be\nadded later using register().\n"}, -{"name": "JSONTag", "args": ["serializer"], "description": "Base class for defining type tags for TaggedJSONSerializer.\n\n"}, -{"name": "JSONTag.check", "args": ["value"], "description": "Check if the given value should be tagged by this tag.\n"}, -{"name": "JSONTag.tag", "args": ["value"], "description": "Convert the value to a valid JSON type and add the tag structure\naround it.\n"}, -{"name": "JSONTag.to_json", "args": ["value"], "description": "Convert the Python object to an object that is a valid JSON type.\nThe tag will be added later.\n"}, -{"name": "JSONTag.to_python", "args": ["value"], "description": "Convert the JSON representation back to the correct type. The tag\nwill already be removed.\n"}, -{"name": "JSONTag.key", "args": null, "description": "The tag to mark the serialized object with. If None, this tag is\nonly used as an intermediate step during tagging.\n"}, -{"name": "Config", "args": ["root_path", "defaults=None"], "description": "Works exactly like a dict but provides ways to fill it from files\nor special dictionaries. There are two common patterns to populate the\nconfig.\n\nEither you can fill the config from a config file:\n\nOr alternatively you can define the configuration options in the\nmodule that calls from_object() or provide an import path to\na module that should be loaded. It is also possible to tell it to\nuse the same module and with that provide the configuration values\njust before the call:\n\nIn both cases (loading from any Python file or loading from modules),\nonly uppercase keys are added to the config. This makes it possible to use\nlowercase values in the config file for temporary values that are not added\nto the config or to define the config keys in the same file that implements\nthe application.\n\nProbably the most interesting way to load configurations is from an\nenvironment variable pointing to a file:\n\nIn this case before launching the application you have to set this\nenvironment variable to the file you want to use. On Linux and OS X\nuse the export statement:\n\nOn windows use set instead.\n\n\nParameters:\nroot_path \u2013 path to which files are read relative from. When the\nconfig object is created by the application, this is\nthe application\u2019s root_path.\ndefaults \u2013 an optional dictionary of default values"}, -{"name": "Config.from_envvar", "args": ["variable_name", "silent=False"], "description": "Loads a configuration from an environment variable pointing to\na configuration file. This is basically just a shortcut with nicer\nerror messages for this line of code:\napp.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])\n\n\n\n\n\n\nParameters:\nvariable_name \u2013 name of the environment variable\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\nReturns:bool. True if able to load config, False otherwise.\n\n\n\n\n"}, -{"name": "Config.from_json", "args": ["filename", "silent=False"], "description": "Updates the values in the config from a JSON file. This function\nbehaves as if the JSON object was a dictionary and passed to the\nfrom_mapping() function.\n\n\n\n\nParameters:\nfilename \u2013 the filename of the JSON file. This can either be an\nabsolute filename or a filename relative to the\nroot path.\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Config.from_mapping", "args": ["*mapping", "**kwargs"], "description": "Updates the config like update() ignoring items with non-upper\nkeys.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Config.from_object", "args": ["obj"], "description": "Updates the values from the given object. An object can be of one\nof the following two types:\n\na string: in this case the object with that name will be imported\nan actual object reference: that object is used directly\n\nObjects are usually either modules or classes. from_object()\nloads only the uppercase attributes of the module/class. A dict\nobject will not work with from_object() because the keys of a\ndict are not attributes of the dict class.\nExample of module-based configuration:\napp.config.from_object('yourapplication.default_config')\nfrom yourapplication import default_config\napp.config.from_object(default_config)\n\n\nYou should not use this function to load the actual configuration but\nrather configuration defaults. The actual config should be loaded\nwith from_pyfile() and ideally from a location not within the\npackage because the package might be installed system wide.\nSee Development / Production for an example of class-based configuration\nusing from_object().\n\n\n\n\nParameters:obj \u2013 an import name or object\n\n\n\n"}, -{"name": "Config.from_pyfile", "args": ["filename", "silent=False"], "description": "Updates the values in the config from a Python file. This function\nbehaves as if the file was imported as module with the\nfrom_object() function.\n\n\n\n\nParameters:\nfilename \u2013 the filename of the config. This can either be an\nabsolute filename or a filename relative to the\nroot path.\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\n\n\n\nChangelog\nNew in version 0.7: silent parameter.\n\n"}, -{"name": "Config.get_namespace", "args": ["namespace", "lowercase=True", "trim_namespace=True"], "description": "Returns a dictionary containing a subset of configuration options\nthat match the specified namespace/prefix. Example usage:\napp.config['IMAGE_STORE_TYPE'] = 'fs'\napp.config['IMAGE_STORE_PATH'] = '/var/app/images'\napp.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com'\nimage_store_config = app.config.get_namespace('IMAGE_STORE_')\n\n\nThe resulting dictionary image_store_config would look like:\n{\n 'type': 'fs',\n 'path': '/var/app/images',\n 'base_url': 'http://img.website.com'\n}\n\n\nThis is often useful when configuration options map directly to\nkeyword arguments in functions or class constructors.\n\n\n\n\nParameters:\nnamespace \u2013 a configuration namespace\nlowercase \u2013 a flag indicating if the keys of the resulting\ndictionary should be lowercase\ntrim_namespace \u2013 a flag indicating if the keys of the resulting\ndictionary should not include the namespace\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "RequestContext", "args": ["app", "environ", "request=None"], "description": "The request context contains all request relevant information. It is\ncreated at the beginning of the request and pushed to the\n_request_ctx_stack and removed at the end of it. It will create the\nURL adapter and request object for the WSGI environment provided.\n\nDo not attempt to use this class directly, instead use\ntest_request_context() and\nrequest_context() to create this object.\n\nWhen the request context is popped, it will evaluate all the\nfunctions registered on the application for teardown execution\n(teardown_request()).\n\nThe request context is automatically popped at the end of the request\nfor you. In debug mode the request context is kept around if\nexceptions happen so that interactive debuggers have a chance to\nintrospect the data. With 0.4 this can also be forced for requests\nthat did not fail and outside of DEBUG mode. By setting\n'flask._preserve_context' to True on the WSGI environment the\ncontext will not pop itself at the end of the request. This is used by\nthe test_client() for example to implement the\ndeferred cleanup functionality.\n\nYou might find this helpful for unittests where you need the\ninformation from the context local around for a little longer. Make\nsure to properly pop() the stack yourself in\nthat situation, otherwise your unittests will leak memory.\n\n"}, -{"name": "RequestContext.copy", "args": [], "description": "Creates a copy of this request context with the same request object.\nThis can be used to move a request context to a different greenlet.\nBecause the actual request object is the same this cannot be used to\nmove a request context to a different thread unless access to the\nrequest object is locked.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "RequestContext.match_request", "args": [], "description": "Can be overridden by a subclass to hook into the matching\nof the request.\n"}, -{"name": "RequestContext.pop", "args": ["exc=<object object>"], "description": "Pops the request context and unbinds it by doing that. This will\nalso trigger the execution of functions registered by the\nteardown_request() decorator.\n\nChangelog\nChanged in version 0.9: Added the exc argument.\n\n"}, -{"name": "RequestContext.push", "args": [], "description": "Binds the request context to the current context.\n"}, -{"name": "AppContext", "args": ["app"], "description": "The application context binds an application object implicitly\nto the current thread or greenlet, similar to how the\nRequestContext binds request information. The application\ncontext is also implicitly created if a request context is created\nbut the application is not on top of the individual application\ncontext.\n\n"}, -{"name": "AppContext.pop", "args": ["exc=<object object>"], "description": "Pops the app context.\n"}, -{"name": "AppContext.push", "args": [], "description": "Binds the app context to the current context.\n"}, -{"name": "BlueprintSetupState", "args": ["blueprint", "app", "options", "first_registration"], "description": "Temporary holder object for registering a blueprint with the\napplication. An instance of this class is created by the\nmake_setup_state() method and later passed\nto all register callback functions.\n\n"}, -{"name": "BlueprintSetupState.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "**options"], "description": "A helper method to register a rule (and optionally a view function)\nto the application. The endpoint is automatically prefixed with the\nblueprint\u2019s name.\n"}, -{"name": "BlueprintSetupState.app", "args": null, "description": "a reference to the current application\n"}, -{"name": "BlueprintSetupState.blueprint", "args": null, "description": "a reference to the blueprint that created this setup state.\n"}, -{"name": "BlueprintSetupState.first_registration", "args": null, "description": "as blueprints can be registered multiple times with the\napplication and not everything wants to be registered\nmultiple times on it, this attribute can be used to figure\nout if the blueprint was registered in the past already.\n"}, -{"name": "BlueprintSetupState.options", "args": null, "description": "a dictionary with all options that were passed to the\nregister_blueprint() method.\n"}, -{"name": "BlueprintSetupState.subdomain", "args": null, "description": "The subdomain that the blueprint should be active for, None\notherwise.\n"}, -{"name": "BlueprintSetupState.url_defaults", "args": null, "description": "A dictionary with URL defaults that is added to each and every\nURL that was defined with the blueprint.\n"}, -{"name": "BlueprintSetupState.url_prefix", "args": null, "description": "The prefix that should be used for all URLs defined on the\nblueprint.\n"}, -{"name": "Namespace", "args": [], "description": "An alias for blinker.base.Namespace if blinker is available,\notherwise a dummy class that creates fake signals. This class is\navailable for Flask extensions that want to provide the same fallback\nsystem as Flask itself.\n\n"}, -{"name": "Namespace.signal", "args": ["name", "doc=None"], "description": "Creates a new signal for this namespace if blinker is available,\notherwise returns a fake signal that has a send method that will\ndo nothing but will fail with a RuntimeError for all other\noperations, including connecting.\n"}, -{"name": "View", "args": [], "description": "Alternative way to use view functions. A subclass has to implement\ndispatch_request() which is called with the view arguments from\nthe URL routing system. If methods is provided the methods\ndo not have to be passed to the add_url_rule()\nmethod explicitly:\n\nWhen you want to decorate a pluggable view you will have to either do that\nwhen the view function is created (by wrapping the return value of\nas_view()) or you can use the decorators attribute:\n\nThe decorators stored in the decorators list are applied one after another\nwhen the view function is created. Note that you can not use the class\nbased decorators since those would decorate the view class and not the\ngenerated view function!\n\n"}, -{"name": "View.dispatch_request", "args": [], "description": "Subclasses have to override this method to implement the\nactual view function code. This method is called with all\nthe arguments from the URL rule.\n"}, -{"name": "View.decorators", "args": null, "description": "The canonical way to decorate class-based views is to decorate the\nreturn value of as_view(). However since this moves parts of the\nlogic from the class declaration to the place where it\u2019s hooked\ninto the routing system.\nYou can place one or more decorators in this list and whenever the\nview function is created the result is automatically decorated.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "View.methods", "args": null, "description": "A list of methods this view can handle.\n"}, -{"name": "View.provide_automatic_options", "args": null, "description": "Setting this disables or force-enables the automatic options handling.\n"}, -{"name": "MethodView", "args": [], "description": "A class-based view that dispatches request methods to the corresponding\nclass methods. For example, if you implement a get method, it will be\nused to handle GET requests.\n\n"}, -{"name": "MethodView.dispatch_request", "args": ["*args", "**kwargs"], "description": "Subclasses have to override this method to implement the\nactual view function code. This method is called with all\nthe arguments from the URL rule.\n"}, -{"name": "FlaskGroup", "args": ["add_default_commands=True", "create_app=None", "add_version_option=True", "load_dotenv=True", "**extra"], "description": "Special subclass of the AppGroup group that supports\nloading more commands from the configured Flask app. Normally a\ndeveloper does not have to interface with this class but there are\nsome very advanced use cases for which it makes sense to create an\ninstance of this.\n\nFor information as of why this is useful see Custom Scripts.\n\n\nParameters:\nadd_default_commands \u2013 if this is True then the default run and\nshell commands wil be added.\nadd_version_option \u2013 adds the --version option.\ncreate_app \u2013 an optional callback that is passed the script info and\nreturns the loaded app.\nload_dotenv \u2013 Load the nearest .env and .flaskenv\nfiles to set environment variables. Will also change the working\ndirectory to the directory containing the first file found."}, -{"name": "FlaskGroup.get_command", "args": ["ctx", "name"], "description": "Given a context and a command name, this returns a\nCommand object if it exists or returns None.\n"}, -{"name": "FlaskGroup.list_commands", "args": ["ctx"], "description": "Returns a list of subcommand names in the order they should\nappear.\n"}, -{"name": "FlaskGroup.main", "args": ["*args", "**kwargs"], "description": "This is the way to invoke a script with all the bells and\nwhistles as a command line application. This will always terminate\nthe application after a call. If this is not wanted, SystemExit\nneeds to be caught.\nThis method is also available by directly calling the instance of\na Command.\n\nNew in version 3.0: Added the standalone_mode flag to control the standalone mode.\n\n\nChangelog\n\n\n\nParameters:\nargs \u2013 the arguments that should be used for parsing. If not\nprovided, sys.argv[1:] is used.\nprog_name \u2013 the program name that should be used. By default\nthe program name is constructed by taking the file\nname from sys.argv[0].\ncomplete_var \u2013 the environment variable that controls the\nbash completion support. The default is\n\"__COMPLETE\" with prog name in\nuppercase.\nstandalone_mode \u2013 the default behavior is to invoke the script\nin standalone mode. Click will then\nhandle exceptions and convert them into\nerror messages and the function will never\nreturn but shut down the interpreter. If\nthis is set to False they will be\npropagated to the caller and the return\nvalue of this function is the return value\nof invoke().\nextra \u2013 extra keyword arguments are forwarded to the context\nconstructor. See Context for more information.\n\n\n\n\n\n"}, -{"name": "AppGroup", "args": ["name=None", "commands=None", "**attrs"], "description": "This works similar to a regular click Group but it\nchanges the behavior of the command() decorator so that it\nautomatically wraps the functions in with_appcontext().\n\nNot to be confused with FlaskGroup.\n\n"}, -{"name": "AppGroup.command", "args": ["*args", "**kwargs"], "description": "This works exactly like the method of the same name on a regular\nclick.Group but it wraps callbacks in with_appcontext()\nunless it\u2019s disabled by passing with_appcontext=False.\n"}, -{"name": "AppGroup.group", "args": ["*args", "**kwargs"], "description": "This works exactly like the method of the same name on a regular\nclick.Group but it defaults the group class to\nAppGroup.\n"}, -{"name": "ScriptInfo", "args": ["app_import_path=None", "create_app=None"], "description": "Help object to deal with Flask applications. This is usually not\nnecessary to interface with as it\u2019s used internally in the dispatching\nto click. In future versions of Flask this object will most likely play\na bigger role. Typically it\u2019s created automatically by the\nFlaskGroup but you can also manually create it and pass it\nonwards as click object.\n\n"}, -{"name": "ScriptInfo.load_app", "args": [], "description": "Loads the Flask app (if not yet loaded) and returns it. Calling\nthis multiple times will just result in the already loaded app to\nbe returned.\n"}, -{"name": "ScriptInfo.app_import_path", "args": null, "description": "Optionally the import path for the Flask application.\n"}, -{"name": "ScriptInfo.create_app", "args": null, "description": "Optionally a function that is passed the script info to create\nthe instance of the application.\n"}, -{"name": "ScriptInfo.data", "args": null, "description": "A dictionary with arbitrary data that can be associated with\nthis script info.\n"}, -{"name": "has_request_context", "args": [], "description": "If you have code that wants to test if a request context is there or\nnot this function can be used. For instance, you may want to take advantage\nof request information if the request object is available, but fail\nsilently if it is unavailable.\nclass User(db.Model):\n\n def __init__(self, username, remote_addr=None):\n self.username = username\n if remote_addr is None and has_request_context():\n remote_addr = request.remote_addr\n self.remote_addr = remote_addr\n\n\nAlternatively you can also just test any of the context bound objects\n(such as request or g for truthness):\nclass User(db.Model):\n\n def __init__(self, username, remote_addr=None):\n self.username = username\n if remote_addr is None and request:\n remote_addr = request.remote_addr\n self.remote_addr = remote_addr\n\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "copy_current_request_context", "args": ["f"], "description": "A helper function that decorates a function to retain the current\nrequest context. This is useful when working with greenlets. The moment\nthe function is decorated a copy of the request context is created and\nthen pushed when the function is called.\nExample:\nimport gevent\nfrom flask import copy_current_request_context\n\n@app.route('/')\ndef index():\n @copy_current_request_context\n def do_some_work():\n # do some work here, it can access flask.request like you\n # would otherwise in the view function.\n ...\n gevent.spawn(do_some_work)\n return 'Regular response'\n\n\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "has_app_context", "args": [], "description": "Works like has_request_context() but for the application\ncontext. You can also just do a boolean check on the\ncurrent_app object instead.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "url_for", "args": ["endpoint", "**values"], "description": "Generates a URL to the given endpoint with the method provided.\nVariable arguments that are unknown to the target endpoint are appended\nto the generated URL as query arguments. If the value of a query argument\nis None, the whole pair is skipped. In case blueprints are active\nyou can shortcut references to the same blueprint by prefixing the\nlocal endpoint with a dot (.).\nThis will reference the index function local to the current blueprint:\nurl_for('.index')\n\n\nFor more information, head over to the Quickstart.\nTo integrate applications, Flask has a hook to intercept URL build\nerrors through Flask.url_build_error_handlers. The url_for\nfunction results in a BuildError when the current\napp does not have a URL for the given endpoint and values. When it does, the\ncurrent_app calls its url_build_error_handlers if\nit is not None, which can return a string to use as the result of\nurl_for (instead of url_for\u2019s default to raise the\nBuildError exception) or re-raise the exception.\nAn example:\ndef external_url_handler(error, endpoint, values):\n \"Looks up an external URL when `url_for` cannot build a URL.\"\n # This is an example of hooking the build_error_handler.\n # Here, lookup_url is some utility function you've built\n # which looks up the endpoint in some external URL registry.\n url = lookup_url(endpoint, **values)\n if url is None:\n # External lookup did not have a URL.\n # Re-raise the BuildError, in context of original traceback.\n exc_type, exc_value, tb = sys.exc_info()\n if exc_value is error:\n raise exc_type, exc_value, tb\n else:\n raise error\n # url_for will use this result, instead of raising BuildError.\n return url\n\napp.url_build_error_handlers.append(external_url_handler)\n\n\nHere, error is the instance of BuildError, and\nendpoint and values are the arguments passed into url_for. Note\nthat this is for building URLs outside the current application, and not for\nhandling 404 NotFound errors.\n\nChangelog\nNew in version 0.10: The _scheme parameter was added.\n\n\nNew in version 0.9: The _anchor and _method parameters were added.\n\n\nNew in version 0.9: Calls Flask.handle_build_error() on\nBuildError.\n\n\n\n\n\nParameters:\nendpoint \u2013 the endpoint of the URL (name of the function)\nvalues \u2013 the variable arguments of the URL rule\n_external \u2013 if set to True, an absolute URL is generated. Server\naddress can be changed via SERVER_NAME configuration variable which\ndefaults to localhost.\n_scheme \u2013 a string specifying the desired URL scheme. The _external\nparameter must be set to True or a ValueError is raised. The default\nbehavior uses the same scheme as the current request, or\nPREFERRED_URL_SCHEME from the app configuration if no\nrequest context is available. As of Werkzeug 0.10, this also can be set\nto an empty string to build protocol-relative URLs.\n_anchor \u2013 if provided this is added as anchor to the URL.\n_method \u2013 if provided this explicitly specifies an HTTP method.\n\n\n\n\n\n"}, -{"name": "abort", "args": ["status", "*args", "**kwargs"], "description": "Raises an HTTPException for the given status code or WSGI\napplication:\nabort(404) # 404 Not Found\nabort(Response('Hello World'))\n\n\nCan be passed a WSGI application or a status code. If a status code is\ngiven it\u2019s looked up in the list of exceptions and will raise that\nexception, if passed a WSGI application it will wrap it in a proxy WSGI\nexception and raise that:\nabort(404)\nabort(Response('Hello World'))\n\n\n"}, -{"name": "redirect", "args": ["location", "code=302", "Response=None"], "description": "Returns a response object (a WSGI application) that, if called,\nredirects the client to the target location. Supported codes are 301,\n302, 303, 305, and 307. 300 is not supported because it\u2019s not a real\nredirect and 304 because it\u2019s the answer for a request with a request\nwith defined If-Modified-Since headers.\n\nChangelog\nNew in version 0.10: The class used for the Response object can now be passed in.\n\n\nNew in version 0.6: The location can now be a unicode string that is encoded using\nthe iri_to_uri() function.\n\n\n\n\n\nParameters:\nlocation \u2013 the location the response should redirect to.\ncode \u2013 the redirect status code. defaults to 302.\nResponse (class) \u2013 a Response class to use when instantiating a\nresponse. The default is werkzeug.wrappers.Response if\nunspecified.\n\n\n\n\n\n"}, -{"name": "make_response", "args": ["*args"], "description": "Sometimes it is necessary to set additional headers in a view. Because\nviews do not have to return response objects but can return a value that\nis converted into a response object by Flask itself, it becomes tricky to\nadd headers to it. This function can be called instead of using a return\nand you will get a response object which you can use to attach headers.\nIf view looked like this and you want to add a new header:\ndef index():\n return render_template('index.html', foo=42)\n\n\nYou can now do something like this:\ndef index():\n response = make_response(render_template('index.html', foo=42))\n response.headers['X-Parachutes'] = 'parachutes are cool'\n return response\n\n\nThis function accepts the very same arguments you can return from a\nview function. This for example creates a response with a 404 error\ncode:\nresponse = make_response(render_template('not_found.html'), 404)\n\n\nThe other use case of this function is to force the return value of a\nview function into a response which is helpful with view\ndecorators:\nresponse = make_response(view_function())\nresponse.headers['X-Parachutes'] = 'parachutes are cool'\n\n\nInternally this function does the following things:\n\nif no arguments are passed, it creates a new response argument\nif one argument is passed, flask.Flask.make_response()\nis invoked with it.\nif more than one argument is passed, the arguments are passed\nto the flask.Flask.make_response() function as tuple.\n\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "after_this_request", "args": ["f"], "description": "Executes a function after this request. This is useful to modify\nresponse objects. The function is passed the response object and has\nto return the same or a new one.\nExample:\n@app.route('/')\ndef index():\n @after_this_request\n def add_header(response):\n response.headers['X-Foo'] = 'Parachute'\n return response\n return 'Hello World!'\n\n\nThis is more useful if a function other than the view function wants to\nmodify a response. For instance think of a decorator that wants to add\nsome headers without converting the return value into a response object.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "send_file", "args": ["filename_or_fp", "mimetype=None", "as_attachment=False", "attachment_filename=None", "add_etags=True", "cache_timeout=None", "conditional=False", "last_modified=None"], "description": "Sends the contents of a file to the client. This will use the\nmost efficient method available and configured. By default it will\ntry to use the WSGI server\u2019s file_wrapper support. Alternatively\nyou can set the application\u2019s use_x_sendfile attribute\nto True to directly emit an X-Sendfile header. This however\nrequires support of the underlying webserver for X-Sendfile.\nBy default it will try to guess the mimetype for you, but you can\nalso explicitly provide one. For extra security you probably want\nto send certain files as attachment (HTML for instance). The mimetype\nguessing requires a filename or an attachment_filename to be\nprovided.\nETags will also be attached automatically if a filename is provided. You\ncan turn this off by setting add_etags=False.\nIf conditional=True and filename is provided, this method will try to\nupgrade the response stream to support range requests. This will allow\nthe request to be answered with partial content response.\nPlease never pass filenames to this function from user sources;\nyou should use send_from_directory() instead.\n\nChanged in version 1.0: UTF-8 filenames, as specified in RFC 2231, are supported.\n\n\nChangelog\nChanged in version 0.12: The filename is no longer automatically inferred from file objects. If\nyou want to use automatic mimetype and etag support, pass a filepath via\nfilename_or_fp or attachment_filename.\n\n\nChanged in version 0.12: The attachment_filename is preferred over filename for MIME-type\ndetection.\n\n\nChanged in version 0.9: cache_timeout pulls its default from application config, when None.\n\n\nChanged in version 0.7: mimetype guessing and etag support for file objects was\ndeprecated because it was unreliable. Pass a filename if you are\nable to, otherwise attach an etag yourself. This functionality\nwill be removed in Flask 1.0\n\n\nNew in version 0.5: The add_etags, cache_timeout and conditional parameters were\nadded. The default behavior is now to attach etags.\n\n\nNew in version 0.2.\n\n\n\n\n\nParameters:\nfilename_or_fp \u2013 the filename of the file to send.\nThis is relative to the root_path\nif a relative path is specified.\nAlternatively a file object might be provided in\nwhich case X-Sendfile might not work and fall\nback to the traditional method. Make sure that the\nfile pointer is positioned at the start of data to\nsend before calling send_file().\nmimetype \u2013 the mimetype of the file if provided. If a file path is\ngiven, auto detection happens as fallback, otherwise an\nerror will be raised.\nas_attachment \u2013 set to True if you want to send this file with\na Content-Disposition: attachment header.\nattachment_filename \u2013 the filename for the attachment if it\ndiffers from the file\u2019s filename.\nadd_etags \u2013 set to False to disable attaching of etags.\nconditional \u2013 set to True to enable conditional responses.\ncache_timeout \u2013 the timeout in seconds for the headers. When None\n(default), this value is set by\nget_send_file_max_age() of\ncurrent_app.\nlast_modified \u2013 set the Last-Modified header to this value,\na datetime or timestamp.\nIf a file was passed, this overrides its mtime.\n\n\n\n\n\n"}, -{"name": "send_from_directory", "args": ["directory", "filename", "**options"], "description": "Send a file from a given directory with send_file(). This\nis a secure way to quickly expose static files from an upload folder\nor something similar.\nExample usage:\n@app.route('/uploads/')\ndef download_file(filename):\n return send_from_directory(app.config['UPLOAD_FOLDER'],\n filename, as_attachment=True)\n\n\n\nSending files and Performance\nIt is strongly recommended to activate either X-Sendfile support in\nyour webserver or (if no authentication happens) to tell the webserver\nto serve files for the given path on its own without calling into the\nweb application for improved performance.\n\n\nChangelog\nNew in version 0.5.\n\n\n\n\n\nParameters:\ndirectory \u2013 the directory where all the files are stored.\nfilename \u2013 the filename relative to that directory to\ndownload.\noptions \u2013 optional keyword arguments that are directly\nforwarded to send_file().\n\n\n\n\n\n"}, -{"name": "safe_join", "args": ["directory", "*pathnames"], "description": "Safely join directory and zero or more untrusted pathnames\ncomponents.\nExample usage:\n@app.route('/wiki/')\ndef wiki_page(filename):\n filename = safe_join(app.config['WIKI_FOLDER'], filename)\n with open(filename, 'rb') as fd:\n content = fd.read() # Read and process the file content...\n\n\n\n\n\n\nParameters:\ndirectory \u2013 the trusted base directory.\npathnames \u2013 the untrusted pathnames relative to that directory.\n\n\n\nRaises:NotFound if one or more passed\npaths fall out of its boundaries.\n\n\n\n\n"}, -{"name": "escape", "args": ["s"], "description": "Convert the characters &, <, >, \u2018, and \u201d in string s to HTML-safe\nsequences. Use this if you need to display text that might contain\nsuch characters in HTML. Marks return value as markup string.\n"}, -{"name": "flash", "args": ["message", "category='message'"], "description": "Flashes a message to the next request. In order to remove the\nflashed message from the session and to display it to the user,\nthe template has to call get_flashed_messages().\n\nChangelog\nChanged in version 0.3: category parameter added.\n\n\n\n\n\nParameters:\nmessage \u2013 the message to be flashed.\ncategory \u2013 the category for the message. The following values\nare recommended: 'message' for any kind of message,\n'error' for errors, 'info' for information\nmessages and 'warning' for warnings. However any\nkind of string can be used as category.\n\n\n\n\n\n"}, -{"name": "get_flashed_messages", "args": ["with_categories=False", "category_filter=[]"], "description": "Pulls all flashed messages from the session and returns them.\nFurther calls in the same request to the function will return\nthe same messages. By default just the messages are returned,\nbut when with_categories is set to True, the return value will\nbe a list of tuples in the form (category, message) instead.\nFilter the flashed messages to one or more categories by providing those\ncategories in category_filter. This allows rendering categories in\nseparate html blocks. The with_categories and category_filter\narguments are distinct:\n\nwith_categories controls whether categories are returned with message\ntext (True gives a tuple, where False gives just the message text).\ncategory_filter filters the messages down to only those matching the\nprovided categories.\n\nSee Message Flashing for examples.\n\nChangelog\nChanged in version 0.9: category_filter parameter added.\n\n\nChanged in version 0.3: with_categories parameter added.\n\n\n\n\n\nParameters:\nwith_categories \u2013 set to True to also receive categories.\ncategory_filter \u2013 whitelist of categories to limit return values\n\n\n\n\n\n"}, -{"name": "jsonify", "args": ["*args", "**kwargs"], "description": "This function wraps dumps() to add a few enhancements that make\nlife easier. It turns the JSON output into a Response\nobject with the application/json mimetype. For convenience, it\nalso converts multiple arguments into an array or multiple keyword arguments\ninto a dict. This means that both jsonify(1,2,3) and\njsonify([1,2,3]) serialize to [1,2,3].\nFor clarity, the JSON serialization behavior has the following differences\nfrom dumps():\n\nSingle argument: Passed straight through to dumps().\nMultiple arguments: Converted to an array before being passed to\ndumps().\nMultiple keyword arguments: Converted to a dict before being passed to\ndumps().\nBoth args and kwargs: Behavior undefined and will throw an exception.\n\nExample usage:\nfrom flask import jsonify\n\n@app.route('/_get_current_user')\ndef get_current_user():\n return jsonify(username=g.user.username,\n email=g.user.email,\n id=g.user.id)\n\n\nThis will send a JSON response like this to the browser:\n{\n \"username\": \"admin\",\n \"email\": \"admin@localhost\",\n \"id\": 42\n}\n\n\n\nChangelog\nChanged in version 0.11: Added support for serializing top-level arrays. This introduces a\nsecurity risk in ancient browsers. See JSON Security for details.\n\nThis function\u2019s response will be pretty printed if the\nJSONIFY_PRETTYPRINT_REGULAR config parameter is set to True or the\nFlask app is running in debug mode. Compressed (not pretty) formatting\ncurrently means no indents and no spaces after separators.\n\nChangelog\nNew in version 0.2.\n\n"}, -{"name": "dumps", "args": ["obj", "**kwargs"], "description": "Serialize obj to a JSON formatted str by using the application\u2019s\nconfigured encoder (json_encoder) if there is an\napplication on the stack.\nThis function can return unicode strings or ascii-only bytestrings by\ndefault which coerce into unicode strings automatically. That behavior by\ndefault is controlled by the JSON_AS_ASCII configuration variable\nand can be overridden by the simplejson ensure_ascii parameter.\n"}, -{"name": "dump", "args": ["obj", "fp", "**kwargs"], "description": "Like dumps() but writes into a file object.\n"}, -{"name": "loads", "args": ["s", "**kwargs"], "description": "Unserialize a JSON object from a string s by using the application\u2019s\nconfigured decoder (json_decoder) if there is an\napplication on the stack.\n"}, -{"name": "load", "args": ["fp", "**kwargs"], "description": "Like loads() but reads from a file object.\n"}, -{"name": "render_template", "args": ["template_name_or_list", "**context"], "description": "Renders a template from the template folder with the given\ncontext.\n\n\n\n\nParameters:\ntemplate_name_or_list \u2013 the name of the template to be\nrendered, or an iterable with template names\nthe first one existing will be rendered\ncontext \u2013 the variables that should be available in the\ncontext of the template.\n\n\n\n\n\n"}, -{"name": "render_template_string", "args": ["source", "**context"], "description": "Renders a template from the given template source string\nwith the given context. Template variables will be autoescaped.\n\n\n\n\nParameters:\nsource \u2013 the source code of the template to be\nrendered\ncontext \u2013 the variables that should be available in the\ncontext of the template.\n\n\n\n\n\n"}, -{"name": "get_template_attribute", "args": ["template_name", "attribute"], "description": "Loads a macro (or variable) a template exports. This can be used to\ninvoke a macro from within Python code. If you for example have a\ntemplate named _cider.html with the following contents:\n{% macro hello(name) %}Hello {{ name }}!{% endmacro %}\n\n\nYou can access this from Python code like this:\nhello = get_template_attribute('_cider.html', 'hello')\nreturn hello('World')\n\n\n\nChangelog\nNew in version 0.2.\n\n\n\n\n\nParameters:\ntemplate_name \u2013 the name of the template\nattribute \u2013 the name of the variable of macro to access\n\n\n\n\n\n"}, -{"name": "stream_with_context", "args": ["generator_or_function"], "description": "Request contexts disappear when the response is started on the server.\nThis is done for efficiency reasons and to make it less likely to encounter\nmemory leaks with badly written WSGI middlewares. The downside is that if\nyou are using streamed responses, the generator cannot access request bound\ninformation any more.\nThis function however can help you keep the context around for longer:\nfrom flask import stream_with_context, request, Response\n\n@app.route('/stream')\ndef streamed_response():\n @stream_with_context\n def generate():\n yield 'Hello '\n yield request.args['name']\n yield '!'\n return Response(generate())\n\n\nAlternatively it can also be used around a specific generator:\nfrom flask import stream_with_context, request, Response\n\n@app.route('/stream')\ndef streamed_response():\n def generate():\n yield 'Hello '\n yield request.args['name']\n yield '!'\n return Response(stream_with_context(generate()))\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "load_dotenv", "args": ["path=None"], "description": "Load \u201cdotenv\u201d files in order of precedence to set environment variables.\nIf an env var is already set it is not overwritten, so earlier files in the\nlist are preferred over later files.\nChanges the current working directory to the location of the first file\nfound, with the assumption that it is in the top level project directory\nand will be where the Python path should import local packages from.\nThis is a no-op if python-dotenv is not installed.\n\n\n\n\nParameters:path \u2013 Load the file at this location instead of searching.\n\nReturns:True if a file was loaded.\n\n\n\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "with_appcontext", "args": ["f"], "description": "Wraps a callback so that it\u2019s guaranteed to be executed with the\nscript\u2019s application context. If callbacks are registered directly\nto the app.cli object then they are wrapped with this function\nby default unless it\u2019s disabled.\n"}, -{"name": "pass_script_info", "args": ["f"], "description": "Marks a function so that an instance of ScriptInfo is passed\nas first argument to the click callback.\n"}, -{"name": "Flask", "args": ["import_name", "static_url_path=None", "static_folder='static'", "static_host=None", "host_matching=False", "subdomain_matching=False", "template_folder='templates'", "instance_path=None", "instance_relative_config=False", "root_path=None"], "description": "The flask object implements a WSGI application and acts as the central\nobject. It is passed the name of the module or package of the\napplication. Once it is created it will act as a central registry for\nthe view functions, the URL rules, template configuration and much more.\n\nThe name of the package is used to resolve resources from inside the\npackage or the folder the module is contained in depending on if the\npackage parameter resolves to an actual python package (a folder with\nan __init__.py file inside) or a standard module (just a .py file).\n\nFor more information about resource loading, see open_resource().\n\nUsually you create a Flask instance in your main module or\nin the __init__.py file of your package like this:\n\n\nParameters:\nimport_name \u2013 the name of the application package\nstatic_url_path \u2013 can be used to specify a different path for the\nstatic files on the web. Defaults to the name\nof the static_folder folder.\nstatic_folder \u2013 the folder with static files that should be served\nat static_url_path. Defaults to the 'static'\nfolder in the root path of the application.\nstatic_host \u2013 the host to use when adding the static route.\nDefaults to None. Required when using host_matching=True\nwith a static_folder configured.\nhost_matching \u2013 set url_map.host_matching attribute.\nDefaults to False.\nsubdomain_matching \u2013 consider the subdomain relative to\nSERVER_NAME when matching routes. Defaults to False.\ntemplate_folder \u2013 the folder that contains the templates that should\nbe used by the application. Defaults to\n'templates' folder in the root path of the\napplication.\ninstance_path \u2013 An alternative instance path for the application.\nBy default the folder 'instance' next to the\npackage or module is assumed to be the instance\npath.\ninstance_relative_config \u2013 if set to True relative filenames\nfor loading the config are assumed to\nbe relative to the instance path instead\nof the application root.\nroot_path \u2013 Flask by default will automatically calculate the path\nto the root of the application. In certain situations\nthis cannot be achieved (for instance if the package\nis a Python 3 namespace package) and needs to be\nmanually defined."}, -{"name": "Flask.add_template_filter", "args": ["f", "name=None"], "description": "Register a custom template filter. Works exactly like the\ntemplate_filter() decorator.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_template_global", "args": ["f", "name=None"], "description": "Register a custom template global function. Works exactly like the\ntemplate_global() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global function, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_template_test", "args": ["f", "name=None"], "description": "Register a custom template test. Works exactly like the\ntemplate_test() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "provide_automatic_options=None", "**options"], "description": "Connects a URL rule. Works exactly like the route()\ndecorator. If a view_func is provided it will be registered with the\nendpoint.\nBasically this example:\n@app.route('/')\ndef index():\n pass\n\n\nIs equivalent to the following:\ndef index():\n pass\napp.add_url_rule('/', 'index', index)\n\n\nIf the view_func is not provided you will need to connect the endpoint\nto a view function like so:\napp.view_functions['index'] = index\n\n\nInternally route() invokes add_url_rule() so if you want\nto customize the behavior via subclassing you only need to change\nthis method.\nFor more information refer to URL Route Registrations.\n\nChangelog\nChanged in version 0.6: OPTIONS is added automatically as method.\n\n\nChanged in version 0.2: view_func parameter added.\n\n\n\n\n\nParameters:\nrule \u2013 the URL rule as string\nendpoint \u2013 the endpoint for the registered URL rule. Flask\nitself assumes the name of the view function as\nendpoint\nview_func \u2013 the function to call when serving a request to the\nprovided endpoint\nprovide_automatic_options \u2013 controls whether the OPTIONS\nmethod should be added automatically. This can also be controlled\nby setting the view_func.provide_automatic_options = False\nbefore adding the rule.\noptions \u2013 the options to be forwarded to the underlying\nRule object. A change\nto Werkzeug is handling of method options. methods\nis a list of methods this rule should be limited\nto (GET, POST etc.). By default a rule\njust listens for GET (and implicitly HEAD).\nStarting with Flask 0.6, OPTIONS is implicitly\nadded and handled by the standard request handling.\n\n\n\n\n\n"}, -{"name": "Flask.after_request", "args": ["f"], "description": "Register a function to be run after each request.\nYour function must take one parameter, an instance of\nresponse_class and return a new response object or the\nsame (see process_response()).\nAs of Flask 0.7 this function might not be executed at the end of the\nrequest in case an unhandled exception occurred.\n"}, -{"name": "Flask.app_context", "args": [], "description": "Create an AppContext. Use as a with\nblock to push the context, which will make current_app\npoint at this application.\nAn application context is automatically pushed by\nRequestContext.push()\nwhen handling a request, and when running a CLI command. Use\nthis to manually create a context outside of these situations.\nwith app.app_context():\n init_db()\n\n\nSee The Application Context.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.auto_find_instance_path", "args": [], "description": "Tries to locate the instance path if it was not provided to the\nconstructor of the application class. It will basically calculate\nthe path to a folder named instance next to your main file or\nthe package.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_first_request", "args": ["f"], "description": "Registers a function to be run before the first request to this\ninstance of the application.\nThe function will be called without any arguments and its return\nvalue is ignored.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_request", "args": ["f"], "description": "Registers a function to run before each request.\nFor example, this can be used to open a database connection, or to load\nthe logged in user from the session.\nThe function will be called without any arguments. If it returns a\nnon-None value, the value is handled as if it was the return value from\nthe view, and further request handling is stopped.\n"}, -{"name": "Flask.context_processor", "args": ["f"], "description": "Registers a template context processor function.\n"}, -{"name": "Flask.create_global_jinja_loader", "args": [], "description": "Creates the loader for the Jinja2 environment. Can be used to\noverride just the loader and keeping the rest unchanged. It\u2019s\ndiscouraged to override this function. Instead one should override\nthe jinja_loader() function instead.\nThe global loader dispatches between the loaders of the application\nand the individual blueprints.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.create_jinja_environment", "args": [], "description": "Creates the Jinja2 environment based on jinja_options\nand select_jinja_autoescape(). Since 0.7 this also adds\nthe Jinja2 globals and filters after initialization. Override\nthis function to customize the behavior.\n\nChangelog\nChanged in version 0.11: Environment.auto_reload set in accordance with\nTEMPLATES_AUTO_RELOAD configuration option.\n\n\nNew in version 0.5.\n\n"}, -{"name": "Flask.create_url_adapter", "args": ["request"], "description": "Creates a URL adapter for the given request. The URL adapter\nis created at a point where the request context is not yet set\nup so the request is passed explicitly.\n\nChanged in version 1.0: SERVER_NAME no longer implicitly enables subdomain\nmatching. Use subdomain_matching instead.\n\n\nChangelog\nChanged in version 0.9: This can now also be called without a request object when the\nURL adapter is created for the application context.\n\n\nNew in version 0.6.\n\n"}, -{"name": "Flask.dispatch_request", "args": [], "description": "Does the request dispatching. Matches the URL and returns the\nreturn value of the view or error handler. This does not have to\nbe a response object. In order to convert the return value to a\nproper response object, call make_response().\n\nChangelog\nChanged in version 0.7: This no longer does the exception handling, this code was\nmoved to the new full_dispatch_request().\n\n"}, -{"name": "Flask.do_teardown_appcontext", "args": ["exc=<object object>"], "description": "Called right before the application context is popped.\nWhen handling a request, the application context is popped\nafter the request context. See do_teardown_request().\nThis calls all functions decorated with\nteardown_appcontext(). Then the\nappcontext_tearing_down signal is sent.\nThis is called by\nAppContext.pop().\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.do_teardown_request", "args": ["exc=<object object>"], "description": "Called after the request is dispatched and the response is\nreturned, right before the request context is popped.\nThis calls all functions decorated with\nteardown_request(), and Blueprint.teardown_request()\nif a blueprint handled the request. Finally, the\nrequest_tearing_down signal is sent.\nThis is called by\nRequestContext.pop(),\nwhich may be delayed during testing to maintain access to\nresources.\n\n\n\n\nParameters:exc \u2013 An unhandled exception raised while dispatching the\nrequest. Detected from the current exception information if\nnot passed. Passed to each teardown function.\n\n\n\n\nChangelog\nChanged in version 0.9: Added the exc argument.\n\n"}, -{"name": "Flask.endpoint", "args": ["endpoint"], "description": "A decorator to register a function as an endpoint.\nExample:\n@app.endpoint('example.endpoint')\ndef example():\n return \"example\"\n\n\n\n\n\n\nParameters:endpoint \u2013 the name of the endpoint\n\n\n\n"}, -{"name": "Flask.errorhandler", "args": ["code_or_exception"], "description": "Register a function to handle errors by code or exception class.\nA decorator that is used to register a function given an\nerror code. Example:\n@app.errorhandler(404)\ndef page_not_found(error):\n return 'This page does not exist', 404\n\n\nYou can also register handlers for arbitrary exceptions:\n@app.errorhandler(DatabaseError)\ndef special_exception_handler(error):\n return 'Database connection failed', 500\n\n\n\nChangelog\nNew in version 0.7: Use register_error_handler() instead of modifying\nerror_handler_spec directly, for application wide error\nhandlers.\n\n\nNew in version 0.7: One can now additionally also register custom exception types\nthat do not necessarily have to be a subclass of the\nHTTPException class.\n\n\n\n\n\nParameters:code_or_exception \u2013 the code as integer for the handler, or\nan arbitrary exception\n\n\n\n"}, -{"name": "Flask.full_dispatch_request", "args": [], "description": "Dispatches the request and on top of that performs request\npre and postprocessing as well as HTTP exception catching and\nerror handling.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.get_send_file_max_age", "args": ["filename"], "description": "Provides default cache_timeout for the send_file() functions.\nBy default, this function returns SEND_FILE_MAX_AGE_DEFAULT from\nthe configuration of current_app.\nStatic file functions such as send_from_directory() use this\nfunction, and send_file() calls this function on\ncurrent_app when the given cache_timeout is None. If a\ncache_timeout is given in send_file(), that timeout is used;\notherwise, this method is called.\nThis allows subclasses to change the behavior when sending files based\non the filename. For example, to set the cache timeout for .js files\nto 60 seconds:\nclass MyFlask(flask.Flask):\n def get_send_file_max_age(self, name):\n if name.lower().endswith('.js'):\n return 60\n return flask.Flask.get_send_file_max_age(self, name)\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.handle_exception", "args": ["e"], "description": "Default exception handling that kicks in when an exception\noccurs that is not caught. In debug mode the exception will\nbe re-raised immediately, otherwise it is logged and the handler\nfor a 500 internal server error is used. If no such handler\nexists, a default 500 internal server error message is displayed.\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.handle_http_exception", "args": ["e"], "description": "Handles an HTTP exception. By default this will invoke the\nregistered error handlers and fall back to returning the\nexception as response.\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.handle_url_build_error", "args": ["error", "endpoint", "values"], "description": "Handle BuildError on url_for().\n"}, -{"name": "Flask.handle_user_exception", "args": ["e"], "description": "This method is called whenever an exception occurs that should be\nhandled. A special case are\nHTTPExceptions which are forwarded by\nthis function to the handle_http_exception() method. This\nfunction will either return a response value or reraise the\nexception with the same traceback.\n\nChanged in version 1.0: Key errors raised from request data like form show the the bad\nkey in debug mode rather than a generic bad request message.\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.inject_url_defaults", "args": ["endpoint", "values"], "description": "Injects the URL defaults for the given endpoint directly into\nthe values dictionary passed. This is used internally and\nautomatically called on URL building.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.iter_blueprints", "args": [], "description": "Iterates over all blueprints by the order they were registered.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.log_exception", "args": ["exc_info"], "description": "Logs an exception. This is called by handle_exception()\nif debugging is disabled and right before the handler is called.\nThe default implementation logs the exception as error on the\nlogger.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.make_config", "args": ["instance_relative=False"], "description": "Used to create the config attribute by the Flask constructor.\nThe instance_relative parameter is passed in from the constructor\nof Flask (there named instance_relative_config) and indicates if\nthe config should be relative to the instance path or the root path\nof the application.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.make_default_options_response", "args": [], "description": "This method is called to create the default OPTIONS response.\nThis can be changed through subclassing to change the default\nbehavior of OPTIONS responses.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.make_null_session", "args": [], "description": "Creates a new instance of a missing session. Instead of overriding\nthis method we recommend replacing the session_interface.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.make_response", "args": ["rv"], "description": "Convert the return value from a view function to an instance of\nresponse_class.\n\n\n\n\nParameters:rv \u2013 the return value from the view function. The view function\nmust return a response. Returning None, or the view ending\nwithout returning, is not allowed. The following types are allowed\nfor view_rv:\n\nstr (unicode in Python 2)\nA response object is created with the string encoded to UTF-8\nas the body.\nbytes (str in Python 2)\nA response object is created with the bytes as the body.\ntuple\nEither (body, status, headers), (body, status), or\n(body, headers), where body is any of the other types\nallowed here, status is a string or an integer, and\nheaders is a dictionary or a list of (key, value)\ntuples. If body is a response_class instance,\nstatus overwrites the exiting value and headers are\nextended.\nresponse_class\nThe object is returned unchanged.\nother Response class\nThe object is coerced to response_class.\ncallable()\nThe function is called as a WSGI application. The result is\nused to create a response object.\n\n\n\n\n\n\nChangelog\nChanged in version 0.9: Previously a tuple was interpreted as the arguments for the\nresponse object.\n\n"}, -{"name": "Flask.make_shell_context", "args": [], "description": "Returns the shell context for an interactive shell for this\napplication. This runs all the registered shell context\nprocessors.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.open_instance_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s instance folder\n(instance_path). Otherwise works like\nopen_resource(). Instance resources can also be opened for\nwriting.\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Flask.open_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s resource folder. To see\nhow this works, consider the following folder structure:\n/myapplication.py\n/schema.sql\n/static\n /style.css\n/templates\n /layout.html\n /index.html\n\n\nIf you want to open the schema.sql file you would do the\nfollowing:\nwith app.open_resource('schema.sql') as f:\n contents = f.read()\n do_something_with(contents)\n\n\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Flask.open_session", "args": ["request"], "description": "Creates or opens a new session. Default implementation stores all\nsession data in a signed cookie. This requires that the\nsecret_key is set. Instead of overriding this method\nwe recommend replacing the session_interface.\n\n\n\n\nParameters:request \u2013 an instance of request_class.\n\n\n\n"}, -{"name": "Flask.preprocess_request", "args": [], "description": "Called before the request is dispatched. Calls\nurl_value_preprocessors registered with the app and the\ncurrent blueprint (if any). Then calls before_request_funcs\nregistered with the app and the blueprint.\nIf any before_request() handler returns a non-None value, the\nvalue is handled as if it was the return value from the view, and\nfurther request handling is stopped.\n"}, -{"name": "Flask.process_response", "args": ["response"], "description": "Can be overridden in order to modify the response object\nbefore it\u2019s sent to the WSGI server. By default this will\ncall all the after_request() decorated functions.\n\nChangelog\nChanged in version 0.5: As of Flask 0.5 the functions registered for after request\nexecution are called in reverse order of registration.\n\n\n\n\n\nParameters:response \u2013 a response_class object.\n\nReturns:a new response object or the same, has to be an\ninstance of response_class.\n\n\n\n"}, -{"name": "Flask.register_blueprint", "args": ["blueprint", "**options"], "description": "Register a Blueprint on the application. Keyword\narguments passed to this method will override the defaults set on the\nblueprint.\nCalls the blueprint\u2019s register() method after\nrecording the blueprint in the application\u2019s blueprints.\n\n\n\n\nParameters:\nblueprint \u2013 The blueprint to register.\nurl_prefix \u2013 Blueprint routes will be prefixed with this.\nsubdomain \u2013 Blueprint routes will match on this subdomain.\nurl_defaults \u2013 Blueprint routes will use these default values for\nview arguments.\noptions \u2013 Additional keyword arguments are passed to\nBlueprintSetupState. They can be\naccessed in record() callbacks.\n\n\n\n\n\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.register_error_handler", "args": ["code_or_exception", "f"], "description": "Alternative error attach function to the errorhandler()\ndecorator that is more straightforward to use for non decorator\nusage.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.request_context", "args": ["environ"], "description": "Create a RequestContext representing a\nWSGI environment. Use a with block to push the context,\nwhich will make request point at this request.\nSee The Request Context.\nTypically you should not call this from your own code. A request\ncontext is automatically pushed by the wsgi_app() when\nhandling a request. Use test_request_context() to create\nan environment and context instead of this method.\n\n\n\n\nParameters:environ \u2013 a WSGI environment\n\n\n\n"}, -{"name": "Flask.route", "args": ["rule", "**options"], "description": "A decorator that is used to register a view function for a\ngiven URL rule. This does the same thing as add_url_rule()\nbut is intended for decorator usage:\n@app.route('/')\ndef index():\n return 'Hello World'\n\n\nFor more information refer to URL Route Registrations.\n\n\n\n\nParameters:\nrule \u2013 the URL rule as string\nendpoint \u2013 the endpoint for the registered URL rule. Flask\nitself assumes the name of the view function as\nendpoint\noptions \u2013 the options to be forwarded to the underlying\nRule object. A change\nto Werkzeug is handling of method options. methods\nis a list of methods this rule should be limited\nto (GET, POST etc.). By default a rule\njust listens for GET (and implicitly HEAD).\nStarting with Flask 0.6, OPTIONS is implicitly\nadded and handled by the standard request handling.\n\n\n\n\n\n"}, -{"name": "Flask.run", "args": ["host=None", "port=None", "debug=None", "load_dotenv=True", "**options"], "description": "Runs the application on a local development server.\nDo not use run() in a production setting. It is not intended to\nmeet security and performance requirements for a production server.\nInstead, see Deployment Options for WSGI server recommendations.\nIf the debug flag is set the server will automatically reload\nfor code changes and show a debugger in case an exception happened.\nIf you want to run the application in debug mode, but disable the\ncode execution on the interactive debugger, you can pass\nuse_evalex=False as parameter. This will keep the debugger\u2019s\ntraceback screen active, but disable code execution.\nIt is not recommended to use this function for development with\nautomatic reloading as this is badly supported. Instead you should\nbe using the flask command line script\u2019s run support.\n\nKeep in Mind\nFlask will suppress any server error with a generic error page\nunless it is in debug mode. As such to enable just the\ninteractive debugger without the code reloading, you have to\ninvoke run() with debug=True and use_reloader=False.\nSetting use_debugger to True without being in debug mode\nwon\u2019t catch any exceptions because there won\u2019t be any to\ncatch.\n\n\n\n\n\nParameters:\nhost \u2013 the hostname to listen on. Set this to '0.0.0.0' to\nhave the server available externally as well. Defaults to\n'127.0.0.1' or the host in the SERVER_NAME config variable\nif present.\nport \u2013 the port of the webserver. Defaults to 5000 or the\nport defined in the SERVER_NAME config variable if present.\ndebug \u2013 if given, enable or disable debug mode. See\ndebug.\nload_dotenv \u2013 Load the nearest .env and .flaskenv\nfiles to set environment variables. Will also change the working\ndirectory to the directory containing the first file found.\noptions \u2013 the options to be forwarded to the underlying Werkzeug\nserver. See werkzeug.serving.run_simple() for more\ninformation.\n\n\n\n\n\n\nChanged in version 1.0: If installed, python-dotenv will be used to load environment\nvariables from .env and .flaskenv files.\nIf set, the FLASK_ENV and FLASK_DEBUG\nenvironment variables will override env and\ndebug.\nThreaded mode is enabled by default.\n\n\nChangelog\nChanged in version 0.10: The default port is now picked from the SERVER_NAME\nvariable.\n\n"}, -{"name": "Flask.save_session", "args": ["session", "response"], "description": "Saves the session if it needs updates. For the default\nimplementation, check open_session(). Instead of overriding this\nmethod we recommend replacing the session_interface.\n\n\n\n\nParameters:\nsession \u2013 the session to be saved (a\nSecureCookie\nobject)\nresponse \u2013 an instance of response_class\n\n\n\n\n\n"}, -{"name": "Flask.select_jinja_autoescape", "args": ["filename"], "description": "Returns True if autoescaping should be active for the given\ntemplate name. If no template name is given, returns True.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.send_static_file", "args": ["filename"], "description": "Function used internally to send static files from the static\nfolder to the browser.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.shell_context_processor", "args": ["f"], "description": "Registers a shell context processor function.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.should_ignore_error", "args": ["error"], "description": "This is called to figure out if an error should be ignored\nor not as far as the teardown system is concerned. If this\nfunction returns True then the teardown handlers will not be\npassed the error.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "Flask.teardown_appcontext", "args": ["f"], "description": "Registers a function to be called when the application context\nends. These functions are typically also called when the request\ncontext is popped.\nExample:\nctx = app.app_context()\nctx.push()\n...\nctx.pop()\n\n\nWhen ctx.pop() is executed in the above example, the teardown\nfunctions are called just before the app context moves from the\nstack of active contexts. This becomes relevant if you are using\nsuch constructs in tests.\nSince a request context typically also manages an application\ncontext it would also be called when you pop a request context.\nWhen a teardown function was called because of an unhandled exception\nit will be passed an error object. If an errorhandler() is\nregistered, it will handle the exception and the teardown will not\nreceive it.\nThe return values of teardown functions are ignored.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.teardown_request", "args": ["f"], "description": "Register a function to be run at the end of each request,\nregardless of whether there was an exception or not. These functions\nare executed when the request context is popped, even if not an\nactual request was performed.\nExample:\nctx = app.test_request_context()\nctx.push()\n...\nctx.pop()\n\n\nWhen ctx.pop() is executed in the above example, the teardown\nfunctions are called just before the request context moves from the\nstack of active contexts. This becomes relevant if you are using\nsuch constructs in tests.\nGenerally teardown functions must take every necessary step to avoid\nthat they will fail. If they do execute code that might fail they\nwill have to surround the execution of these code by try/except\nstatements and log occurring errors.\nWhen a teardown function was called because of an exception it will\nbe passed an error object.\nThe return values of teardown functions are ignored.\n\nDebug Note\nIn debug mode Flask will not tear down a request on an exception\nimmediately. Instead it will keep it alive so that the interactive\ndebugger can still access it. This behavior can be controlled\nby the PRESERVE_CONTEXT_ON_EXCEPTION configuration variable.\n\n"}, -{"name": "Flask.template_filter", "args": ["name=None"], "description": "A decorator that is used to register custom template filter.\nYou can specify a name for the filter, otherwise the function\nname will be used. Example:\n@app.template_filter()\ndef reverse(s):\n return s[::-1]\n\n\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.template_global", "args": ["name=None"], "description": "A decorator that is used to register a custom template global function.\nYou can specify a name for the global function, otherwise the function\nname will be used. Example:\n@app.template_global()\ndef double(n):\n return 2 * n\n\n\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global function, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.template_test", "args": ["name=None"], "description": "A decorator that is used to register custom template test.\nYou can specify a name for the test, otherwise the function\nname will be used. Example:\n@app.template_test()\ndef is_prime(n):\n if n == 2:\n return True\n for i in range(2, int(math.ceil(math.sqrt(n))) + 1):\n if n % i == 0:\n return False\n return True\n\n\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Flask.test_cli_runner", "args": ["**kwargs"], "description": "Create a CLI runner for testing CLI commands.\nSee Testing CLI Commands.\nReturns an instance of test_cli_runner_class, by default\nFlaskCliRunner. The Flask app object is\npassed as the first argument.\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "Flask.test_client", "args": ["use_cookies=True", "**kwargs"], "description": "Creates a test client for this application. For information\nabout unit testing head over to Testing Flask Applications.\nNote that if you are testing for assertions or exceptions in your\napplication code, you must set app.testing = True in order for the\nexceptions to propagate to the test client. Otherwise, the exception\nwill be handled by the application (not visible to the test client) and\nthe only indication of an AssertionError or other exception will be a\n500 status code response to the test client. See the testing\nattribute. For example:\napp.testing = True\nclient = app.test_client()\n\n\nThe test client can be used in a with block to defer the closing down\nof the context until the end of the with block. This is useful if\nyou want to access the context locals for testing:\nwith app.test_client() as c:\n rv = c.get('/?vodka=42')\n assert request.args['vodka'] == '42'\n\n\nAdditionally, you may pass optional keyword arguments that will then\nbe passed to the application\u2019s test_client_class constructor.\nFor example:\nfrom flask.testing import FlaskClient\n\nclass CustomClient(FlaskClient):\n def __init__(self, *args, **kwargs):\n self._authentication = kwargs.pop(\"authentication\")\n super(CustomClient,self).__init__( *args, **kwargs)\n\napp.test_client_class = CustomClient\nclient = app.test_client(authentication='Basic ....')\n\n\nSee FlaskClient for more information.\n\nChangelog\nChanged in version 0.11: Added **kwargs to support passing additional keyword arguments to\nthe constructor of test_client_class.\n\n\nNew in version 0.7: The use_cookies parameter was added as well as the ability\nto override the client to be used by setting the\ntest_client_class attribute.\n\n\nChanged in version 0.4: added support for with block usage for the client.\n\n"}, -{"name": "Flask.test_request_context", "args": ["*args", "**kwargs"], "description": "Create a RequestContext for a WSGI\nenvironment created from the given values. This is mostly useful\nduring testing, where you may want to run a function that uses\nrequest data without dispatching a full request.\nSee The Request Context.\nUse a with block to push the context, which will make\nrequest point at the request for the created\nenvironment.\nwith test_request_context(...):\n generate_report()\n\n\nWhen using the shell, it may be easier to push and pop the\ncontext manually to avoid indentation.\nctx = app.test_request_context(...)\nctx.push()\n...\nctx.pop()\n\n\nTakes the same arguments as Werkzeug\u2019s\nEnvironBuilder, with some defaults from\nthe application. See the linked Werkzeug docs for most of the\navailable arguments. Flask-specific behavior is listed here.\n\n\n\n\nParameters:\npath \u2013 URL path being requested.\nbase_url \u2013 Base URL where the app is being served, which\npath is relative to. If not given, built from\nPREFERRED_URL_SCHEME, subdomain,\nSERVER_NAME, and APPLICATION_ROOT.\nsubdomain \u2013 Subdomain name to append to\nSERVER_NAME.\nurl_scheme \u2013 Scheme to use instead of\nPREFERRED_URL_SCHEME.\ndata \u2013 The request body, either as a string or a dict of\nform keys and values.\njson \u2013 If given, this is serialized as JSON and passed as\ndata. Also defaults content_type to\napplication/json.\nargs \u2013 other positional arguments passed to\nEnvironBuilder.\nkwargs \u2013 other keyword arguments passed to\nEnvironBuilder.\n\n\n\n\n\n"}, -{"name": "Flask.trap_http_exception", "args": ["e"], "description": "Checks if an HTTP exception should be trapped or not. By default\nthis will return False for all exceptions except for a bad request\nkey error if TRAP_BAD_REQUEST_ERRORS is set to True. It\nalso returns True if TRAP_HTTP_EXCEPTIONS is set to True.\nThis is called for all HTTP exceptions raised by a view function.\nIf it returns True for any exception the error handler for this\nexception is not called and it shows up as regular exception in the\ntraceback. This is helpful for debugging implicitly raised HTTP\nexceptions.\n\nChanged in version 1.0: Bad request errors are not trapped by default in debug mode.\n\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.update_template_context", "args": ["context"], "description": "Update the template context with some commonly used variables.\nThis injects request, session, config and g into the template\ncontext as well as everything template context processors want\nto inject. Note that the as of Flask 0.6, the original values\nin the context will not be overridden if a context processor\ndecides to return a value with the same key.\n\n\n\n\nParameters:context \u2013 the context as a dictionary that is updated in place\nto add extra variables.\n\n\n\n"}, -{"name": "Flask.url_defaults", "args": ["f"], "description": "Callback function for URL defaults for all view functions of the\napplication. It\u2019s called with the endpoint and values and should\nupdate the values passed in place.\n"}, -{"name": "Flask.url_value_preprocessor", "args": ["f"], "description": "Register a URL value preprocessor function for all view\nfunctions in the application. These functions will be called before the\nbefore_request() functions.\nThe function can modify the values captured from the matched url before\nthey are passed to the view. For example, this can be used to pop a\ncommon language code value and place it in g rather than pass it to\nevery view.\nThe function is passed the endpoint name and values dict. The return\nvalue is ignored.\n"}, -{"name": "Flask.wsgi_app", "args": ["environ", "start_response"], "description": "The actual WSGI application. This is not implemented in\n__call__() so that middlewares can be applied without\nlosing a reference to the app object. Instead of doing this:\napp = MyMiddleware(app)\n\n\nIt\u2019s a better idea to do this instead:\napp.wsgi_app = MyMiddleware(app.wsgi_app)\n\n\nThen you still have the original application object around and\ncan continue to call methods on it.\n\nChangelog\nChanged in version 0.7: Teardown events for the request and app contexts are called\neven if an unhandled error occurs. Other events may not be\ncalled depending on when an error occurs during dispatch.\nSee Callbacks and Errors.\n\n\n\n\n\nParameters:\nenviron \u2013 A WSGI environment.\nstart_response \u2013 A callable accepting a status code,\na list of headers, and an optional exception context to\nstart the response.\n\n\n\n\n\n"}, -{"name": "Flask.after_request_funcs", "args": null, "description": "A dictionary with lists of functions that should be called after\neach request. The key of the dictionary is the name of the blueprint\nthis function is active for, None for all requests. This can for\nexample be used to close database connections. To register a function\nhere, use the after_request() decorator.\n"}, -{"name": "Flask.app_ctx_globals_class", "args": null, "description": "alias of flask.ctx._AppCtxGlobals\n"}, -{"name": "Flask.before_first_request_funcs", "args": null, "description": "A list of functions that will be called at the beginning of the\nfirst request to this instance. To register a function, use the\nbefore_first_request() decorator.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.before_request_funcs", "args": null, "description": "A dictionary with lists of functions that will be called at the\nbeginning of each request. The key of the dictionary is the name of\nthe blueprint this function is active for, or None for all\nrequests. To register a function, use the before_request()\ndecorator.\n"}, -{"name": "Flask.blueprints", "args": null, "description": "all the attached blueprints in a dictionary by name. Blueprints\ncan be attached multiple times so this dictionary does not tell\nyou how often they got attached.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.cli", "args": null, "description": "The click command line context for this application. Commands\nregistered here show up in the flask command once the\napplication has been discovered. The default commands are\nprovided by Flask itself and can be overridden.\nThis is an instance of a click.Group object.\n"}, -{"name": "Flask.config", "args": null, "description": "The configuration dictionary as Config. This behaves\nexactly like a regular dictionary but supports additional methods\nto load a config from files.\n"}, -{"name": "Flask.config_class", "args": null, "description": "alias of flask.config.Config\n"}, -{"name": "Flask.debug", "args": null, "description": "Whether debug mode is enabled. When using flask run to start\nthe development server, an interactive debugger will be shown for\nunhandled exceptions, and the server will be reloaded when code\nchanges. This maps to the DEBUG config key. This is\nenabled when env is 'development' and is overridden\nby the FLASK_DEBUG environment variable. It may not behave as\nexpected if set in code.\nDo not enable debug mode when deploying in production.\nDefault: True if env is 'development', or\nFalse otherwise.\n"}, -{"name": "Flask.default_config", "args": null, "description": "Default configuration parameters.\n"}, -{"name": "Flask.env", "args": null, "description": "What environment the app is running in. Flask and extensions may\nenable behaviors based on the environment, such as enabling debug\nmode. This maps to the ENV config key. This is set by the\nFLASK_ENV environment variable and may not behave as\nexpected if set in code.\nDo not enable development when deploying in production.\nDefault: 'production'\n"}, -{"name": "Flask.error_handler_spec", "args": null, "description": "A dictionary of all registered error handlers. The key is None\nfor error handlers active on the application, otherwise the key is\nthe name of the blueprint. Each key points to another dictionary\nwhere the key is the status code of the http exception. The\nspecial key None points to a list of tuples where the first item\nis the class for the instance check and the second the error handler\nfunction.\nTo register an error handler, use the errorhandler()\ndecorator.\n"}, -{"name": "Flask.extensions", "args": null, "description": "a place where extensions can store application specific state. For\nexample this is where an extension could store database engines and\nsimilar things. For backwards compatibility extensions should register\nthemselves like this:\nif not hasattr(app, 'extensions'):\n app.extensions = {}\napp.extensions['extensionname'] = SomeObject()\n\n\nThe key must match the name of the extension module. For example in\ncase of a \u201cFlask-Foo\u201d extension in flask_foo, the key would be\n'foo'.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.got_first_request", "args": null, "description": "This attribute is set to True if the application started\nhandling the first request.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.has_static_folder", "args": null, "description": "This is True if the package bound object\u2019s container has a\nfolder for static files.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.import_name", "args": null, "description": "The name of the package or module that this app belongs to. Do not\nchange this once it is set by the constructor.\n"}, -{"name": "Flask.instance_path", "args": null, "description": "Holds the path to the instance folder.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.jinja_env", "args": null, "description": "The Jinja2 environment used to load templates.\n"}, -{"name": "Flask.jinja_environment", "args": null, "description": "alias of flask.templating.Environment\n"}, -{"name": "Flask.jinja_loader", "args": null, "description": "The Jinja loader for this package bound object.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Flask.jinja_options", "args": null, "description": "Options that are passed directly to the Jinja2 environment.\n"}, -{"name": "Flask.json_decoder", "args": null, "description": "alias of flask.json.JSONDecoder\n"}, -{"name": "Flask.json_encoder", "args": null, "description": "alias of flask.json.JSONEncoder\n"}, -{"name": "Flask.logger", "args": null, "description": "The 'flask.app' logger, a standard Python\nLogger.\nIn debug mode, the logger\u2019s level will be set\nto DEBUG.\nIf there are no handlers configured, a default handler will be added.\nSee Logging for more information.\n\nChanged in version 1.0: Behavior was simplified. The logger is always named\nflask.app. The level is only set during configuration, it\ndoesn\u2019t check app.debug each time. Only one format is used,\nnot different ones depending on app.debug. No handlers are\nremoved, and a handler is only added if no handlers are already\nconfigured.\n\n\nChangelog\nNew in version 0.3.\n\n"}, -{"name": "Flask.name", "args": null, "description": "The name of the application. This is usually the import name\nwith the difference that it\u2019s guessed from the run file if the\nimport name is main. This name is used as a display name when\nFlask needs the name of the application. It can be set and overridden\nto change the value.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.permanent_session_lifetime", "args": null, "description": "A timedelta which is used to set the expiration\ndate of a permanent session. The default is 31 days which makes a\npermanent session survive for roughly one month.\nThis attribute can also be configured from the config with the\nPERMANENT_SESSION_LIFETIME configuration key. Defaults to\ntimedelta(days=31)\n"}, -{"name": "Flask.preserve_context_on_exception", "args": null, "description": "Returns the value of the PRESERVE_CONTEXT_ON_EXCEPTION\nconfiguration value in case it\u2019s set, otherwise a sensible default\nis returned.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.propagate_exceptions", "args": null, "description": "Returns the value of the PROPAGATE_EXCEPTIONS configuration\nvalue in case it\u2019s set, otherwise a sensible default is returned.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.request_class", "args": null, "description": "alias of flask.wrappers.Request\n"}, -{"name": "Flask.response_class", "args": null, "description": "alias of flask.wrappers.Response\n"}, -{"name": "Flask.root_path", "args": null, "description": "Absolute path to the package on the filesystem. Used to look up\nresources contained in the package.\n"}, -{"name": "Flask.secret_key", "args": null, "description": "If a secret key is set, cryptographic components can use this to\nsign cookies and other things. Set this to a complex random value\nwhen you want to use the secure cookie for instance.\nThis attribute can also be configured from the config with the\nSECRET_KEY configuration key. Defaults to None.\n"}, -{"name": "Flask.send_file_max_age_default", "args": null, "description": "A timedelta which is used as default cache_timeout\nfor the send_file() functions. The default is 12 hours.\nThis attribute can also be configured from the config with the\nSEND_FILE_MAX_AGE_DEFAULT configuration key. This configuration\nvariable can also be set with an integer value used as seconds.\nDefaults to timedelta(hours=12)\n"}, -{"name": "Flask.session_cookie_name", "args": null, "description": "The secure cookie uses this for the name of the session cookie.\nThis attribute can also be configured from the config with the\nSESSION_COOKIE_NAME configuration key. Defaults to 'session'\n"}, -{"name": "Flask.session_interface", "args": null, "description": "the session interface to use. By default an instance of\nSecureCookieSessionInterface is used here.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Flask.shell_context_processors", "args": null, "description": "A list of shell context processor functions that should be run\nwhen a shell context is created.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Flask.static_folder", "args": null, "description": "The absolute path to the configured static folder.\n"}, -{"name": "Flask.static_url_path", "args": null, "description": "The URL prefix that the static route will be registered for.\n"}, -{"name": "Flask.teardown_appcontext_funcs", "args": null, "description": "A list of functions that are called when the application context\nis destroyed. Since the application context is also torn down\nif the request ends this is the place to store code that disconnects\nfrom databases.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.teardown_request_funcs", "args": null, "description": "A dictionary with lists of functions that are called after\neach request, even if an exception has occurred. The key of the\ndictionary is the name of the blueprint this function is active for,\nNone for all requests. These functions are not allowed to modify\nthe request, and their return values are ignored. If an exception\noccurred while processing the request, it gets passed to each\nteardown_request function. To register a function here, use the\nteardown_request() decorator.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.template_context_processors", "args": null, "description": "A dictionary with list of functions that are called without argument\nto populate the template context. The key of the dictionary is the\nname of the blueprint this function is active for, None for all\nrequests. Each returns a dictionary that the template context is\nupdated with. To register a function here, use the\ncontext_processor() decorator.\n"}, -{"name": "Flask.template_folder", "args": null, "description": "Location of the template files to be added to the template lookup.\nNone if templates should not be added.\n"}, -{"name": "Flask.templates_auto_reload", "args": null, "description": "Reload templates when they are changed. Used by\ncreate_jinja_environment().\nThis attribute can be configured with TEMPLATES_AUTO_RELOAD. If\nnot set, it will be enabled in debug mode.\n\nNew in version 1.0: This property was added but the underlying config and behavior\nalready existed.\n\n\nChangelog"}, -{"name": "Flask.test_cli_runner_class", "args": null, "description": "The CliRunner subclass, by default\nFlaskCliRunner that is used by\ntest_cli_runner(). Its __init__ method should take a\nFlask app object as the first argument.\n\nNew in version 1.0.\n\n\nChangelog"}, -{"name": "Flask.test_client_class", "args": null, "description": "the test client that is used with when test_client is used.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.testing", "args": null, "description": "The testing flag. Set this to True to enable the test mode of\nFlask extensions (and in the future probably also Flask itself).\nFor example this might activate test helpers that have an\nadditional runtime cost which should not be enabled by default.\nIf this is enabled and PROPAGATE_EXCEPTIONS is not changed from the\ndefault it\u2019s implicitly enabled.\nThis attribute can also be configured from the config with the\nTESTING configuration key. Defaults to False.\n"}, -{"name": "Flask.url_build_error_handlers", "args": null, "description": "A list of functions that are called when url_for() raises a\nBuildError. Each function registered here\nis called with error, endpoint and values. If a function\nreturns None or raises a BuildError the next function is\ntried.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Flask.url_default_functions", "args": null, "description": "A dictionary with lists of functions that can be used as URL value\npreprocessors. The key None here is used for application wide\ncallbacks, otherwise the key is the name of the blueprint.\nEach of these functions has the chance to modify the dictionary\nof URL values before they are used as the keyword arguments of the\nview function. For each function registered this one should also\nprovide a url_defaults() function that adds the parameters\nautomatically again that were removed that way.\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.url_map", "args": null, "description": "The Map for this instance. You can use\nthis to change the routing converters after the class was created\nbut before any routes are connected. Example:\nfrom werkzeug.routing import BaseConverter\n\nclass ListConverter(BaseConverter):\n def to_python(self, value):\n return value.split(',')\n def to_url(self, values):\n return ','.join(super(ListConverter, self).to_url(value)\n for value in values)\n\napp = Flask(__name__)\napp.url_map.converters['list'] = ListConverter\n\n\n"}, -{"name": "Flask.url_rule_class", "args": null, "description": "alias of werkzeug.routing.Rule\n"}, -{"name": "Flask.url_value_preprocessors", "args": null, "description": "A dictionary with lists of functions that are called before the\nbefore_request_funcs functions. The key of the dictionary is\nthe name of the blueprint this function is active for, or None\nfor all requests. To register a function, use\nurl_value_preprocessor().\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Flask.use_x_sendfile", "args": null, "description": "Enable this if you want to use the X-Sendfile feature. Keep in\nmind that the server has to support this. This only affects files\nsent with the send_file() method.\n\nChangelog\nNew in version 0.2.\n\nThis attribute can also be configured from the config with the\nUSE_X_SENDFILE configuration key. Defaults to False.\n"}, -{"name": "Flask.view_functions", "args": null, "description": "A dictionary of all view functions registered. The keys will\nbe function names which are also used to generate URLs and\nthe values are the function objects themselves.\nTo register a view function, use the route() decorator.\n"}, -{"name": "Blueprint", "args": ["name", "import_name", "static_folder=None", "static_url_path=None", "template_folder=None", "url_prefix=None", "subdomain=None", "url_defaults=None", "root_path=None"], "description": "Represents a blueprint. A blueprint is an object that records\nfunctions that will be called with the\nBlueprintSetupState later to register functions\nor other things on the main application. See Modular Applications with Blueprints for more\ninformation.\n\n"}, -{"name": "Blueprint.add_app_template_filter", "args": ["f", "name=None"], "description": "Register a custom template filter, available application wide. Like\nFlask.add_template_filter() but for a blueprint. Works exactly\nlike the app_template_filter() decorator.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_app_template_global", "args": ["f", "name=None"], "description": "Register a custom template global, available application wide. Like\nFlask.add_template_global() but for a blueprint. Works exactly\nlike the app_template_global() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_app_template_test", "args": ["f", "name=None"], "description": "Register a custom template test, available application wide. Like\nFlask.add_template_test() but for a blueprint. Works exactly\nlike the app_template_test() decorator.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "**options"], "description": "Like Flask.add_url_rule() but for a blueprint. The endpoint for\nthe url_for() function is prefixed with the name of the blueprint.\n"}, -{"name": "Blueprint.after_app_request", "args": ["f"], "description": "Like Flask.after_request() but for a blueprint. Such a function\nis executed after each request, even if outside of the blueprint.\n"}, -{"name": "Blueprint.after_request", "args": ["f"], "description": "Like Flask.after_request() but for a blueprint. This function\nis only executed after each request that is handled by a function of\nthat blueprint.\n"}, -{"name": "Blueprint.app_context_processor", "args": ["f"], "description": "Like Flask.context_processor() but for a blueprint. Such a\nfunction is executed each request, even if outside of the blueprint.\n"}, -{"name": "Blueprint.app_errorhandler", "args": ["code"], "description": "Like Flask.errorhandler() but for a blueprint. This\nhandler is used for all requests, even if outside of the blueprint.\n"}, -{"name": "Blueprint.app_template_filter", "args": ["name=None"], "description": "Register a custom template filter, available application wide. Like\nFlask.template_filter() but for a blueprint.\n\n\n\n\nParameters:name \u2013 the optional name of the filter, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_template_global", "args": ["name=None"], "description": "Register a custom template global, available application wide. Like\nFlask.template_global() but for a blueprint.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the global, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_template_test", "args": ["name=None"], "description": "Register a custom template test, available application wide. Like\nFlask.template_test() but for a blueprint.\n\nChangelog\nNew in version 0.10.\n\n\n\n\n\nParameters:name \u2013 the optional name of the test, otherwise the\nfunction name will be used.\n\n\n\n"}, -{"name": "Blueprint.app_url_defaults", "args": ["f"], "description": "Same as url_defaults() but application wide.\n"}, -{"name": "Blueprint.app_url_value_preprocessor", "args": ["f"], "description": "Same as url_value_preprocessor() but application wide.\n"}, -{"name": "Blueprint.before_app_first_request", "args": ["f"], "description": "Like Flask.before_first_request(). Such a function is\nexecuted before the first request to the application.\n"}, -{"name": "Blueprint.before_app_request", "args": ["f"], "description": "Like Flask.before_request(). Such a function is executed\nbefore each request, even if outside of a blueprint.\n"}, -{"name": "Blueprint.before_request", "args": ["f"], "description": "Like Flask.before_request() but for a blueprint. This function\nis only executed before each request that is handled by a function of\nthat blueprint.\n"}, -{"name": "Blueprint.context_processor", "args": ["f"], "description": "Like Flask.context_processor() but for a blueprint. This\nfunction is only executed for requests handled by a blueprint.\n"}, -{"name": "Blueprint.endpoint", "args": ["endpoint"], "description": "Like Flask.endpoint() but for a blueprint. This does not\nprefix the endpoint with the blueprint name, this has to be done\nexplicitly by the user of this method. If the endpoint is prefixed\nwith a . it will be registered to the current blueprint, otherwise\nit\u2019s an application independent endpoint.\n"}, -{"name": "Blueprint.errorhandler", "args": ["code_or_exception"], "description": "Registers an error handler that becomes active for this blueprint\nonly. Please be aware that routing does not happen local to a\nblueprint so an error handler for 404 usually is not handled by\na blueprint unless it is caused inside a view function. Another\nspecial case is the 500 internal server error which is always looked\nup from the application.\nOtherwise works as the errorhandler() decorator\nof the Flask object.\n"}, -{"name": "Blueprint.get_send_file_max_age", "args": ["filename"], "description": "Provides default cache_timeout for the send_file() functions.\nBy default, this function returns SEND_FILE_MAX_AGE_DEFAULT from\nthe configuration of current_app.\nStatic file functions such as send_from_directory() use this\nfunction, and send_file() calls this function on\ncurrent_app when the given cache_timeout is None. If a\ncache_timeout is given in send_file(), that timeout is used;\notherwise, this method is called.\nThis allows subclasses to change the behavior when sending files based\non the filename. For example, to set the cache timeout for .js files\nto 60 seconds:\nclass MyFlask(flask.Flask):\n def get_send_file_max_age(self, name):\n if name.lower().endswith('.js'):\n return 60\n return flask.Flask.get_send_file_max_age(self, name)\n\n\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Blueprint.make_setup_state", "args": ["app", "options", "first_registration=False"], "description": "Creates an instance of BlueprintSetupState()\nobject that is later passed to the register callback functions.\nSubclasses can override this to return a subclass of the setup state.\n"}, -{"name": "Blueprint.open_resource", "args": ["resource", "mode='rb'"], "description": "Opens a resource from the application\u2019s resource folder. To see\nhow this works, consider the following folder structure:\n/myapplication.py\n/schema.sql\n/static\n /style.css\n/templates\n /layout.html\n /index.html\n\n\nIf you want to open the schema.sql file you would do the\nfollowing:\nwith app.open_resource('schema.sql') as f:\n contents = f.read()\n do_something_with(contents)\n\n\n\n\n\n\nParameters:\nresource \u2013 the name of the resource. To access resources within\nsubfolders use forward slashes as separator.\nmode \u2013 resource file opening mode, default is \u2018rb\u2019.\n\n\n\n\n\n"}, -{"name": "Blueprint.record", "args": ["func"], "description": "Registers a function that is called when the blueprint is\nregistered on the application. This function is called with the\nstate as argument as returned by the make_setup_state()\nmethod.\n"}, -{"name": "Blueprint.record_once", "args": ["func"], "description": "Works like record() but wraps the function in another\nfunction that will ensure the function is only called once. If the\nblueprint is registered a second time on the application, the\nfunction passed is not called.\n"}, -{"name": "Blueprint.register", "args": ["app", "options", "first_registration=False"], "description": "Called by Flask.register_blueprint() to register all views\nand callbacks registered on the blueprint with the application. Creates\na BlueprintSetupState and calls each record() callback\nwith it.\n\n\n\n\nParameters:\napp \u2013 The application this blueprint is being registered with.\noptions \u2013 Keyword arguments forwarded from\nregister_blueprint().\nfirst_registration \u2013 Whether this is the first time this\nblueprint has been registered on the application.\n\n\n\n\n\n"}, -{"name": "Blueprint.register_error_handler", "args": ["code_or_exception", "f"], "description": "Non-decorator version of the errorhandler() error attach\nfunction, akin to the register_error_handler()\napplication-wide function of the Flask object but\nfor error handlers limited to this blueprint.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Blueprint.route", "args": ["rule", "**options"], "description": "Like Flask.route() but for a blueprint. The endpoint for the\nurl_for() function is prefixed with the name of the blueprint.\n"}, -{"name": "Blueprint.send_static_file", "args": ["filename"], "description": "Function used internally to send static files from the static\nfolder to the browser.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.teardown_app_request", "args": ["f"], "description": "Like Flask.teardown_request() but for a blueprint. Such a\nfunction is executed when tearing down each request, even if outside of\nthe blueprint.\n"}, -{"name": "Blueprint.teardown_request", "args": ["f"], "description": "Like Flask.teardown_request() but for a blueprint. This\nfunction is only executed when tearing down requests handled by a\nfunction of that blueprint. Teardown request functions are executed\nwhen the request context is popped, even when no actual request was\nperformed.\n"}, -{"name": "Blueprint.url_defaults", "args": ["f"], "description": "Callback function for URL defaults for this blueprint. It\u2019s called\nwith the endpoint and values and should update the values passed\nin place.\n"}, -{"name": "Blueprint.url_value_preprocessor", "args": ["f"], "description": "Registers a function as URL value preprocessor for this\nblueprint. It\u2019s called before the view functions are called and\ncan modify the url values provided.\n"}, -{"name": "Blueprint.has_static_folder", "args": null, "description": "This is True if the package bound object\u2019s container has a\nfolder for static files.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.import_name", "args": null, "description": "The name of the package or module that this app belongs to. Do not\nchange this once it is set by the constructor.\n"}, -{"name": "Blueprint.jinja_loader", "args": null, "description": "The Jinja loader for this package bound object.\n\nChangelog\nNew in version 0.5.\n\n"}, -{"name": "Blueprint.json_decoder", "args": null, "description": "Blueprint local JSON decoder class to use.\nSet to None to use the app\u2019s json_decoder.\n"}, -{"name": "Blueprint.json_encoder", "args": null, "description": "Blueprint local JSON decoder class to use.\nSet to None to use the app\u2019s json_encoder.\n"}, -{"name": "Blueprint.root_path", "args": null, "description": "Absolute path to the package on the filesystem. Used to look up\nresources contained in the package.\n"}, -{"name": "Blueprint.static_folder", "args": null, "description": "The absolute path to the configured static folder.\n"}, -{"name": "Blueprint.static_url_path", "args": null, "description": "The URL prefix that the static route will be registered for.\n"}, -{"name": "Blueprint.template_folder", "args": null, "description": "Location of the template files to be added to the template lookup.\nNone if templates should not be added.\n"}, -{"name": "Request", "args": ["environ", "populate_request=True", "shallow=False"], "description": "The request object used by default in Flask. Remembers the\nmatched endpoint and view arguments.\n\nIt is what ends up as request. If you want to replace\nthe request object used you can subclass this and set\nrequest_class to your subclass.\n\nThe request object is a Request subclass and\nprovides all of the attributes Werkzeug defines plus a few Flask\nspecific ones.\n\n"}, -{"name": "Request.close", "args": [], "description": "Closes associated resources of this request object. This\ncloses all file handles explicitly. You can also use the request\nobject in a with statement which will automatically close it.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.get_data", "args": ["cache=True", "as_text=False", "parse_form_data=False"], "description": "This reads the buffered incoming data from the client into one\nbytestring. By default this is cached but that behavior can be\nchanged by setting cache to False.\nUsually it\u2019s a bad idea to call this method without checking the\ncontent length first as a client could send dozens of megabytes or more\nto cause memory problems on the server.\nNote that if the form data was already parsed this method will not\nreturn anything as form data parsing does not cache the data like\nthis method does. To implicitly invoke form data parsing function\nset parse_form_data to True. When this is done the return value\nof this method will be an empty string if the form parser handles\nthe data. This generally is not necessary as if the whole data is\ncached (which is the default) the form parser will used the cached\ndata to parse the form data. Please be generally aware of checking\nthe content length first in any case before calling this method\nto avoid exhausting server memory.\nIf as_text is set to True the return value will be a decoded\nunicode string.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.get_json", "args": ["force=False", "silent=False", "cache=True", "application/json"], "description": "Parse and return the data as JSON. If the mimetype does not\nindicate JSON (application/json, see\nis_json()), this returns None unless force is\ntrue. If parsing fails, on_json_loading_failed() is called\nand its return value is used as the return value.\n\n\n\n\nParameters:\nforce \u2013 Ignore the mimetype and always try to parse JSON.\nsilent \u2013 Silence parsing errors and return None\ninstead.\ncache \u2013 Store the parsed JSON to return for subsequent\ncalls.\n\n\n\n\n\n"}, -{"name": "Request.make_form_data_parser", "args": [], "description": "Creates the form data parser. Instantiates the\nform_data_parser_class with some parameters.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Request.on_json_loading_failed", "args": ["e"], "description": "Called if get_json() parsing fails and isn\u2019t silenced. If\nthis method returns a value, it is used as the return value for\nget_json(). The default implementation raises a\nBadRequest exception.\n\nChangelog\nChanged in version 0.10: Raise a BadRequest error instead of returning an error\nmessage as JSON. If you want that behavior you can add it by\nsubclassing.\n\n\nNew in version 0.8.\n\n"}, -{"name": "Request.environ", "args": null, "description": "The underlying WSGI environment.\n"}, -{"name": "Request.path", "args": null, "description": ""}, -{"name": "Request.full_path", "args": null, "description": ""}, -{"name": "Request.script_root", "args": null, "description": ""}, -{"name": "Request.url", "args": null, "description": ""}, -{"name": "Request.base_url", "args": null, "description": ""}, -{"name": "Request.url_root", "args": null, "description": "Provides different ways to look at the current IRI. Imagine your application is\nlistening on the following application root:\nhttp://www.example.com/myapplication\n\n\nAnd a user requests the following URI:\nhttp://www.example.com/myapplication/%CF%80/page.html?x=y\n\n\nIn this case the values of the above mentioned attributes would be\nthe following:\n\n\n\n\n\n\npath\nu'/\u03c0/page.html'\n\nfull_path\nu'/\u03c0/page.html?x=y'\n\nscript_root\nu'/myapplication'\n\nbase_url\nu'http://www.example.com/myapplication/\u03c0/page.html'\n\nurl\nu'http://www.example.com/myapplication/\u03c0/page.html?x=y'\n\nurl_root\nu'http://www.example.com/myapplication/'\n\n\n\n"}, -{"name": "Request.accept_charsets", "args": null, "description": "List of charsets this client supports as\nCharsetAccept object.\n"}, -{"name": "Request.accept_encodings", "args": null, "description": "List of encodings this client accepts. Encodings in a HTTP term\nare compression encodings such as gzip. For charsets have a look at\naccept_charset.\n"}, -{"name": "Request.accept_languages", "args": null, "description": "List of languages this client accepts as\nLanguageAccept object.\n"}, -{"name": "Request.accept_mimetypes", "args": null, "description": "List of mimetypes this client supports as\nMIMEAccept object.\n"}, -{"name": "Request.access_route", "args": null, "description": "If a forwarded header exists this is a list of all ip addresses\nfrom the client ip to the last proxy server.\n"}, -{"name": "Request.args", "args": null, "description": "The parsed URL parameters (the part in the URL after the question\nmark).\nBy default an\nImmutableMultiDict\nis returned from this function. This can be changed by setting\nparameter_storage_class to a different type. This might\nbe necessary if the order of the form data is important.\n"}, -{"name": "Request.authorization", "args": null, "description": "The Authorization object in parsed form.\n"}, -{"name": "Request.base_url", "args": null, "description": "Like url but without the querystring\nSee also: trusted_hosts.\n"}, -{"name": "Request.blueprint", "args": null, "description": "The name of the current blueprint\n"}, -{"name": "Request.cache_control", "args": null, "description": "A RequestCacheControl object\nfor the incoming cache control headers.\n"}, -{"name": "Request.content_encoding", "args": null, "description": "The Content-Encoding entity-header field is used as a modifier to the\nmedia-type. When present, its value indicates what additional content\ncodings have been applied to the entity-body, and thus what decoding\nmechanisms must be applied in order to obtain the media-type\nreferenced by the Content-Type header field.\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.content_length", "args": null, "description": "The Content-Length entity-header field indicates the size of the\nentity-body in bytes or, in the case of the HEAD method, the size of\nthe entity-body that would have been sent had the request been a\nGET.\n"}, -{"name": "Request.content_md5", "args": null, "description": "\nThe Content-MD5 entity-header field, as defined in RFC 1864, is an\nMD5 digest of the entity-body for the purpose of providing an\nend-to-end message integrity check (MIC) of the entity-body. (Note:\na MIC is good for detecting accidental modification of the\nentity-body in transit, but is not proof against malicious attacks.)\n\nChangelog\nNew in version 0.9.\n\n"}, -{"name": "Request.content_type", "args": null, "description": "The Content-Type entity-header field indicates the media type of\nthe entity-body sent to the recipient or, in the case of the HEAD\nmethod, the media type that would have been sent had the request\nbeen a GET.\n"}, -{"name": "Request.cookies", "args": null, "description": "A dict with the contents of all cookies transmitted with\nthe request.\n"}, -{"name": "Request.data", "args": null, "description": "Contains the incoming request data as string in case it came with\na mimetype Werkzeug does not handle.\n"}, -{"name": "Request.date", "args": null, "description": "The Date general-header field represents the date and time at which\nthe message was originated, having the same semantics as orig-date\nin RFC 822.\n"}, -{"name": "Request.dict_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableTypeConversionDict\n"}, -{"name": "Request.endpoint", "args": null, "description": "The endpoint that matched the request. This in combination with\nview_args can be used to reconstruct the same or a\nmodified URL. If an exception happened when matching, this will\nbe None.\n"}, -{"name": "Request.files", "args": null, "description": "MultiDict object containing\nall uploaded files. Each key in files is the name from the\n. Each value in files is a\nWerkzeug FileStorage object.\nIt basically behaves like a standard file object you know from Python,\nwith the difference that it also has a\nsave() function that can\nstore the file on the filesystem.\nNote that files will only contain data if the request method was\nPOST, PUT or PATCH and the that posted to the request had\nenctype=\"multipart/form-data\". It will be empty otherwise.\nSee the MultiDict /\nFileStorage documentation for\nmore details about the used data structure.\n"}, -{"name": "Request.form", "args": null, "description": "The form parameters. By default an\nImmutableMultiDict\nis returned from this function. This can be changed by setting\nparameter_storage_class to a different type. This might\nbe necessary if the order of the form data is important.\nPlease keep in mind that file uploads will not end up here, but instead\nin the files attribute.\n\nChangelog\nChanged in version 0.9: Previous to Werkzeug 0.9 this would only contain form data for POST\nand PUT requests.\n\n"}, -{"name": "Request.form_data_parser_class", "args": null, "description": "alias of werkzeug.formparser.FormDataParser\n"}, -{"name": "Request.full_path", "args": null, "description": "Requested path as unicode, including the query string.\n"}, -{"name": "Request.headers", "args": null, "description": "The headers from the WSGI environ as immutable\nEnvironHeaders.\n"}, -{"name": "Request.host", "args": null, "description": "Just the host including the port if available.\nSee also: trusted_hosts.\n"}, -{"name": "Request.host_url", "args": null, "description": "Just the host with scheme as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.if_match", "args": null, "description": "An object containing all the etags in the If-Match header.\n\n\n\n\nReturn type:ETags\n\n\n\n"}, -{"name": "Request.if_modified_since", "args": null, "description": "The parsed If-Modified-Since header as datetime object.\n"}, -{"name": "Request.if_none_match", "args": null, "description": "An object containing all the etags in the If-None-Match header.\n\n\n\n\nReturn type:ETags\n\n\n\n"}, -{"name": "Request.if_range", "args": null, "description": "The parsed If-Range header.\n\nChangelog\nNew in version 0.7.\n\n\n\n\n\nReturn type:IfRange\n\n\n\n"}, -{"name": "Request.if_unmodified_since", "args": null, "description": "The parsed If-Unmodified-Since header as datetime object.\n"}, -{"name": "Request.is_json", "args": null, "description": "Check if the mimetype indicates JSON data, either\napplication/json or application/*+json.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Request.is_multiprocess", "args": null, "description": "boolean that is True if the application is served by\na WSGI server that spawns multiple processes.\n"}, -{"name": "Request.is_multithread", "args": null, "description": "boolean that is True if the application is served by\na multithreaded WSGI server.\n"}, -{"name": "Request.is_run_once", "args": null, "description": "boolean that is True if the application will be executed only\nonce in a process lifetime. This is the case for CGI for example,\nbut it\u2019s not guaranteed that the execution only happens one time.\n"}, -{"name": "Request.is_secure", "args": null, "description": "True if the request is secure.\n"}, -{"name": "Request.is_xhr", "args": null, "description": "True if the request was triggered via a JavaScript XMLHttpRequest.\nThis only works with libraries that support the X-Requested-With\nheader and set it to \u201cXMLHttpRequest\u201d. Libraries that do that are\nprototype, jQuery and Mochikit and probably some more.\n\nDeprecated since version 0.13: X-Requested-With is not standard and is unreliable.\n\n\nChangelog"}, -{"name": "Request.json", "args": null, "description": "This will contain the parsed JSON data if the mimetype indicates\nJSON (application/json, see is_json()), otherwise it\nwill be None.\n"}, -{"name": "Request.list_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableList\n"}, -{"name": "Request.max_content_length", "args": null, "description": "Read-only view of the MAX_CONTENT_LENGTH config key.\n"}, -{"name": "Request.max_forwards", "args": null, "description": "The Max-Forwards request-header field provides a mechanism with the\nTRACE and OPTIONS methods to limit the number of proxies or gateways\nthat can forward the request to the next inbound server.\n"}, -{"name": "Request.method", "args": null, "description": "The request method. (For example 'GET' or 'POST').\n"}, -{"name": "Request.mimetype", "args": null, "description": "Like content_type, but without parameters (eg, without\ncharset, type etc.) and always lowercase. For example if the content\ntype is text/HTML; charset=utf-8 the mimetype would be\n'text/html'.\n"}, -{"name": "Request.mimetype_params", "args": null, "description": "The mimetype parameters as dict. For example if the content\ntype is text/html; charset=utf-8 the params would be\n{'charset': 'utf-8'}.\n"}, -{"name": "Request.parameter_storage_class", "args": null, "description": "alias of werkzeug.datastructures.ImmutableMultiDict\n"}, -{"name": "Request.path", "args": null, "description": "Requested path as unicode. This works a bit like the regular path\ninfo in the WSGI environment but will always include a leading slash,\neven if the URL root is accessed.\n"}, -{"name": "Request.pragma", "args": null, "description": "The Pragma general-header field is used to include\nimplementation-specific directives that might apply to any recipient\nalong the request/response chain. All pragma directives specify\noptional behavior from the viewpoint of the protocol; however, some\nsystems MAY require that behavior be consistent with the directives.\n"}, -{"name": "Request.query_string", "args": null, "description": "The URL parameters as raw bytestring.\n"}, -{"name": "Request.range", "args": null, "description": "The parsed Range header.\n\nChangelog\nNew in version 0.7.\n\n\n\n\n\nReturn type:Range\n\n\n\n"}, -{"name": "Request.referrer", "args": null, "description": "The Referer[sic] request-header field allows the client to specify,\nfor the server\u2019s benefit, the address (URI) of the resource from which\nthe Request-URI was obtained (the \u201creferrer\u201d, although the header\nfield is misspelled).\n"}, -{"name": "Request.remote_addr", "args": null, "description": "The remote address of the client.\n"}, -{"name": "Request.remote_user", "args": null, "description": "If the server supports user authentication, and the script is\nprotected, this attribute contains the username the user has\nauthenticated as.\n"}, -{"name": "Request.routing_exception", "args": null, "description": "If matching the URL failed, this is the exception that will be\nraised / was raised as part of the request handling. This is\nusually a NotFound exception or\nsomething similar.\n"}, -{"name": "Request.scheme", "args": null, "description": "URL scheme (http or https).\n\nChangelog\nNew in version 0.7.\n\n"}, -{"name": "Request.script_root", "args": null, "description": "The root path of the script without the trailing slash.\n"}, -{"name": "Request.stream", "args": null, "description": "If the incoming form data was not encoded with a known mimetype\nthe data is stored unmodified in this stream for consumption. Most\nof the time it is a better idea to use data which will give\nyou that data as a string. The stream only returns the data once.\nUnlike input_stream this stream is properly guarded that you\ncan\u2019t accidentally read past the length of the input. Werkzeug will\ninternally always refer to this stream to read data which makes it\npossible to wrap this object with a stream that does filtering.\n\nChangelog\nChanged in version 0.9: This stream is now always available but might be consumed by the\nform parser later on. Previously the stream was only set if no\nparsing happened.\n\n"}, -{"name": "Request.url", "args": null, "description": "The reconstructed current URL as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.url_charset", "args": null, "description": "The charset that is assumed for URLs. Defaults to the value\nof charset.\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "Request.url_root", "args": null, "description": "The full URL root (with hostname), this is the application\nroot as IRI.\nSee also: trusted_hosts.\n"}, -{"name": "Request.url_rule", "args": null, "description": "The internal URL rule that matched the request. This can be\nuseful to inspect which methods are allowed for the URL from\na before/after handler (request.url_rule.methods) etc.\nThough if the request\u2019s method was invalid for the URL rule,\nthe valid list is available in routing_exception.valid_methods\ninstead (an attribute of the Werkzeug exception MethodNotAllowed)\nbecause the request was never internally bound.\n\nChangelog\nNew in version 0.6.\n\n"}, -{"name": "Request.user_agent", "args": null, "description": "The current user agent.\n"}, -{"name": "Request.values", "args": null, "description": "A werkzeug.datastructures.CombinedMultiDict that combines\nargs and form.\n"}, -{"name": "Request.view_args", "args": null, "description": "A dict of view arguments that matched the request. If an exception\nhappened when matching, this will be None.\n"}, -{"name": "Request.want_form_data_parsed", "args": null, "description": "Returns True if the request method carries content. As of\nWerkzeug 0.9 this will be the case if a content type is transmitted.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "Response", "args": ["response=None", "status=None", "headers=None", "mimetype=None", "content_type=None", "direct_passthrough=False"], "description": "The response object that is used by default in Flask. Works like the\nresponse object from Werkzeug but is set to have an HTML mimetype by\ndefault. Quite often you don\u2019t have to create this object yourself because\nmake_response() will take care of that for you.\n\nIf you want to replace the response object used you can subclass this and\nset response_class to your subclass.\n\n"}, -{"name": "Response.get_json", "args": ["force=False", "silent=False", "cache=True", "application/json"], "description": "Parse and return the data as JSON. If the mimetype does not\nindicate JSON (application/json, see\nis_json()), this returns None unless force is\ntrue. If parsing fails, on_json_loading_failed() is called\nand its return value is used as the return value.\n\n\n\n\nParameters:\nforce \u2013 Ignore the mimetype and always try to parse JSON.\nsilent \u2013 Silence parsing errors and return None\ninstead.\ncache \u2013 Store the parsed JSON to return for subsequent\ncalls.\n\n\n\n\n\n"}, -{"name": "Response.set_cookie", "args": ["key", "value=''", "max_age=None", "expires=None", "path='/'", "domain=None", "secure=False", "httponly=False", "samesite=None"], "description": "Sets a cookie. The parameters are the same as in the cookie Morsel\nobject in the Python standard library but it accepts unicode data, too.\nA warning is raised if the size of the cookie header exceeds\nmax_cookie_size, but the header will still be set.\n\n\n\n\nParameters:\nkey \u2013 the key (name) of the cookie to be set.\nvalue \u2013 the value of the cookie.\nmax_age \u2013 should be a number of seconds, or None (default) if\nthe cookie should last only as long as the client\u2019s\nbrowser session.\nexpires \u2013 should be a datetime object or UNIX timestamp.\npath \u2013 limits the cookie to a given path, per default it will\nspan the whole domain.\ndomain \u2013 if you want to set a cross-domain cookie. For example,\ndomain=\".example.com\" will set a cookie that is\nreadable by the domain www.example.com,\nfoo.example.com etc. Otherwise, a cookie will only\nbe readable by the domain that set it.\nsecure \u2013 If True, the cookie will only be available via HTTPS\nhttponly \u2013 disallow JavaScript to access the cookie. This is an\nextension to the cookie standard and probably not\nsupported by all browsers.\nsamesite \u2013 Limits the scope of the cookie such that it will only\nbe attached to requests if those requests are\n\u201csame-site\u201d.\n\n\n\n\n\n"}, -{"name": "Response.headers", "args": null, "description": "A Headers object representing the response headers.\n"}, -{"name": "Response.status", "args": null, "description": "A string with a response status.\n"}, -{"name": "Response.status_code", "args": null, "description": "The response status as integer.\n"}, -{"name": "Response.data", "args": null, "description": "A descriptor that calls get_data() and set_data(). This\nshould not be used and will eventually get deprecated.\n"}, -{"name": "Response.is_json", "args": null, "description": "Check if the mimetype indicates JSON data, either\napplication/json or application/*+json.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Response.max_cookie_size", "args": null, "description": "Read-only view of the MAX_COOKIE_SIZE config key.\nSee max_cookie_size in\nWerkzeug\u2019s docs.\n"}, -{"name": "Response.mimetype", "args": null, "description": "The mimetype (content type without charset etc.)\n"}, -{"name": "session", "args": [], "description": "The session object works pretty much like an ordinary dict, with the\ndifference that it keeps track on modifications.\n\nThis is a proxy. See Notes On Proxies for more information.\n\nThe following attributes are interesting:\n\n"}, -{"name": "session.new", "args": null, "description": "True if the session is new, False otherwise.\n"}, -{"name": "session.modified", "args": null, "description": "True if the session object detected a modification. Be advised\nthat modifications on mutable structures are not picked up\nautomatically, in that situation you have to explicitly set the\nattribute to True yourself. Here an example:\n# this change is not picked up because a mutable object (here\n# a list) is changed.\nsession['objects'].append(42)\n# so mark it as modified yourself\nsession.modified = True\n\n\n"}, -{"name": "session.permanent", "args": null, "description": "If set to True the session lives for\npermanent_session_lifetime seconds. The\ndefault is 31 days. If set to False (which is the default) the\nsession will be deleted when the user closes the browser.\n"}, -{"name": "SessionInterface", "args": [], "description": "The basic interface you have to implement in order to replace the\ndefault session interface which uses werkzeug\u2019s securecookie\nimplementation. The only methods you have to implement are\nopen_session() and save_session(), the others have\nuseful defaults which you don\u2019t need to change.\n\nThe session object returned by the open_session() method has to\nprovide a dictionary like interface plus the properties and methods\nfrom the SessionMixin. We recommend just subclassing a dict\nand adding that mixin:\n\nIf open_session() returns None Flask will call into\nmake_null_session() to create a session that acts as replacement\nif the session support cannot work because some requirement is not\nfulfilled. The default NullSession class that is created\nwill complain that the secret key was not set.\n\nTo replace the session interface on an application all you have to do\nis to assign flask.Flask.session_interface:\n\n"}, -{"name": "SessionInterface.get_cookie_domain", "args": ["app"], "description": "Returns the domain that should be set for the session cookie.\nUses SESSION_COOKIE_DOMAIN if it is configured, otherwise\nfalls back to detecting the domain based on SERVER_NAME.\nOnce detected (or if not set at all), SESSION_COOKIE_DOMAIN is\nupdated to avoid re-running the logic.\n"}, -{"name": "SessionInterface.get_cookie_httponly", "args": ["app"], "description": "Returns True if the session cookie should be httponly. This\ncurrently just returns the value of the SESSION_COOKIE_HTTPONLY\nconfig var.\n"}, -{"name": "SessionInterface.get_cookie_path", "args": ["app"], "description": "Returns the path for which the cookie should be valid. The\ndefault implementation uses the value from the SESSION_COOKIE_PATH\nconfig var if it\u2019s set, and falls back to APPLICATION_ROOT or\nuses / if it\u2019s None.\n"}, -{"name": "SessionInterface.get_cookie_samesite", "args": ["app"], "description": "Return 'Strict' or 'Lax' if the cookie should use the\nSameSite attribute. This currently just returns the value of\nthe SESSION_COOKIE_SAMESITE setting.\n"}, -{"name": "SessionInterface.get_cookie_secure", "args": ["app"], "description": "Returns True if the cookie should be secure. This currently\njust returns the value of the SESSION_COOKIE_SECURE setting.\n"}, -{"name": "SessionInterface.get_expiration_time", "args": ["app", "session"], "description": "A helper method that returns an expiration date for the session\nor None if the session is linked to the browser session. The\ndefault implementation returns now + the permanent session\nlifetime configured on the application.\n"}, -{"name": "SessionInterface.is_null_session", "args": ["obj"], "description": "Checks if a given object is a null session. Null sessions are\nnot asked to be saved.\nThis checks if the object is an instance of null_session_class\nby default.\n"}, -{"name": "SessionInterface.make_null_session", "args": ["app"], "description": "Creates a null session which acts as a replacement object if the\nreal session support could not be loaded due to a configuration\nerror. This mainly aids the user experience because the job of the\nnull session is to still support lookup without complaining but\nmodifications are answered with a helpful error message of what\nfailed.\nThis creates an instance of null_session_class by default.\n"}, -{"name": "SessionInterface.open_session", "args": ["app", "request"], "description": "This method has to be implemented and must either return None\nin case the loading failed because of a configuration error or an\ninstance of a session object which implements a dictionary like\ninterface + the methods and attributes on SessionMixin.\n"}, -{"name": "SessionInterface.save_session", "args": ["app", "session", "response"], "description": "This is called for actual sessions returned by open_session()\nat the end of the request. This is still called during a request\ncontext so if you absolutely need access to the request you can do\nthat.\n"}, -{"name": "SessionInterface.should_set_cookie", "args": ["app", "session"], "description": "Used by session backends to determine if a Set-Cookie header\nshould be set for this session cookie for this response. If the session\nhas been modified, the cookie is set. If the session is permanent and\nthe SESSION_REFRESH_EACH_REQUEST config is true, the cookie is\nalways set.\nThis check is usually skipped if the session was deleted.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "SessionInterface.null_session_class", "args": null, "description": "make_null_session() will look here for the class that should\nbe created when a null session is requested. Likewise the\nis_null_session() method will perform a typecheck against\nthis type.\nalias of NullSession\n"}, -{"name": "SessionInterface.pickle_based", "args": null, "description": "A flag that indicates if the session interface is pickle based.\nThis can be used by Flask extensions to make a decision in regards\nto how to deal with the session object.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "SecureCookieSessionInterface", "args": [], "description": "The default session interface that stores sessions in signed cookies\nthrough the itsdangerous module.\n\n"}, -{"name": "SecureCookieSessionInterface.open_session", "args": ["app", "request"], "description": "This method has to be implemented and must either return None\nin case the loading failed because of a configuration error or an\ninstance of a session object which implements a dictionary like\ninterface + the methods and attributes on SessionMixin.\n"}, -{"name": "SecureCookieSessionInterface.save_session", "args": ["app", "session", "response"], "description": "This is called for actual sessions returned by open_session()\nat the end of the request. This is still called during a request\ncontext so if you absolutely need access to the request you can do\nthat.\n"}, -{"name": "SecureCookieSessionInterface.key_derivation", "args": null, "description": "the name of the itsdangerous supported key derivation. The default\nis hmac.\n"}, -{"name": "SecureCookieSessionInterface.salt", "args": null, "description": "the salt that should be applied on top of the secret key for the\nsigning of cookie based sessions.\n"}, -{"name": "SecureCookieSessionInterface.serializer", "args": null, "description": "A python serializer for the payload. The default is a compact\nJSON derived serializer with support for some extra Python types\nsuch as datetime objects or tuples.\n"}, -{"name": "SecureCookieSessionInterface.session_class", "args": null, "description": "alias of SecureCookieSession\n"}, -{"name": "SecureCookieSession", "args": ["initial=None"], "description": "Base class for sessions based on signed cookies.\n\nThis session backend will set the modified and\naccessed attributes. It cannot reliably track whether a\nsession is new (vs. empty), so new remains hard coded to\nFalse.\n\n"}, -{"name": "SecureCookieSession.get", "args": ["k", "d"], "description": ""}, -{"name": "SecureCookieSession.setdefault", "args": ["k", "d"], "description": ""}, -{"name": "SecureCookieSession.accessed", "args": null, "description": "header, which allows caching proxies to cache different pages for\ndifferent users.\n"}, -{"name": "SecureCookieSession.modified", "args": null, "description": "When data is changed, this is set to True. Only the session\ndictionary itself is tracked; if the session contains mutable\ndata (for example a nested dict) then this must be set to\nTrue manually when modifying that data. The session cookie\nwill only be written to the response if this is True.\n"}, -{"name": "NullSession", "args": ["initial=None"], "description": "Class used to generate nicer error messages if sessions are not\navailable. Will still allow read-only access to the empty session\nbut fail on setting.\n\n"}, -{"name": "SessionMixin", "args": [], "description": "Expands a basic dictionary with session attributes.\n\n"}, -{"name": "SessionMixin.accessed", "args": null, "description": "Some implementations can detect when session data is read or\nwritten and set this when that happens. The mixin default is hard\ncoded to True.\n"}, -{"name": "SessionMixin.modified", "args": null, "description": "Some implementations can detect changes to the session and set\nthis when that happens. The mixin default is hard coded to\nTrue.\n"}, -{"name": "SessionMixin.permanent", "args": null, "description": "This reflects the '_permanent' key in the dict.\n"}, -{"name": "FlaskClient", "args": ["*args", "**kwargs"], "description": "Works like a regular Werkzeug test client but has some knowledge about\nhow Flask works to defer the cleanup of the request context stack to the\nend of a with body when used in a with statement. For general\ninformation about how to use this class refer to\nwerkzeug.test.Client.\n\nBasic usage is outlined in the Testing Flask Applications chapter.\n\n"}, -{"name": "FlaskClient.open", "args": ["*args", "**kwargs"], "description": "Takes the same arguments as the EnvironBuilder class with\nsome additions: You can provide a EnvironBuilder or a WSGI\nenvironment as only argument instead of the EnvironBuilder\narguments and two optional keyword arguments (as_tuple, buffered)\nthat change the type of the return value or the way the application is\nexecuted.\n\nChangelog\nChanged in version 0.5: If a dict is provided as file in the dict for the data parameter\nthe content type has to be called content_type now instead of\nmimetype. This change was made for consistency with\nwerkzeug.FileWrapper.\n\nThe follow_redirects parameter was added to open().\n\nAdditional parameters:\n\n\n\n\nParameters:\nas_tuple \u2013 Returns a tuple in the form (environ, result)\nbuffered \u2013 Set this to True to buffer the application run.\nThis will automatically close the application for\nyou as well.\nfollow_redirects \u2013 Set this to True if the Client should\nfollow HTTP redirects.\n\n\n\n\n\n"}, -{"name": "FlaskClient.session_transaction", "args": ["*args", "**kwargs"], "description": "When used in combination with a with statement this opens a\nsession transaction. This can be used to modify the session that\nthe test client uses. Once the with block is left the session is\nstored back.\nwith client.session_transaction() as session:\n session['value'] = 42\n\n\nInternally this is implemented by going through a temporary test\nrequest context and since session handling could depend on\nrequest variables this function accepts the same arguments as\ntest_request_context() which are directly\npassed through.\n"}, -{"name": "FlaskCliRunner", "args": ["app", "**kwargs"], "description": "A CliRunner for testing a Flask app\u2019s\nCLI commands. Typically created using\ntest_cli_runner(). See Testing CLI Commands.\n\n"}, -{"name": "FlaskCliRunner.invoke", "args": ["cli=None", "args=None", "**kwargs"], "description": "Invokes a CLI command in an isolated environment. See\nCliRunner.invoke for\nfull method documentation. See Testing CLI Commands for examples.\nIf the obj argument is not given, passes an instance of\nScriptInfo that knows how to load the Flask\napp being tested.\n\n\n\n\nParameters:\ncli \u2013 Command object to invoke. Default is the app\u2019s\ncli group.\nargs \u2013 List of strings to invoke the command with.\n\n\n\nReturns:a Result object.\n\n\n\n\n"}, -{"name": "_AppCtxGlobals", "args": [], "description": "A plain object. Used as a namespace for storing data during an\napplication context.\n\nCreating an app context automatically creates this object, which is\nmade available as the g proxy.\n\n"}, -{"name": "_AppCtxGlobals.get", "args": ["name", "default=None"], "description": "Get an attribute by name, or a default value. Like\ndict.get().\n\n\n\n\nParameters:\nname \u2013 Name of attribute to get.\ndefault \u2013 Value to return if the attribute is not present.\n\n\n\n\n\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "_AppCtxGlobals.pop", "args": ["name", "default=<object object>"], "description": "Get and remove an attribute by name. Like dict.pop().\n\n\n\n\nParameters:\nname \u2013 Name of attribute to pop.\ndefault \u2013 Value to return if the attribute is not present,\ninstead of raise a KeyError.\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "_AppCtxGlobals.setdefault", "args": ["name", "default=None"], "description": "Get the value of an attribute if it is present, otherwise\nset and return a default value. Like dict.setdefault().\n\n\n\n\nParameters:name \u2013 Name of attribute to get.\n\nParam:default: Value to set and return if the attribute is not\npresent.\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Markup", "args": [], "description": "Marks a string as being safe for inclusion in HTML/XML output without\nneeding to be escaped. This implements the __html__ interface a couple\nof frameworks and web applications use. Markup is a direct\nsubclass of unicode and provides all the methods of unicode just that\nit escapes arguments passed and always returns Markup.\n\nThe escape function returns markup objects so that double escaping can\u2019t\nhappen.\n\nThe constructor of the Markup class can be used for three\ndifferent things: When passed an unicode object it\u2019s assumed to be safe,\nwhen passed an object with an HTML representation (has an __html__\nmethod) that representation is used, otherwise the object passed is\nconverted into a unicode string and then assumed to be safe:\n\nIf you want object passed being always treated as unsafe you can use the\nescape() classmethod to create a Markup object:\n\nOperations on a markup string are markup aware which means that all\narguments are passed through the escape() function:\n\n"}, -{"name": "Markup.striptags", "args": [], "description": "Unescape markup into an text_type string and strip all tags. This\nalso resolves known HTML4 and XHTML entities. Whitespace is\nnormalized to one:\n>>> Markup(\"Main » About\").striptags()\nu'Main \\xbb About'\n\n\n"}, -{"name": "Markup.unescape", "args": [], "description": "Unescape markup again into an text_type string. This also resolves\nknown HTML4 and XHTML entities:\n>>> Markup(\"Main » About\").unescape()\nu'Main \\xbb About'\n\n\n"}, -{"name": "JSONEncoder", "args": ["*", "skipkeys=False", "ensure_ascii=True", "check_circular=True", "allow_nan=True", "sort_keys=False", "indent=None", "separators=None", "default=None"], "description": "The default Flask JSON encoder. This one extends the default simplejson\nencoder by also supporting datetime objects, UUID as well as\nMarkup objects which are serialized as RFC 822 datetime strings (same\nas the HTTP date format). In order to support more data types override the\ndefault() method.\n\n"}, -{"name": "JSONEncoder.default", "args": ["o"], "description": "Implement this method in a subclass such that it returns a\nserializable object for o, or calls the base implementation (to\nraise a TypeError).\nFor example, to support arbitrary iterators, you could implement\ndefault like this:\ndef default(self, o):\n try:\n iterable = iter(o)\n except TypeError:\n pass\n else:\n return list(iterable)\n return JSONEncoder.default(self, o)\n\n\n"}, -{"name": "JSONDecoder", "args": ["*", "object_hook=None", "parse_float=None", "parse_int=None", "parse_constant=None", "strict=True", "object_pairs_hook=None"], "description": "The default JSON decoder. This one does not change the behavior from\nthe default simplejson decoder. Consult the json documentation\nfor more information. This decoder is not only used for the load\nfunctions of this module but also Request.\n\n"}, -{"name": "TaggedJSONSerializer", "args": [], "description": "Serializer that uses a tag system to compactly represent objects that\nare not JSON types. Passed as the intermediate serializer to\nitsdangerous.Serializer.\n\nThe following extra types are supported:\n\n"}, -{"name": "TaggedJSONSerializer.dumps", "args": ["value"], "description": "Tag the value and dump it to a compact JSON string.\n"}, -{"name": "TaggedJSONSerializer.loads", "args": ["value"], "description": "Load data from a JSON string and deserialized any tagged objects.\n"}, -{"name": "TaggedJSONSerializer.register", "args": ["tag_class", "force=False", "index=None"], "description": "Register a new tag with this serializer.\n\n\n\n\nParameters:\ntag_class \u2013 tag class to register. Will be instantiated with this\nserializer instance.\nforce \u2013 overwrite an existing tag. If false (default), a\nKeyError is raised.\nindex \u2013 index to insert the new tag in the tag order. Useful when\nthe new tag is a special case of an existing tag. If None\n(default), the tag is appended to the end of the order.\n\n\n\nRaises:KeyError \u2013 if the tag key is already registered and force is\nnot true.\n\n\n\n\n"}, -{"name": "TaggedJSONSerializer.tag", "args": ["value"], "description": "Convert a value to a tagged representation if necessary.\n"}, -{"name": "TaggedJSONSerializer.untag", "args": ["value"], "description": "Convert a tagged representation back to the original type.\n"}, -{"name": "TaggedJSONSerializer.default_tags", "args": null, "description": "Tag classes to bind when creating the serializer. Other tags can be\nadded later using register().\n"}, -{"name": "JSONTag", "args": ["serializer"], "description": "Base class for defining type tags for TaggedJSONSerializer.\n\n"}, -{"name": "JSONTag.check", "args": ["value"], "description": "Check if the given value should be tagged by this tag.\n"}, -{"name": "JSONTag.tag", "args": ["value"], "description": "Convert the value to a valid JSON type and add the tag structure\naround it.\n"}, -{"name": "JSONTag.to_json", "args": ["value"], "description": "Convert the Python object to an object that is a valid JSON type.\nThe tag will be added later.\n"}, -{"name": "JSONTag.to_python", "args": ["value"], "description": "Convert the JSON representation back to the correct type. The tag\nwill already be removed.\n"}, -{"name": "JSONTag.key", "args": null, "description": "The tag to mark the serialized object with. If None, this tag is\nonly used as an intermediate step during tagging.\n"}, -{"name": "Config", "args": ["root_path", "defaults=None"], "description": "Works exactly like a dict but provides ways to fill it from files\nor special dictionaries. There are two common patterns to populate the\nconfig.\n\nEither you can fill the config from a config file:\n\nOr alternatively you can define the configuration options in the\nmodule that calls from_object() or provide an import path to\na module that should be loaded. It is also possible to tell it to\nuse the same module and with that provide the configuration values\njust before the call:\n\nIn both cases (loading from any Python file or loading from modules),\nonly uppercase keys are added to the config. This makes it possible to use\nlowercase values in the config file for temporary values that are not added\nto the config or to define the config keys in the same file that implements\nthe application.\n\nProbably the most interesting way to load configurations is from an\nenvironment variable pointing to a file:\n\nIn this case before launching the application you have to set this\nenvironment variable to the file you want to use. On Linux and OS X\nuse the export statement:\n\nOn windows use set instead.\n\n\nParameters:\nroot_path \u2013 path to which files are read relative from. When the\nconfig object is created by the application, this is\nthe application\u2019s root_path.\ndefaults \u2013 an optional dictionary of default values"}, -{"name": "Config.from_envvar", "args": ["variable_name", "silent=False"], "description": "Loads a configuration from an environment variable pointing to\na configuration file. This is basically just a shortcut with nicer\nerror messages for this line of code:\napp.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])\n\n\n\n\n\n\nParameters:\nvariable_name \u2013 name of the environment variable\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\nReturns:bool. True if able to load config, False otherwise.\n\n\n\n\n"}, -{"name": "Config.from_json", "args": ["filename", "silent=False"], "description": "Updates the values in the config from a JSON file. This function\nbehaves as if the JSON object was a dictionary and passed to the\nfrom_mapping() function.\n\n\n\n\nParameters:\nfilename \u2013 the filename of the JSON file. This can either be an\nabsolute filename or a filename relative to the\nroot path.\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Config.from_mapping", "args": ["*mapping", "**kwargs"], "description": "Updates the config like update() ignoring items with non-upper\nkeys.\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "Config.from_object", "args": ["obj"], "description": "Updates the values from the given object. An object can be of one\nof the following two types:\n\na string: in this case the object with that name will be imported\nan actual object reference: that object is used directly\n\nObjects are usually either modules or classes. from_object()\nloads only the uppercase attributes of the module/class. A dict\nobject will not work with from_object() because the keys of a\ndict are not attributes of the dict class.\nExample of module-based configuration:\napp.config.from_object('yourapplication.default_config')\nfrom yourapplication import default_config\napp.config.from_object(default_config)\n\n\nYou should not use this function to load the actual configuration but\nrather configuration defaults. The actual config should be loaded\nwith from_pyfile() and ideally from a location not within the\npackage because the package might be installed system wide.\nSee Development / Production for an example of class-based configuration\nusing from_object().\n\n\n\n\nParameters:obj \u2013 an import name or object\n\n\n\n"}, -{"name": "Config.from_pyfile", "args": ["filename", "silent=False"], "description": "Updates the values in the config from a Python file. This function\nbehaves as if the file was imported as module with the\nfrom_object() function.\n\n\n\n\nParameters:\nfilename \u2013 the filename of the config. This can either be an\nabsolute filename or a filename relative to the\nroot path.\nsilent \u2013 set to True if you want silent failure for missing\nfiles.\n\n\n\n\n\n\nChangelog\nNew in version 0.7: silent parameter.\n\n"}, -{"name": "Config.get_namespace", "args": ["namespace", "lowercase=True", "trim_namespace=True"], "description": "Returns a dictionary containing a subset of configuration options\nthat match the specified namespace/prefix. Example usage:\napp.config['IMAGE_STORE_TYPE'] = 'fs'\napp.config['IMAGE_STORE_PATH'] = '/var/app/images'\napp.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com'\nimage_store_config = app.config.get_namespace('IMAGE_STORE_')\n\n\nThe resulting dictionary image_store_config would look like:\n{\n 'type': 'fs',\n 'path': '/var/app/images',\n 'base_url': 'http://img.website.com'\n}\n\n\nThis is often useful when configuration options map directly to\nkeyword arguments in functions or class constructors.\n\n\n\n\nParameters:\nnamespace \u2013 a configuration namespace\nlowercase \u2013 a flag indicating if the keys of the resulting\ndictionary should be lowercase\ntrim_namespace \u2013 a flag indicating if the keys of the resulting\ndictionary should not include the namespace\n\n\n\n\n\n\nChangelog\nNew in version 0.11.\n\n"}, -{"name": "RequestContext", "args": ["app", "environ", "request=None"], "description": "The request context contains all request relevant information. It is\ncreated at the beginning of the request and pushed to the\n_request_ctx_stack and removed at the end of it. It will create the\nURL adapter and request object for the WSGI environment provided.\n\nDo not attempt to use this class directly, instead use\ntest_request_context() and\nrequest_context() to create this object.\n\nWhen the request context is popped, it will evaluate all the\nfunctions registered on the application for teardown execution\n(teardown_request()).\n\nThe request context is automatically popped at the end of the request\nfor you. In debug mode the request context is kept around if\nexceptions happen so that interactive debuggers have a chance to\nintrospect the data. With 0.4 this can also be forced for requests\nthat did not fail and outside of DEBUG mode. By setting\n'flask._preserve_context' to True on the WSGI environment the\ncontext will not pop itself at the end of the request. This is used by\nthe test_client() for example to implement the\ndeferred cleanup functionality.\n\nYou might find this helpful for unittests where you need the\ninformation from the context local around for a little longer. Make\nsure to properly pop() the stack yourself in\nthat situation, otherwise your unittests will leak memory.\n\n"}, -{"name": "RequestContext.copy", "args": [], "description": "Creates a copy of this request context with the same request object.\nThis can be used to move a request context to a different greenlet.\nBecause the actual request object is the same this cannot be used to\nmove a request context to a different thread unless access to the\nrequest object is locked.\n\nChangelog\nNew in version 0.10.\n\n"}, -{"name": "RequestContext.match_request", "args": [], "description": "Can be overridden by a subclass to hook into the matching\nof the request.\n"}, -{"name": "RequestContext.pop", "args": ["exc=<object object>"], "description": "Pops the request context and unbinds it by doing that. This will\nalso trigger the execution of functions registered by the\nteardown_request() decorator.\n\nChangelog\nChanged in version 0.9: Added the exc argument.\n\n"}, -{"name": "RequestContext.push", "args": [], "description": "Binds the request context to the current context.\n"}, -{"name": "AppContext", "args": ["app"], "description": "The application context binds an application object implicitly\nto the current thread or greenlet, similar to how the\nRequestContext binds request information. The application\ncontext is also implicitly created if a request context is created\nbut the application is not on top of the individual application\ncontext.\n\n"}, -{"name": "AppContext.pop", "args": ["exc=<object object>"], "description": "Pops the app context.\n"}, -{"name": "AppContext.push", "args": [], "description": "Binds the app context to the current context.\n"}, -{"name": "BlueprintSetupState", "args": ["blueprint", "app", "options", "first_registration"], "description": "Temporary holder object for registering a blueprint with the\napplication. An instance of this class is created by the\nmake_setup_state() method and later passed\nto all register callback functions.\n\n"}, -{"name": "BlueprintSetupState.add_url_rule", "args": ["rule", "endpoint=None", "view_func=None", "**options"], "description": "A helper method to register a rule (and optionally a view function)\nto the application. The endpoint is automatically prefixed with the\nblueprint\u2019s name.\n"}, -{"name": "BlueprintSetupState.app", "args": null, "description": "a reference to the current application\n"}, -{"name": "BlueprintSetupState.blueprint", "args": null, "description": "a reference to the blueprint that created this setup state.\n"}, -{"name": "BlueprintSetupState.first_registration", "args": null, "description": "as blueprints can be registered multiple times with the\napplication and not everything wants to be registered\nmultiple times on it, this attribute can be used to figure\nout if the blueprint was registered in the past already.\n"}, -{"name": "BlueprintSetupState.options", "args": null, "description": "a dictionary with all options that were passed to the\nregister_blueprint() method.\n"}, -{"name": "BlueprintSetupState.subdomain", "args": null, "description": "The subdomain that the blueprint should be active for, None\notherwise.\n"}, -{"name": "BlueprintSetupState.url_defaults", "args": null, "description": "A dictionary with URL defaults that is added to each and every\nURL that was defined with the blueprint.\n"}, -{"name": "BlueprintSetupState.url_prefix", "args": null, "description": "The prefix that should be used for all URLs defined on the\nblueprint.\n"}, -{"name": "Namespace", "args": [], "description": "An alias for blinker.base.Namespace if blinker is available,\notherwise a dummy class that creates fake signals. This class is\navailable for Flask extensions that want to provide the same fallback\nsystem as Flask itself.\n\n"}, -{"name": "Namespace.signal", "args": ["name", "doc=None"], "description": "Creates a new signal for this namespace if blinker is available,\notherwise returns a fake signal that has a send method that will\ndo nothing but will fail with a RuntimeError for all other\noperations, including connecting.\n"}, -{"name": "View", "args": [], "description": "Alternative way to use view functions. A subclass has to implement\ndispatch_request() which is called with the view arguments from\nthe URL routing system. If methods is provided the methods\ndo not have to be passed to the add_url_rule()\nmethod explicitly:\n\nWhen you want to decorate a pluggable view you will have to either do that\nwhen the view function is created (by wrapping the return value of\nas_view()) or you can use the decorators attribute:\n\nThe decorators stored in the decorators list are applied one after another\nwhen the view function is created. Note that you can not use the class\nbased decorators since those would decorate the view class and not the\ngenerated view function!\n\n"}, -{"name": "View.dispatch_request", "args": [], "description": "Subclasses have to override this method to implement the\nactual view function code. This method is called with all\nthe arguments from the URL rule.\n"}, -{"name": "View.decorators", "args": null, "description": "The canonical way to decorate class-based views is to decorate the\nreturn value of as_view(). However since this moves parts of the\nlogic from the class declaration to the place where it\u2019s hooked\ninto the routing system.\nYou can place one or more decorators in this list and whenever the\nview function is created the result is automatically decorated.\n\nChangelog\nNew in version 0.8.\n\n"}, -{"name": "View.methods", "args": null, "description": "A list of methods this view can handle.\n"}, -{"name": "View.provide_automatic_options", "args": null, "description": "Setting this disables or force-enables the automatic options handling.\n"}, -{"name": "MethodView", "args": [], "description": "A class-based view that dispatches request methods to the corresponding\nclass methods. For example, if you implement a get method, it will be\nused to handle GET requests.\n\n"}, -{"name": "MethodView.dispatch_request", "args": ["*args", "**kwargs"], "description": "Subclasses have to override this method to implement the\nactual view function code. This method is called with all\nthe arguments from the URL rule.\n"}, -{"name": "FlaskGroup", "args": ["add_default_commands=True", "create_app=None", "add_version_option=True", "load_dotenv=True", "**extra"], "description": "Special subclass of the AppGroup group that supports\nloading more commands from the configured Flask app. Normally a\ndeveloper does not have to interface with this class but there are\nsome very advanced use cases for which it makes sense to create an\ninstance of this.\n\nFor information as of why this is useful see Custom Scripts.\n\n\nParameters:\nadd_default_commands \u2013 if this is True then the default run and\nshell commands wil be added.\nadd_version_option \u2013 adds the --version option.\ncreate_app \u2013 an optional callback that is passed the script info and\nreturns the loaded app.\nload_dotenv \u2013 Load the nearest .env and .flaskenv\nfiles to set environment variables. Will also change the working\ndirectory to the directory containing the first file found."}, -{"name": "FlaskGroup.get_command", "args": ["ctx", "name"], "description": "Given a context and a command name, this returns a\nCommand object if it exists or returns None.\n"}, -{"name": "FlaskGroup.list_commands", "args": ["ctx"], "description": "Returns a list of subcommand names in the order they should\nappear.\n"}, -{"name": "FlaskGroup.main", "args": ["*args", "**kwargs"], "description": "This is the way to invoke a script with all the bells and\nwhistles as a command line application. This will always terminate\nthe application after a call. If this is not wanted, SystemExit\nneeds to be caught.\nThis method is also available by directly calling the instance of\na Command.\n\nNew in version 3.0: Added the standalone_mode flag to control the standalone mode.\n\n\nChangelog\n\n\n\nParameters:\nargs \u2013 the arguments that should be used for parsing. If not\nprovided, sys.argv[1:] is used.\nprog_name \u2013 the program name that should be used. By default\nthe program name is constructed by taking the file\nname from sys.argv[0].\ncomplete_var \u2013 the environment variable that controls the\nbash completion support. The default is\n\"__COMPLETE\" with prog name in\nuppercase.\nstandalone_mode \u2013 the default behavior is to invoke the script\nin standalone mode. Click will then\nhandle exceptions and convert them into\nerror messages and the function will never\nreturn but shut down the interpreter. If\nthis is set to False they will be\npropagated to the caller and the return\nvalue of this function is the return value\nof invoke().\nextra \u2013 extra keyword arguments are forwarded to the context\nconstructor. See Context for more information.\n\n\n\n\n\n"}, -{"name": "AppGroup", "args": ["name=None", "commands=None", "**attrs"], "description": "This works similar to a regular click Group but it\nchanges the behavior of the command() decorator so that it\nautomatically wraps the functions in with_appcontext().\n\nNot to be confused with FlaskGroup.\n\n"}, -{"name": "AppGroup.command", "args": ["*args", "**kwargs"], "description": "This works exactly like the method of the same name on a regular\nclick.Group but it wraps callbacks in with_appcontext()\nunless it\u2019s disabled by passing with_appcontext=False.\n"}, -{"name": "AppGroup.group", "args": ["*args", "**kwargs"], "description": "This works exactly like the method of the same name on a regular\nclick.Group but it defaults the group class to\nAppGroup.\n"}, -{"name": "ScriptInfo", "args": ["app_import_path=None", "create_app=None"], "description": "Help object to deal with Flask applications. This is usually not\nnecessary to interface with as it\u2019s used internally in the dispatching\nto click. In future versions of Flask this object will most likely play\na bigger role. Typically it\u2019s created automatically by the\nFlaskGroup but you can also manually create it and pass it\nonwards as click object.\n\n"}, -{"name": "ScriptInfo.load_app", "args": [], "description": "Loads the Flask app (if not yet loaded) and returns it. Calling\nthis multiple times will just result in the already loaded app to\nbe returned.\n"}, -{"name": "ScriptInfo.app_import_path", "args": null, "description": "Optionally the import path for the Flask application.\n"}, -{"name": "ScriptInfo.create_app", "args": null, "description": "Optionally a function that is passed the script info to create\nthe instance of the application.\n"}, -{"name": "ScriptInfo.data", "args": null, "description": "A dictionary with arbitrary data that can be associated with\nthis script info.\n"} -] diff --git a/utils/flask_api.py b/utils/flask_api.py deleted file mode 100644 index abfa8f18b..000000000 --- a/utils/flask_api.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -Generate the Flask API data used for Mu's autocomplete/calltips. - -Requires the `beautifulsoup4` and `requests` packages (the `utils` extra). - -Usage: - - python flask_api.py [output.json] - -Fetches the Flask API reference and writes a JSON list of API entries -(default: flask.json). -""" - -import json -import sys - -import requests -from bs4 import BeautifulSoup - - -# The `en/stable/` alias always tracks the current stable Flask release, so -# this keeps working across Flask versions without a hard-coded version path. -URL = "https://flask.palletsprojects.com/en/stable/api/" - - -def to_dict(name, args, description): - """ - Returns a dictionary representation of the API element if valid, else - returns None. - """ - if name.endswith("__"): - return None - return {"name": name, "args": args, "description": description} - - -def descname(spec): - """Returns the bare API name from a dt signature (its ``descname`` span).""" - name = spec.select_one("span.descname") - return name.get_text() if name else "" - - -def sig_params(spec): - """Returns the list of parameter strings from a dt signature.""" - return [em.get_text() for em in spec.select("em.sig-param")] - - -def parse(soup): - """ - Yields the API elements scraped from a parsed Flask API documentation page. - - Targets the modern Sphinx markup (``dl.py.function``, ``span.descname``, - ``em.sig-param``) used by the current Flask docs. - """ - # Find all the function definitions on the page: - for func in soup.select("dl.py.function"): - # Spec and doc are always the first dt/dd in the dl. - func_spec = func.select_one("dt") - func_doc = func.select_one("dd") - d = to_dict(descname(func_spec), sig_params(func_spec), func_doc.get_text()) - if d: - yield d - # Find all the class definitions on the page: - for classes in soup.select("dl.py.class"): - class_spec = classes.select_one("dt") - class_doc = classes.select_one("dd") - class_name = descname(class_spec) - # Class description: the leading paragraphs, up to the first nested - # definition list (members) or field list (params/returns). - description = "" - for child in class_doc.contents: - name = getattr(child, "name", None) - if name == "p": - description += child.get_text() + "\n\n" - if name in ("dl", "table"): - break - d = to_dict(class_name, sig_params(class_spec), description) - if d: - yield d - # Members: methods, then attributes / properties / data. - for method in classes.select("dl.py.method"): - method_name = descname(method.select_one("dt")) - if method_name.startswith("__"): - continue - method_name = class_name + "." + method_name - method_args = sig_params(method.select_one("dt")) - d = to_dict(method_name, method_args, method.select_one("dd").get_text()) - if d: - yield d - for member in classes.select("dl.py.attribute, dl.py.property, dl.py.data"): - name = class_name + "." + descname(member.select_one("dt")) - d = to_dict(name, None, member.select_one("dd").get_text()) - if d: - yield d - - -def main(output="flask.json"): - response = requests.get(URL) - response.raise_for_status() - soup = BeautifulSoup(response.text, "html.parser") - entries = list(parse(soup)) - with open(output, "w", encoding="utf-8") as f: - json.dump(entries, f, indent=2) - - -if __name__ == "__main__": - main(*sys.argv[1:]) diff --git a/utils/gh_downloads.py b/utils/gh_downloads.py index 609958cad..2f016fa99 100644 --- a/utils/gh_downloads.py +++ b/utils/gh_downloads.py @@ -1,14 +1,14 @@ #!/usr/bin/env python3 """ Retrieves the GH releases stats from their open API and counts the total number -of asset downloads, which so far are all Mu installers. +of asset downloads, which so far are all Nu installers. """ import datetime import requests -releases = requests.get("https://api.github.com/repos/mu-editor/mu/releases").json() +releases = requests.get("https://api.github.com/repos/kovirlabs/nu/releases").json() # First generate date objects for each release and add them to their dictionary for release in releases: diff --git a/uv.lock b/uv.lock index 46218800a..708498b02 100644 --- a/uv.lock +++ b/uv.lock @@ -1327,7 +1327,6 @@ dependencies = [ { name = "jupyter-client" }, { name = "nu-circuitpython" }, { name = "nu-pygamezero" }, - { name = "nudatus" }, { name = "packaging" }, { name = "platformdirs" }, { name = "pyqt6" }, @@ -1336,7 +1335,6 @@ dependencies = [ { name = "pyserial" }, { name = "pyzmq" }, { name = "qtconsole" }, - { name = "semver" }, { name = "tornado" }, { name = "uv" }, { name = "wheel" }, @@ -1438,7 +1436,6 @@ requires-dist = [ { name = "nu-circuitpython", editable = "plugins/circuitpython" }, { name = "nu-microbit", marker = "extra == 'microbit'", editable = "plugins/microbit" }, { name = "nu-pygamezero", editable = "plugins/pygamezero" }, - { name = "nudatus", specifier = ">=0.0.3" }, { name = "packaging", specifier = ">=22" }, { name = "platformdirs", specifier = ">=2.6" }, { name = "pyqt6", specifier = ">=6.6" }, @@ -1467,7 +1464,6 @@ requires-dist = [ { name = "ruff", marker = "extra == 'all'", specifier = ">=0.6" }, { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.6" }, { name = "ruff", marker = "extra == 'lint'", specifier = ">=0.6" }, - { name = "semver", specifier = ">=2.8.0" }, { name = "tornado", specifier = ">=6.5.9" }, { name = "twine", marker = "extra == 'all'", specifier = ">=7" }, { name = "twine", marker = "extra == 'dev'", specifier = ">=7" }, @@ -1517,15 +1513,6 @@ requires-dist = [ ] provides-extras = ["learner-env"] -[[package]] -name = "nudatus" -version = "0.0.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/23/4d/cf8a2c68ef1f6653e3fb677e35e2fb3c549092853780a0cf6014beb83ec9/nudatus-0.0.5.tar.gz", hash = "sha256:ba84a8e022cb4af0f995176383f5ff9fa83d57ded3cedc6aa4db1687f88cacec", size = 4810, upload-time = "2021-02-03T00:42:54.947Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/30/014b1a127a66c93a7fbf18992aff1fd3478fd6385a68c4055e67b8c2b8b0/nudatus-0.0.5-py3-none-any.whl", hash = "sha256:00284890d3b09aa90297eadcf9142504e13efc6e0ac5e5e8e8eb1947545296d1", size = 5300, upload-time = "2021-02-03T00:42:53.39Z" }, -] - [[package]] name = "numpy" version = "2.4.6" @@ -2423,15 +2410,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, ] -[[package]] -name = "semver" -version = "3.0.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/d1/d3159231aec234a59dd7d601e9dd9fe96f3afff15efd33c1070019b26132/semver-3.0.4.tar.gz", hash = "sha256:afc7d8c584a5ed0a11033af086e8af226a9c0b206f313e0301f8dd7b6b589602", size = 269730, upload-time = "2025-01-24T13:19:27.617Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl", hash = "sha256:9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746", size = 17912, upload-time = "2025-01-24T13:19:24.949Z" }, -] - [[package]] name = "setuptools" version = "84.1.0"