From c2eebd3c74a18a41beb0198c01668d68d84ea72b Mon Sep 17 00:00:00 2001 From: Allison Weins <3174849+2percentsilk@users.noreply.github.com> Date: Thu, 6 May 2021 19:33:41 +0000 Subject: [PATCH] Edits to devcontainer.json steps --- .../help/codespaces/python-extentions.png | Bin 0 -> 28514 bytes .../codespaces/python-port-forwarding.png | Bin 0 -> 7970 bytes ...-with-your-python-project-in-codespaces.md | 38 +++++++++++------- 3 files changed, 23 insertions(+), 15 deletions(-) create mode 100644 assets/images/help/codespaces/python-extentions.png create mode 100644 assets/images/help/codespaces/python-port-forwarding.png diff --git a/assets/images/help/codespaces/python-extentions.png b/assets/images/help/codespaces/python-extentions.png new file mode 100644 index 0000000000000000000000000000000000000000..aba349ea62fb9822a7fdbae6a50856786c49d286 GIT binary patch literal 28514 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�dgzZ;kW-v{ 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 literal 0 HcmV?d00001 diff --git a/assets/images/help/codespaces/python-port-forwarding.png b/assets/images/help/codespaces/python-port-forwarding.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6e2d8001bacf05752707ff02a52ebffde86fb6 GIT binary patch literal 7970 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%0Am~ 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 DM3eG} literal 0 HcmV?d00001 diff --git a/content/codespaces/getting-started-with-codespaces/getting-started-with-your-python-project-in-codespaces.md b/content/codespaces/getting-started-with-codespaces/getting-started-with-your-python-project-in-codespaces.md index 8709dace83..e01a111201 100644 --- a/content/codespaces/getting-started-with-codespaces/getting-started-with-your-python-project-in-codespaces.md +++ b/content/codespaces/getting-started-with-codespaces/getting-started-with-your-python-project-in-codespaces.md @@ -46,7 +46,7 @@ This example guides you through adding a `devcontainer.json` file from a templat 1. Access the command palette (`shift command P` / `shift control P`), then start typing "dev container". Click **Codespaces: Add Development Container Configuration Files...** !["Codespaces: Add Development Container Configuration Files..." in the command palette](/assets/images/help/codespaces/add-prebuilt-container-command.png) -3. For this example, click **Python 3**. If you need additional features you can select any container that’s specific to Python or a combination of tools such as Python 3 and PostgresSQL. +2. For this example, click **Python 3**. If you need additional features you can select any container that’s specific to Python or a combination of tools such as Python 3 and PostgresSQL. ![Select Python option from the list](/assets/images/help/codespaces/add-python-prebuilt-container.png) 3. Click the recommended version of Python. ![Python version selection](/assets/images/help/codespaces/add-python-version.png) @@ -100,7 +100,7 @@ The newly added `devcontainer.json` file defines a few properties that are descr // Add the IDs of extensions you want installed when the container is created. "extensions": [ - "ms-python.python" + "ms-python.python", ], // Use 'forwardPorts' to make a list of ports inside the container available locally. @@ -162,34 +162,42 @@ With your dev container added and a basic understanding of what everything does, !["Codespaces: Rebuild Container" in the command palette](/assets/images/help/codespaces/devcontainers-options.png) -2. Update your `devcontainer.json` file after `extensions` to include the following: +2. Update your the `extensions` list in your `devcontainer.json` file to add a few extensions that are useful when working with your project. + + ```json{:copy} + "extensions": [ + "ms-python.python", + "cstrap.flask-snippets", + "streetsidesoftware.code-spell-checker", + ], + ``` + +3. Uncomment the `postCreateCommand` to auto-install requirements as part of the codespaces setup process. ```json{:copy} - "portsAttributes": { - "5000": { - "onAutoForward": "openBrowser" - }, - + // Use 'postCreateCommand' to run commands after the container is created. "postCreateCommand": "pip3 install --user -r requirements.txt", ``` - The `portsAttributes` addition forwards port 5000 and automatically opens a browser tab to the forwarded port when you start the application while the `postCreateCommand` will ensure your requirements are installed as part of the codespace setup process. - For more information on `devcontainer.json` properties, see the [devcontainer.json reference](https://code.visualstudio.com/docs/remote/devcontainerjson-reference) on the Visual Studio Code docs. - -1. To rebuild your container, access the command palette (`shift command P` / `shift control P`), then start typing "rebuild". Click **Codespaces: Rebuild Container**. +4. To rebuild your container and apply the devcontainer.json changes, access the command palette (`shift command P` / `shift control P`), then start typing "rebuild". Click **Codespaces: Rebuild Container**. ![Rebuild container option](/assets/images/help/codespaces/codespaces-rebuild.png) Rebuilding inside your codespace ensures your changes work as expected before you commit the changes to the repository. If something does result in a failure, you’ll be placed in a codespace with a recovery container that you can rebuild from to keep adjusting your container. - +5. Check your changes were successfully applied by verifying the Code Spell Checker and Flask Snippet extensions were installed. + +![Extensions list](/assets/images/help/codespaces/python-extensions.png) + ### Step 4: Run your application In the previous section, you used the `postCreateCommand` to installing a set of packages via pip3. With our dependencies now installed, we can run our application. -1. Run your start command by pressing `F5`. +1. Run your application by pressing `F5` or entering `python -m flask run` in your terminal. -2. When your project starts, you should see a new tab open and connect to the port your project uses. +2. When your project starts, you should see a toast in the bottom right corner with a prompt to connect to the port your project uses. + + ![Port forwarding toast](/assets/images/help/codespaces/python-port-forwarding.png) ### Step 5: Commit your changes