]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🔧 Add pre-commit with first config and first formatting pass (#4888)
authorSebastián Ramírez <tiangolo@gmail.com>
Thu, 12 May 2022 00:06:16 +0000 (19:06 -0500)
committerGitHub <noreply@github.com>
Thu, 12 May 2022 00:06:16 +0000 (00:06 +0000)
* 🔧 Add first pre-commit config

* 🎨 Format YAML files with pre-commit

* 🎨 Format Markdown with pre-commit

* 🎨 Format SVGs, drawio, JS, HTML with pre-commit

* ➕ Add pre-commit to dev dependencies

* ⬇️ Extend pre-commit range to support Python 3.6

119 files changed:
.github/ISSUE_TEMPLATE/feature-request.yml
.github/ISSUE_TEMPLATE/question.yml
.github/workflows/latest-changes.yml
.github/workflows/people.yml
.github/workflows/preview-docs.yml
.pre-commit-config.yaml [new file with mode: 0644]
docs/de/docs/features.md
docs/de/docs/index.md
docs/en/data/external_links.yml
docs/en/docs/advanced/additional-responses.md
docs/en/docs/advanced/additional-status-codes.md
docs/en/docs/advanced/security/oauth2-scopes.md
docs/en/docs/advanced/sql-databases-peewee.md
docs/en/docs/alternatives.md
docs/en/docs/deployment/docker.md
docs/en/docs/deployment/manually.md
docs/en/docs/img/deployment/concepts/process-ram.drawio
docs/en/docs/img/deployment/concepts/process-ram.svg
docs/en/docs/img/deployment/https/https.drawio
docs/en/docs/img/deployment/https/https.svg
docs/en/docs/img/deployment/https/https01.drawio
docs/en/docs/img/deployment/https/https01.svg
docs/en/docs/img/deployment/https/https02.drawio
docs/en/docs/img/deployment/https/https02.svg
docs/en/docs/img/deployment/https/https03.drawio
docs/en/docs/img/deployment/https/https03.svg
docs/en/docs/img/deployment/https/https04.drawio
docs/en/docs/img/deployment/https/https04.svg
docs/en/docs/img/deployment/https/https05.drawio
docs/en/docs/img/deployment/https/https05.svg
docs/en/docs/img/deployment/https/https06.drawio
docs/en/docs/img/deployment/https/https06.svg
docs/en/docs/img/deployment/https/https07.drawio
docs/en/docs/img/deployment/https/https07.svg
docs/en/docs/img/deployment/https/https08.drawio
docs/en/docs/img/deployment/https/https08.svg
docs/en/docs/img/tutorial/bigger-applications/package.drawio
docs/en/docs/img/tutorial/bigger-applications/package.svg
docs/en/docs/js/termynal.js
docs/en/docs/python-types.md
docs/en/docs/tutorial/bigger-applications.md
docs/en/docs/tutorial/body-nested-models.md
docs/en/docs/tutorial/body.md
docs/en/docs/tutorial/dependencies/dependencies-with-yield.md
docs/en/docs/tutorial/request-files.md
docs/en/docs/tutorial/request-forms.md
docs/en/overrides/main.html
docs/es/docs/tutorial/first-steps.md
docs/fr/docs/alternatives.md
docs/fr/docs/async.md
docs/fr/docs/deployment/docker.md
docs/fr/docs/features.md
docs/fr/docs/index.md
docs/fr/docs/tutorial/background-tasks.md
docs/fr/docs/tutorial/body.md
docs/fr/docs/tutorial/first-steps.md
docs/fr/docs/tutorial/path-params.md
docs/fr/docs/tutorial/query-params.md
docs/id/docs/index.md
docs/it/docs/index.md
docs/ja/docs/alternatives.md
docs/ja/docs/async.md
docs/ja/docs/deployment/index.md
docs/ja/docs/deployment/manually.md
docs/ja/docs/history-design-future.md
docs/ja/docs/tutorial/body.md
docs/ja/docs/tutorial/middleware.md
docs/ja/docs/tutorial/path-params.md
docs/ja/docs/tutorial/query-params.md
docs/ja/docs/tutorial/request-forms.md
docs/ja/docs/tutorial/testing.md
docs/ko/docs/deployment/versions.md
docs/ko/docs/tutorial/header-params.md
docs/ko/docs/tutorial/path-params.md
docs/ko/docs/tutorial/request-files.md
docs/ko/docs/tutorial/request-forms-and-files.md
docs/ko/docs/tutorial/response-status-code.md
docs/pl/docs/tutorial/index.md
docs/pt/docs/alternatives.md
docs/pt/docs/async.md
docs/pt/docs/benchmarks.md
docs/pt/docs/help-fastapi.md
docs/pt/docs/index.md
docs/pt/docs/python-types.md
docs/pt/docs/tutorial/body.md
docs/ru/docs/async.md
docs/ru/docs/index.md
docs/ru/docs/python-types.md
docs/sq/docs/index.md
docs/tr/docs/features.md
docs/tr/docs/index.md
docs/tr/docs/python-types.md
docs/uk/docs/index.md
docs/zh/docs/advanced/additional-status-codes.md
docs/zh/docs/advanced/custom-response.md
docs/zh/docs/advanced/response-directly.md
docs/zh/docs/benchmarks.md
docs/zh/docs/contributing.md
docs/zh/docs/features.md
docs/zh/docs/help-fastapi.md
docs/zh/docs/tutorial/bigger-applications.md
docs/zh/docs/tutorial/body-nested-models.md
docs/zh/docs/tutorial/body-updates.md
docs/zh/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
docs/zh/docs/tutorial/dependencies/global-dependencies.md
docs/zh/docs/tutorial/dependencies/index.md
docs/zh/docs/tutorial/dependencies/sub-dependencies.md
docs/zh/docs/tutorial/extra-data-types.md
docs/zh/docs/tutorial/first-steps.md
docs/zh/docs/tutorial/handling-errors.md
docs/zh/docs/tutorial/path-operation-configuration.md
docs/zh/docs/tutorial/path-params-numeric-validations.md
docs/zh/docs/tutorial/request-files.md
docs/zh/docs/tutorial/request-forms-and-files.md
docs/zh/docs/tutorial/request-forms.md
docs/zh/docs/tutorial/schema-extra-example.md
docs/zh/docs/tutorial/security/index.md
docs/zh/docs/tutorial/security/oauth2-jwt.md
pyproject.toml

index 8176602a75f406300f4fd50ce98472c72d7d0c24..322b6536a760caf25a77c5d537a978ecca70c2de 100644 (file)
@@ -8,9 +8,9 @@ body:
         Thanks for your interest in FastAPI! 🚀
 
         Please follow these instructions, fill every question, and do every step. 🙏
-        
+
         I'm asking this because answering questions and solving problems in GitHub issues is what consumes most of the time.
-        
+
         I end up not being able to add new features, fix bugs, review pull requests, etc. as fast as I wish because I have to spend too much time handling issues.
 
         All that, on top of all the incredible help provided by a bunch of community members, the [FastAPI Experts](https://fastapi.tiangolo.com/fastapi-people/#experts), that give a lot of their time to come here and help others.
@@ -18,7 +18,7 @@ body:
         That's a lot of work they are doing, but if more FastAPI users came to help others like them just a little bit more, it would be much less effort for them (and you and me 😅).
 
         By asking questions in a structured way (following this) it will be much easier to help you.
-        
+
         And there's a high chance that you will find the solution along the way and you won't even have to submit it and wait for an answer. 😎
 
         As there are too many issues with questions, I'll have to close the incomplete ones. That will allow me (and others) to focus on helping people like you that follow the whole process and help us help you. 🤓
@@ -50,7 +50,7 @@ body:
       label: Commit to Help
       description: |
         After submitting this, I commit to one of:
-          
+
           * Read open issues with questions until I find 2 issues where I can help someone and add a comment to help there.
           * I already hit the "watch" button in this repository to receive notifications and I commit to help at least 2 people that ask questions in the future.
           * Implement a Pull Request for a confirmed bug.
index 5c76fd17eff15e78d8199a2de8ce808dcd368872..3b16b4ad0c156abc78b54c0df8d394b89663efe7 100644 (file)
@@ -8,9 +8,9 @@ body:
         Thanks for your interest in FastAPI! 🚀
 
         Please follow these instructions, fill every question, and do every step. 🙏
-        
+
         I'm asking this because answering questions and solving problems in GitHub issues is what consumes most of the time.
-        
+
         I end up not being able to add new features, fix bugs, review pull requests, etc. as fast as I wish because I have to spend too much time handling issues.
 
         All that, on top of all the incredible help provided by a bunch of community members, the [FastAPI Experts](https://fastapi.tiangolo.com/fastapi-people/#experts), that give a lot of their time to come here and help others.
@@ -18,7 +18,7 @@ body:
         That's a lot of work they are doing, but if more FastAPI users came to help others like them just a little bit more, it would be much less effort for them (and you and me 😅).
 
         By asking questions in a structured way (following this) it will be much easier to help you.
-        
+
         And there's a high chance that you will find the solution along the way and you won't even have to submit it and wait for an answer. 😎
 
         As there are too many issues with questions, I'll have to close the incomplete ones. That will allow me (and others) to focus on helping people like you that follow the whole process and help us help you. 🤓
@@ -50,7 +50,7 @@ body:
       label: Commit to Help
       description: |
         After submitting this, I commit to one of:
-          
+
           * Read open issues with questions until I find 2 issues where I can help someone and add a comment to help there.
           * I already hit the "watch" button in this repository to receive notifications and I commit to help at least 2 people that ask questions in the future.
           * Implement a Pull Request for a confirmed bug.
index 42236bebaa585d5d4e099a8d673b5bc3306c7a0b..5783c993a01754cc033003df3f4a80db216ee168 100644 (file)
@@ -12,7 +12,7 @@ on:
         description: PR number
         required: true
       debug_enabled:
-        description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'     
+        description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
         required: false
         default: false
 
index 970813da7b107ffc4376ef5333a6c86260076ba8..2004ee7b3ad5c3e887aa615519259740e358b727 100644 (file)
@@ -6,7 +6,7 @@ on:
   workflow_dispatch:
     inputs:
       debug_enabled:
-        description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'     
+        description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)'
         required: false
         default: false
 
index 0c0d2ac59a9e66c741e2e9ff6074cb7e9af5d2c3..104c2677f4d356daf7ddb53227e2e7e8820f7c9b 100644 (file)
@@ -3,7 +3,7 @@ on:
   workflow_run:
     workflows:
       - Build Docs
-    types: 
+    types:
       - completed
 
 jobs:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644 (file)
index 0000000..2d9dce2
--- /dev/null
@@ -0,0 +1,14 @@
+# See https://pre-commit.com for more information
+# See https://pre-commit.com/hooks.html for more hooks
+repos:
+-   repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v4.2.0
+    hooks:
+    -   id: check-added-large-files
+    -   id: check-toml
+    -   id: check-yaml
+        args:
+        -   --unsafe
+    -   id: end-of-file-fixer
+    -   id: trailing-whitespace
+
index 767a170731555430ef39607a79d989aeddd3507c..d99ade4024bd06f5a3d58bf8e5ebcc3ce0e7a7fb 100644 (file)
@@ -27,7 +27,7 @@ Mit einer interaktiven API-Dokumentation und explorativen webbasierten Benutzers
 
 Alles basiert auf **Python 3.6 Typ**-Deklarationen (dank Pydantic). Es muss keine neue Syntax gelernt werden, nur standardisiertes modernes Python.
 
+
 
 Wenn Sie eine kurze, zweiminütige, Auffrischung in der Benutzung von Python Typ-Deklarationen benötigen (auch wenn Sie FastAPI nicht nutzen), schauen Sie sich diese kurze Einführung an (Englisch): Python Types{.internal-link target=_blank}.
 
index cdce662238b52da9905ef318526398f993ec80d9..ce13bcc4a06c1b6959cec70a4e0b1afde493e325 100644 (file)
@@ -321,7 +321,7 @@ And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" targe
 
 ### Recap
 
-In summary, you declare **once** the types of parameters, body, etc. as function parameters. 
+In summary, you declare **once** the types of parameters, body, etc. as function parameters.
 
 You do that with standard modern Python types.
 
@@ -378,7 +378,7 @@ Coming back to the previous code example, **FastAPI** will:
     * As the `q` parameter is declared with `= None`, it is optional.
     * Without the `None` it would be required (as is the body in the case with `PUT`).
 * For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
-    * Check that it has a required attribute `name` that should be a `str`. 
+    * Check that it has a required attribute `name` that should be a `str`.
     * Check that it has a required attribute `price` that has to be a `float`.
     * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
     * All this would also work for deeply nested JSON objects.
index f73ce4a6c24985897200f5831523267b31fa32a3..4a5791a43c16ae0858ed3b48f66c0eb94c914d4c 100644 (file)
@@ -47,7 +47,7 @@ articles:
   - author: Patrick Ladon
     author_link: https://dev.to/factorlive
     link: https://dev.to/factorlive/python-facebook-messenger-webhook-with-fastapi-on-glitch-4n90
-    title: Python Facebook messenger webhook with FastAPI on Glitch  
+    title: Python Facebook messenger webhook with FastAPI on Glitch
   - author: Dom Patmore
     author_link: https://twitter.com/dompatmore
     link: https://dompatmore.com/blog/authenticate-your-fastapi-app-with-auth0
@@ -208,7 +208,7 @@ articles:
     author_link: https://medium.com/@williamhayes
     link: https://medium.com/@williamhayes/fastapi-starlette-debug-vs-prod-5f7561db3a59
     title: FastAPI/Starlette debug vs prod
-  - author: Mukul Mantosh  
+  - author: Mukul Mantosh
     author_link: https://twitter.com/MantoshMukul
     link: https://www.jetbrains.com/pycharm/guide/tutorials/fastapi-aws-kubernetes/
     title: Developing FastAPI Application using K8s & AWS
index 4b8b3b71e3430c97e7f8fb4c30a7b6a7556cbc17..5d136da41b02c85caef72843c703a0ccc139f5f1 100644 (file)
@@ -36,7 +36,7 @@ For example, to declare another response with a status code `404` and a Pydantic
     **FastAPI** will take the Pydantic model from there, generate the `JSON Schema`, and put it in the correct place.
 
     The correct place is:
-    
+
     * In the key `content`, that has as value another JSON object (`dict`) that contains:
         * A key with the media type, e.g. `application/json`, that contains as value another JSON object, that contains:
             * A key `schema`, that has as the value the JSON Schema from the model, here's the correct place.
index eb6031953abd5e48e4bc5c258c9054943dfd8f53..37ec283ffebbb5ee0e0ca9bed04d9a3e22832cac 100644 (file)
@@ -22,7 +22,7 @@ To achieve that, import `JSONResponse`, and return your content there directly,
     When you return a `Response` directly, like in the example above, it will be returned directly.
 
     It won't be serialized with a model, etc.
-    
+
     Make sure it has the data you want it to have, and that the values are valid JSON (if you are using `JSONResponse`).
 
 !!! note "Technical Details"
index 4bd9cfd0470ccd5f5e8f0e7d30b696524ced741a..be51325cdbdbd66b8a40c0fb695a532a5babb561 100644 (file)
@@ -16,11 +16,11 @@ In this section you will see how to manage authentication and authorization with
     You don't necessarily need OAuth2 scopes, and you can handle authentication and authorization however you want.
 
     But OAuth2 with scopes can be nicely integrated into your API (with OpenAPI) and your API docs.
-    
+
     Nevertheless, you still enforce those scopes, or any other security/authorization requirement, however you need, in your code.
 
     In many cases, OAuth2 with scopes can be an overkill.
-    
+
     But if you know you need it, or you are curious, keep reading.
 
 ## OAuth2 scopes and OpenAPI
@@ -47,7 +47,7 @@ They are normally used to declare specific security permissions, for example:
     In OAuth2 a "scope" is just a string that declares a specific permission required.
 
     It doesn't matter if it has other characters like `:` or if it is a URL.
-    
+
     Those details are implementation specific.
 
     For OAuth2 they are just strings.
@@ -115,7 +115,7 @@ In this case, it requires the scope `me` (it could require more than one scope).
 
 !!! note
     You don't necessarily need to add different scopes in different places.
-    
+
     We are doing it here to demonstrate how **FastAPI** handles scopes declared at different levels.
 
 ```Python hl_lines="4  139  166"
index 48514d1e29c1eff4eef7344c2d46e2ece79aec27..b4ea61367e8200855a7d32308a24f36f92705141 100644 (file)
@@ -182,7 +182,7 @@ Now let's check the file `sql_app/schemas.py`.
     To avoid confusion between the Peewee *models* and the Pydantic *models*, we will have the file `models.py` with the Peewee models, and the file `schemas.py` with the Pydantic models.
 
     These Pydantic models define more or less a "schema" (a valid data shape).
-    
+
     So this will help us avoiding confusion while using both.
 
 ### Create the Pydantic *models* / schemas
index 28d0be8cc08025499e1733d7e6bde990135c9c76..68aa3150d7194c0584179173838df5937c9d2e5d 100644 (file)
@@ -235,7 +235,7 @@ It was one of the first extremely fast Python frameworks based on `asyncio`. It
 
 !!! check "Inspired **FastAPI** to"
     Find a way to have a crazy performance.
-    
+
     That's why **FastAPI** is based on Starlette, as it is the fastest framework available (tested by third-party benchmarks).
 
 ### <a href="https://falconframework.org/" class="external-link" target="_blank">Falcon</a>
@@ -333,7 +333,7 @@ Now APIStar is a set of tools to validate OpenAPI specifications, not a web fram
     Exist.
 
     The idea of declaring multiple things (data validation, serialization and documentation) with the same Python types, that at the same time provided great editor support, was something I considered a brilliant idea.
-    
+
     And after searching for a long time for a similar framework and testing many different alternatives, APIStar was the best option available.
 
     Then APIStar stopped to exist as a server and Starlette was created, and was a new better foundation for such a system. That was the final inspiration to build **FastAPI**.
@@ -391,7 +391,7 @@ That's one of the main things that **FastAPI** adds on top, all based on Python
     Handle all the core web parts. Adding features on top.
 
     The class `FastAPI` itself inherits directly from the class `Starlette`.
-    
+
     So, anything that you can do with Starlette, you can do it directly with **FastAPI**, as it is basically Starlette on steroids.
 
 ### <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>
index 3f86efcced275d6ec057a1f887e6e4d7faafa925..651b0e840b087bb626c76157d6bd6dabc2fc372e 100644 (file)
@@ -350,7 +350,7 @@ If your FastAPI is a single file, for example, `main.py` without an `./app` dire
 Then you would just have to change the corresponding paths to copy the file inside the `Dockerfile`:
 
 ```{ .dockerfile .annotate hl_lines="10  13" }
-FROM python:3.9  
+FROM python:3.9
 
 WORKDIR /code
 
index 16286533ab600468e3f5d4e24efe271666212835..d6892b2c14ad61c606e2ad1f47eb23c1d6908f1d 100644 (file)
@@ -38,7 +38,7 @@ You can install an ASGI compatible server with:
 
     !!! tip
         By adding the `standard`, Uvicorn will install and use some recommended extra dependencies.
-        
+
         That including `uvloop`, the high-performance drop-in replacement for `asyncio`, that provides the big concurrency performance boost.
 
 === "Hypercorn"
@@ -89,7 +89,7 @@ You can then run your application the same way you have done in the tutorials, b
     Remember to remove the `--reload` option if you were using it.
 
     The `--reload` option consumes much more resources, is more unstable, etc.
-    
+
     It helps a lot during **development**, but you **shouldn't** use it in **production**.
 
 ## Hypercorn with Trio
index 51fc30ed32f6872167f2783c92ea8ee045170392..b29c8a34245191b2010e3eccddd67e04cb4330b3 100644 (file)
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index cd086c36b87a5b33799f977e3ec91e3d7f47a874..c1bf0d589003455bc8293e2894fbfd908ea4c54d 100644 (file)
@@ -56,4 +56,4 @@
 }
 </style></defs><g><rect x="2" y="2" width="920" height="670" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="all"/><rect x="337" y="12" width="300" height="80" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 52px; margin-left: 338px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Roboto"><span style="font-size: 24px">Server</span></font></div></div></div></foreignObject><text x="487" y="56" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">Server</text></switch></g><rect x="692" y="132" width="190" height="500" fill="#dae8fc" stroke="#6c8ebf" stroke-width="4" pointer-events="all"/><rect x="748.92" y="142" width="76.16" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 74px; height: 1px; padding-top: 157px; margin-left: 750px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 24px" face="Roboto">RAM<br /></font></div></div></div></foreignObject><text x="787" y="161" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">RAM
 </text></switch></g><rect x="52" y="132" width="250" height="500" fill="#dae8fc" stroke="#6c8ebf" stroke-width="4" pointer-events="all"/><rect x="136.61" y="142" width="80.77" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 79px; height: 1px; padding-top: 157px; margin-left: 138px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 24px" face="Roboto">CPU<br /></font></div></div></div></foreignObject><text x="177" y="161" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">CPU
-</text></switch></g><path d="M 385 243 L 382 243 L 382 282 L 423.9 282" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="stroke"/><path d="M 430.65 282 L 421.65 286.5 L 423.9 282 L 421.65 277.5 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 382 242 L 382 402 L 423.9 402" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="stroke"/><path d="M 430.65 402 L 421.65 406.5 L 423.9 402 L 421.65 397.5 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 362 192 L 327 192 L 327 200 L 292 200" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 612 192 L 712 192" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 382 142 L 592 142 L 612 192 L 592 242 L 382 242 L 362 192 Z" fill="#d5e8d4" stroke="#82b366" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 192px; margin-left: 363px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="roboto"><span style="font-size: 24px">Process </span></font><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Manager</span></div></div></div></foreignObject><text x="487" y="196" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Process Manager</text></switch></g><path d="M 662 312 L 687 312 L 687 287 L 712 287" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 442 262 L 642 262 L 662 312 L 642 362 L 442 362 L 422 312 Z" fill="#fff2cc" stroke="#d6b656" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 312px; margin-left: 423px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="roboto"><span style="font-size: 24px">Worker Process</span></font></div></div></div></foreignObject><text x="542" y="316" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Worker Process</text></switch></g><path d="M 662 432 L 687 432 L 687 447 L 712 447" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 422 432 L 357 432 L 357 410 L 292 410" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 442 382 L 642 382 L 662 432 L 642 482 L 442 482 L 422 432 Z" fill="#e1d5e7" stroke="#9673a6" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 432px; margin-left: 423px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="roboto"><span style="font-size: 24px">Worker Process</span></font></div></div></div></foreignObject><text x="542" y="436" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Worker Process</text></switch></g><path d="M 362 562 L 327 562 L 327 515 L 292 515" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 612 562 L 662 562 L 662 557 L 712 557" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 382 512 L 592 512 L 612 562 L 592 612 L 382 612 L 362 562 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 562px; margin-left: 363px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="roboto"><span style="font-size: 24px">Another Process</span></font></div></div></div></foreignObject><text x="487" y="566" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Another Process</text></switch></g><rect x="62" y="180" width="230" height="40" fill="#d5e8d4" stroke="#82b366" stroke-width="3" stroke-dasharray="9 9" pointer-events="all"/><rect x="712" y="182" width="150" height="20" fill="#d5e8d4" stroke="#82b366" stroke-width="3" pointer-events="all"/><rect x="62" y="230" width="230" height="100" fill="#fff2cc" stroke="#d6b656" stroke-width="3" stroke-dasharray="9 9" pointer-events="all"/><rect x="62" y="340" width="230" height="140" fill="#e1d5e7" stroke="#9673a6" stroke-width="3" stroke-dasharray="9 9" pointer-events="all"/><rect x="712" y="212" width="150" height="150" fill="#fff2cc" stroke="#d6b656" stroke-width="3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 287px; margin-left: 713px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">1 GB</font></div></div></div></foreignObject><text x="787" y="291" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1 GB</text></switch></g><rect x="712" y="372" width="150" height="150" fill="#e1d5e7" stroke="#9673a6" stroke-width="3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 447px; margin-left: 713px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">1 GB</font></div></div></div></foreignObject><text x="787" y="451" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1 GB</text></switch></g><rect x="62" y="490" width="230" height="50" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-dasharray="9 9" pointer-events="all"/><rect x="712" y="532" width="150" height="50" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</text></switch></g><path d="M 385 243 L 382 243 L 382 282 L 423.9 282" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="stroke"/><path d="M 430.65 282 L 421.65 286.5 L 423.9 282 L 421.65 277.5 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 382 242 L 382 402 L 423.9 402" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="stroke"/><path d="M 430.65 402 L 421.65 406.5 L 423.9 402 L 421.65 397.5 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 362 192 L 327 192 L 327 200 L 292 200" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 612 192 L 712 192" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 382 142 L 592 142 L 612 192 L 592 242 L 382 242 L 362 192 Z" fill="#d5e8d4" stroke="#82b366" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 192px; margin-left: 363px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="roboto"><span style="font-size: 24px">Process </span></font><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Manager</span></div></div></div></foreignObject><text x="487" y="196" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Process Manager</text></switch></g><path d="M 662 312 L 687 312 L 687 287 L 712 287" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 442 262 L 642 262 L 662 312 L 642 362 L 442 362 L 422 312 Z" fill="#fff2cc" stroke="#d6b656" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 312px; margin-left: 423px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="roboto"><span style="font-size: 24px">Worker Process</span></font></div></div></div></foreignObject><text x="542" y="316" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Worker Process</text></switch></g><path d="M 662 432 L 687 432 L 687 447 L 712 447" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 422 432 L 357 432 L 357 410 L 292 410" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 442 382 L 642 382 L 662 432 L 642 482 L 442 482 L 422 432 Z" fill="#e1d5e7" stroke="#9673a6" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 432px; margin-left: 423px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="roboto"><span style="font-size: 24px">Worker Process</span></font></div></div></div></foreignObject><text x="542" y="436" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Worker Process</text></switch></g><path d="M 362 562 L 327 562 L 327 515 L 292 515" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 612 562 L 662 562 L 662 557 L 712 557" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 382 512 L 592 512 L 612 562 L 592 612 L 382 612 L 362 562 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 248px; height: 1px; padding-top: 562px; margin-left: 363px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="roboto"><span style="font-size: 24px">Another Process</span></font></div></div></div></foreignObject><text x="487" y="566" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Another Process</text></switch></g><rect x="62" y="180" width="230" height="40" fill="#d5e8d4" stroke="#82b366" stroke-width="3" stroke-dasharray="9 9" pointer-events="all"/><rect x="712" y="182" width="150" height="20" fill="#d5e8d4" stroke="#82b366" stroke-width="3" pointer-events="all"/><rect x="62" y="230" width="230" height="100" fill="#fff2cc" stroke="#d6b656" stroke-width="3" stroke-dasharray="9 9" pointer-events="all"/><rect x="62" y="340" width="230" height="140" fill="#e1d5e7" stroke="#9673a6" stroke-width="3" stroke-dasharray="9 9" pointer-events="all"/><rect x="712" y="212" width="150" height="150" fill="#fff2cc" stroke="#d6b656" stroke-width="3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 287px; margin-left: 713px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">1 GB</font></div></div></div></foreignObject><text x="787" y="291" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1 GB</text></switch></g><rect x="712" y="372" width="150" height="150" fill="#e1d5e7" stroke="#9673a6" stroke-width="3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 148px; height: 1px; padding-top: 447px; margin-left: 713px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">1 GB</font></div></div></div></foreignObject><text x="787" y="451" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">1 GB</text></switch></g><rect x="62" y="490" width="230" height="50" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-dasharray="9 9" pointer-events="all"/><rect x="712" y="532" width="150" height="50" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index 31cfab96bce3afbd4e40766bb4076049f1352a1c..c4c8a362816ce2275ca9499ae5d1500da0f1dd70 100644 (file)
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index e63345eba32047ebfe6d495421868c6b32db241c..69497518a5517c8f9c956628093bba343a2ec20e 100644 (file)
@@ -59,4 +59,4 @@
 </text></switch></g><rect x="670" y="1006" width="270" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1041px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">someapp.example.com</span><br /></font></div></div></div></foreignObject><text x="805" y="1045" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">someapp.example.com
 </text></switch></g><rect x="670" y="1086" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1121px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">another.example.net</span><br /></font></div></div></div></foreignObject><text x="805" y="1125" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">another.example.net
 </text></switch></g><rect x="670" y="1166" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1201px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">onemore.example.org</span><br /></font></div></div></div></foreignObject><text x="805" y="1205" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">onemore.example.org
-</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g><path d="M 1045 891 L 1315 891 L 1335 931 L 1315 971 L 1045 971 L 1025 931 Z" fill="#d5e8d4" stroke="#82b366" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 308px; height: 1px; padding-top: 931px; margin-left: 1026px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Decrypted request for: someapp.example.com</span></div></div></div></foreignObject><text x="1180" y="935" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Decrypted request for: someapp.example.com</text></switch></g><path d="M 990 1081 L 1010 1081 L 1010 931 L 1025 931" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g><path d="M 1045 891 L 1315 891 L 1335 931 L 1315 971 L 1045 971 L 1025 931 Z" fill="#d5e8d4" stroke="#82b366" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 308px; height: 1px; padding-top: 931px; margin-left: 1026px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Decrypted request for: someapp.example.com</span></div></div></div></foreignObject><text x="1180" y="935" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Decrypted request for: someapp.example.com</text></switch></g><path d="M 990 1081 L 1010 1081 L 1010 931 L 1025 931" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index 9bc5340ce58587e7d19eb75633d2eda7d4788ed9..181582f9bd913befe4188445b6219050d0988b51 100644 (file)
@@ -75,4 +75,4 @@
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index 4fee0adfc016115938b5034502d23a092b310c79..2edbd062399ecad5ab7c4280b09818e5b3863f13 100644 (file)
@@ -54,4 +54,4 @@
   src: url("https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu4mxK.woff2") format('woff2');
   unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
 }
-</style></defs><g><rect x="60" y="493" width="380" height="250" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 378px; height: 1px; padding-top: 618px; margin-left: 61px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">https://someapp.example.com</font></div></div></div></foreignObject><text x="250" y="622" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">https://someapp.example.com</text></switch></g><path d="M 289.06 793.99 C 293.87 793.99 297.23 791.75 296.28 790.03 L 286.73 773.39 C 285.53 770.86 283.81 770.35 280.97 770.35 L 219.03 770.35 C 216.02 770.35 214.47 770.96 213.01 773.49 L 204.15 789.93 C 202.43 792.57 207.59 793.99 211.29 793.99 Z M 433.76 739.91 L 433.76 496.43 L 65.98 496.43 L 65.98 739.91 Z M 25.89 816 C 16.09 815.9 7.31 812.04 3.61 806.06 C 0 800.17 1.46 794.29 4.56 790.23 L 40.18 747.52 L 40.18 495.12 C 40.18 482.43 49.81 466 65.81 466 L 433.84 466 C 446.32 466 459.57 477.77 459.57 496.74 L 459.57 747.52 L 495.53 790.64 C 498.54 794.7 500 800.07 496.39 805.86 C 491.66 813.16 482.71 815.49 474.28 816 Z" fill="#505050" stroke="none" pointer-events="none"/><path d="M 530 331 L 530 409 L 420 409 L 420 455.9" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 420 462.65 L 415.5 453.65 L 420 455.9 L 424.5 453.65 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><path d="M 162.5 66 C 96.5 66 80 131 132.8 144 C 80 172.6 139.4 235 182.3 209 C 212 261 311 261 344 209 C 410 209 410 157 368.75 131 C 410 79 344 27 286.25 53 C 245 14 179 14 162.5 66 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 328px; height: 1px; padding-top: 131px; margin-left: 81px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">DNS Servers</font></div></div></div></foreignObject><text x="245" y="135" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DNS Servers</text></switch></g><path d="M 185 331 L 185 296 L 245 296 L 245 271.1" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 245 264.35 L 249.5 273.35 L 245 271.1 L 240.5 273.35 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><path d="M 130 466 L 130 421 L 130 411" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 408.04 111 L 530 111 L 530 251" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 50 331 L 320 331 L 340 371 L 320 411 L 50 411 L 30 371 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 308px; height: 1px; padding-top: 371px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Who is: someapp.example.com</span></div></div></div></foreignObject><text x="185" y="375" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Who is: someapp.example.com</text></switch></g><path d="M 430 251 L 630 251 L 650 291 L 630 331 L 430 331 L 410 291 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 291px; margin-left: 411px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">IP:</span><br style="font-family: &quot;roboto&quot;" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">123.124.125.126</span></div></div></div></foreignObject><text x="530" y="295" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</style></defs><g><rect x="60" y="493" width="380" height="250" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 378px; height: 1px; padding-top: 618px; margin-left: 61px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">https://someapp.example.com</font></div></div></div></foreignObject><text x="250" y="622" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">https://someapp.example.com</text></switch></g><path d="M 289.06 793.99 C 293.87 793.99 297.23 791.75 296.28 790.03 L 286.73 773.39 C 285.53 770.86 283.81 770.35 280.97 770.35 L 219.03 770.35 C 216.02 770.35 214.47 770.96 213.01 773.49 L 204.15 789.93 C 202.43 792.57 207.59 793.99 211.29 793.99 Z M 433.76 739.91 L 433.76 496.43 L 65.98 496.43 L 65.98 739.91 Z M 25.89 816 C 16.09 815.9 7.31 812.04 3.61 806.06 C 0 800.17 1.46 794.29 4.56 790.23 L 40.18 747.52 L 40.18 495.12 C 40.18 482.43 49.81 466 65.81 466 L 433.84 466 C 446.32 466 459.57 477.77 459.57 496.74 L 459.57 747.52 L 495.53 790.64 C 498.54 794.7 500 800.07 496.39 805.86 C 491.66 813.16 482.71 815.49 474.28 816 Z" fill="#505050" stroke="none" pointer-events="none"/><path d="M 530 331 L 530 409 L 420 409 L 420 455.9" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 420 462.65 L 415.5 453.65 L 420 455.9 L 424.5 453.65 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><path d="M 162.5 66 C 96.5 66 80 131 132.8 144 C 80 172.6 139.4 235 182.3 209 C 212 261 311 261 344 209 C 410 209 410 157 368.75 131 C 410 79 344 27 286.25 53 C 245 14 179 14 162.5 66 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 328px; height: 1px; padding-top: 131px; margin-left: 81px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">DNS Servers</font></div></div></div></foreignObject><text x="245" y="135" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DNS Servers</text></switch></g><path d="M 185 331 L 185 296 L 245 296 L 245 271.1" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 245 264.35 L 249.5 273.35 L 245 271.1 L 240.5 273.35 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><path d="M 130 466 L 130 421 L 130 411" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 408.04 111 L 530 111 L 530 251" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 50 331 L 320 331 L 340 371 L 320 411 L 50 411 L 30 371 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 308px; height: 1px; padding-top: 371px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Who is: someapp.example.com</span></div></div></div></foreignObject><text x="185" y="375" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Who is: someapp.example.com</text></switch></g><path d="M 430 251 L 630 251 L 650 291 L 630 331 L 430 331 L 410 291 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 291px; margin-left: 411px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">IP:</span><br style="font-family: &quot;roboto&quot;" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">123.124.125.126</span></div></div></div></foreignObject><text x="530" y="295" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index 0f7578d3e4dc4846e65dab0a7dcf396c54508bbc..650c06d1e1c4d3a4256a500ca9f1256d1f2dc140 100644 (file)
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index 1f37a7098b373523373a748afad9806c3db40195..e16b7e94a11426cead630a1fea7fa11a2a01da31 100644 (file)
@@ -54,4 +54,4 @@
   src: url("https://fonts.gstatic.com/s/roboto/v29/KFOmCnqEu92Fr1Mu4mxK.woff2") format('woff2');
   unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
 }
-</style></defs><g><rect x="590" y="491" width="820" height="970" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="all"/><rect x="850" y="491" width="300" height="80" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 531px; margin-left: 851px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Roboto"><span style="font-size: 24px">Server(s)</span></font></div></div></div></foreignObject><text x="1000" y="535" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">Server(s)</text></switch></g><rect x="60" y="493" width="380" height="250" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 378px; height: 1px; padding-top: 618px; margin-left: 61px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">https://someapp.example.com</font></div></div></div></foreignObject><text x="250" y="622" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">https://someapp.example.com</text></switch></g><path d="M 289.06 793.99 C 293.87 793.99 297.23 791.75 296.28 790.03 L 286.73 773.39 C 285.53 770.86 283.81 770.35 280.97 770.35 L 219.03 770.35 C 216.02 770.35 214.47 770.96 213.01 773.49 L 204.15 789.93 C 202.43 792.57 207.59 793.99 211.29 793.99 Z M 433.76 739.91 L 433.76 496.43 L 65.98 496.43 L 65.98 739.91 Z M 25.89 816 C 16.09 815.9 7.31 812.04 3.61 806.06 C 0 800.17 1.46 794.29 4.56 790.23 L 40.18 747.52 L 40.18 495.12 C 40.18 482.43 49.81 466 65.81 466 L 433.84 466 C 446.32 466 459.57 477.77 459.57 496.74 L 459.57 747.52 L 495.53 790.64 C 498.54 794.7 500 800.07 496.39 805.86 C 491.66 813.16 482.71 815.49 474.28 816 Z" fill="#505050" stroke="none" pointer-events="none"/><path d="M 530.03 331 L 530.03 409.03 L 420.03 409.03 L 420.03 455.9" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 420.03 462.65 L 415.53 453.65 L 420.03 455.9 L 424.53 453.65 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><path d="M 162.5 66 C 96.5 66 80 131 132.8 144 C 80 172.6 139.4 235 182.3 209 C 212 261 311 261 344 209 C 410 209 410 157 368.75 131 C 410 79 344 27 286.25 53 C 245 14 179 14 162.5 66 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 328px; height: 1px; padding-top: 131px; margin-left: 81px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">DNS Servers</font></div></div></div></foreignObject><text x="245" y="135" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DNS Servers</text></switch></g><path d="M 185 331 L 185 296 L 245 296 L 245 271.1" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 245 264.35 L 249.5 273.35 L 245 271.1 L 240.5 273.35 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><path d="M 135 466 L 135 451.03 L 135 411" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 408.04 111.03 L 530.03 111.03 L 530.03 251" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><ellipse cx="555" cy="1281" rx="85" ry="60" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 1281px; margin-left: 471px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">Port 443 (HTTPS)</font></div></div></div></foreignObject><text x="555" y="1285" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Port 443 (HTTPS)</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g><path d="M 50 331 L 320 331 L 340 371 L 320 411 L 50 411 L 30 371 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 308px; height: 1px; padding-top: 371px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Who is: someapp.example.com</span></div></div></div></foreignObject><text x="185" y="375" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Who is: someapp.example.com</text></switch></g><path d="M 430 251 L 630 251 L 650 291 L 630 331 L 430 331 L 410 291 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 291px; margin-left: 411px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">IP:</span><br style="font-family: &quot;roboto&quot;" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">123.124.125.126</span></div></div></div></foreignObject><text x="530" y="295" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g><path d="M 100.03 921 L 100.03 1311.03 L 481.41 1311.03" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 50 841 L 240 841 L 260 881 L 240 921 L 50 921 L 30 881 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 228px; height: 1px; padding-top: 881px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">TLS Handshake</span></div></div></div></foreignObject><text x="145" y="885" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">TLS Handshake</text></switch></g><path d="M 100.03 816 L 100.03 831.03 L 100.03 841" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</style></defs><g><rect x="590" y="491" width="820" height="970" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="all"/><rect x="850" y="491" width="300" height="80" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 531px; margin-left: 851px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font face="Roboto"><span style="font-size: 24px">Server(s)</span></font></div></div></div></foreignObject><text x="1000" y="535" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">Server(s)</text></switch></g><rect x="60" y="493" width="380" height="250" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 378px; height: 1px; padding-top: 618px; margin-left: 61px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; font-weight: bold; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">https://someapp.example.com</font></div></div></div></foreignObject><text x="250" y="622" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle" font-weight="bold">https://someapp.example.com</text></switch></g><path d="M 289.06 793.99 C 293.87 793.99 297.23 791.75 296.28 790.03 L 286.73 773.39 C 285.53 770.86 283.81 770.35 280.97 770.35 L 219.03 770.35 C 216.02 770.35 214.47 770.96 213.01 773.49 L 204.15 789.93 C 202.43 792.57 207.59 793.99 211.29 793.99 Z M 433.76 739.91 L 433.76 496.43 L 65.98 496.43 L 65.98 739.91 Z M 25.89 816 C 16.09 815.9 7.31 812.04 3.61 806.06 C 0 800.17 1.46 794.29 4.56 790.23 L 40.18 747.52 L 40.18 495.12 C 40.18 482.43 49.81 466 65.81 466 L 433.84 466 C 446.32 466 459.57 477.77 459.57 496.74 L 459.57 747.52 L 495.53 790.64 C 498.54 794.7 500 800.07 496.39 805.86 C 491.66 813.16 482.71 815.49 474.28 816 Z" fill="#505050" stroke="none" pointer-events="none"/><path d="M 530.03 331 L 530.03 409.03 L 420.03 409.03 L 420.03 455.9" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 420.03 462.65 L 415.53 453.65 L 420.03 455.9 L 424.53 453.65 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><path d="M 162.5 66 C 96.5 66 80 131 132.8 144 C 80 172.6 139.4 235 182.3 209 C 212 261 311 261 344 209 C 410 209 410 157 368.75 131 C 410 79 344 27 286.25 53 C 245 14 179 14 162.5 66 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 328px; height: 1px; padding-top: 131px; margin-left: 81px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">DNS Servers</font></div></div></div></foreignObject><text x="245" y="135" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DNS Servers</text></switch></g><path d="M 185 331 L 185 296 L 245 296 L 245 271.1" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 245 264.35 L 249.5 273.35 L 245 271.1 L 240.5 273.35 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><path d="M 135 466 L 135 451.03 L 135 411" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 408.04 111.03 L 530.03 111.03 L 530.03 251" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><ellipse cx="555" cy="1281" rx="85" ry="60" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 1281px; margin-left: 471px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto" style="font-size: 24px">Port 443 (HTTPS)</font></div></div></div></foreignObject><text x="555" y="1285" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Port 443 (HTTPS)</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g><path d="M 50 331 L 320 331 L 340 371 L 320 411 L 50 411 L 30 371 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 308px; height: 1px; padding-top: 371px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Who is: someapp.example.com</span></div></div></div></foreignObject><text x="185" y="375" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Who is: someapp.example.com</text></switch></g><path d="M 430 251 L 630 251 L 650 291 L 630 331 L 430 331 L 410 291 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 238px; height: 1px; padding-top: 291px; margin-left: 411px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">IP:</span><br style="font-family: &quot;roboto&quot;" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">123.124.125.126</span></div></div></div></foreignObject><text x="530" y="295" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g><path d="M 100.03 921 L 100.03 1311.03 L 481.41 1311.03" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/><path d="M 50 841 L 240 841 L 260 881 L 240 921 L 50 921 L 30 881 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 228px; height: 1px; padding-top: 881px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">TLS Handshake</span></div></div></div></foreignObject><text x="145" y="885" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">TLS Handshake</text></switch></g><path d="M 100.03 816 L 100.03 831.03 L 100.03 841" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" stroke-dasharray="9 9" pointer-events="none"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index c5766086c082d816a44c1c9d3662368420b902a1..c178fd36314e5317a14a855aad53179cefc3f389 100644 (file)
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index e68e1c45964ac32f7f4ada93acea001f3ff33820..2badd1c7d27acd0d678eb29838e182887572767f 100644 (file)
@@ -59,4 +59,4 @@
 </text></switch></g><rect x="670" y="1006" width="270" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1041px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">someapp.example.com</span><br /></font></div></div></div></foreignObject><text x="805" y="1045" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">someapp.example.com
 </text></switch></g><rect x="670" y="1086" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1121px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">another.example.net</span><br /></font></div></div></div></foreignObject><text x="805" y="1125" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">another.example.net
 </text></switch></g><rect x="670" y="1166" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1201px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">onemore.example.org</span><br /></font></div></div></div></foreignObject><text x="805" y="1205" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">onemore.example.org
-</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index ea357a6c1b475b7cdf1036c7a323a4f061cb6e40..78a6e919a04bd39893f64d2d6f4a0f44eea83dc7 100644 (file)
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index 4c9b7999bc0ddf469eea5b5eeda4d296a45d0755..4513ac76b555c9c4868225f7987c9b97fe9b136a 100644 (file)
@@ -59,4 +59,4 @@
 </text></switch></g><rect x="670" y="1006" width="270" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1041px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">someapp.example.com</span><br /></font></div></div></div></foreignObject><text x="805" y="1045" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">someapp.example.com
 </text></switch></g><rect x="670" y="1086" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1121px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">another.example.net</span><br /></font></div></div></div></foreignObject><text x="805" y="1125" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">another.example.net
 </text></switch></g><rect x="670" y="1166" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1201px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">onemore.example.org</span><br /></font></div></div></div></foreignObject><text x="805" y="1205" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">onemore.example.org
-</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index 9b8b7c6f710df77a52a80fd7d7ed32e7635a480b..236ecd841f47140f3631450cc3412ea6a0fe1f73 100644 (file)
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index d11647b9b3174ec5c78ce1e519fa8fdff3a42f8f..ddcd2760a806876513a1223880332a19d8eae6b7 100644 (file)
@@ -59,4 +59,4 @@
 </text></switch></g><rect x="670" y="1006" width="270" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1041px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">someapp.example.com</span><br /></font></div></div></div></foreignObject><text x="805" y="1045" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">someapp.example.com
 </text></switch></g><rect x="670" y="1086" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1121px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">another.example.net</span><br /></font></div></div></div></foreignObject><text x="805" y="1125" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">another.example.net
 </text></switch></g><rect x="670" y="1166" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1201px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">onemore.example.org</span><br /></font></div></div></div></foreignObject><text x="805" y="1205" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">onemore.example.org
-</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index 5bb85813fd5ed4c3071b1d1f9433e4d73aa2faeb..9dec131846f01469ab94f0ffffd8a2b63d8561f8 100644 (file)
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index 10e03b7c5642e083ddc1866adeaa4b9267b3e7a9..3695de40c725e2823a058cc6d624dc1efa3c5f00 100644 (file)
@@ -59,4 +59,4 @@
 </text></switch></g><rect x="670" y="1006" width="270" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1041px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">someapp.example.com</span><br /></font></div></div></div></foreignObject><text x="805" y="1045" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">someapp.example.com
 </text></switch></g><rect x="670" y="1086" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1121px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">another.example.net</span><br /></font></div></div></div></foreignObject><text x="805" y="1125" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">another.example.net
 </text></switch></g><rect x="670" y="1166" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1201px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">onemore.example.org</span><br /></font></div></div></div></foreignObject><text x="805" y="1205" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">onemore.example.org
-</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index 1ca994b2236ae6604e3bc14f1588edf9e74c0731..aa8f4d6bedb9ca5ea969e649f5d83b443c34856b 100644 (file)
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index e409d8871332ef58063b55f410238f02b69c385c..551354cef81f7a89d6cc4c7a901603b548ecc577 100644 (file)
@@ -59,4 +59,4 @@
 </text></switch></g><rect x="670" y="1006" width="270" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1041px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">someapp.example.com</span><br /></font></div></div></div></foreignObject><text x="805" y="1045" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">someapp.example.com
 </text></switch></g><rect x="670" y="1086" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1121px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">another.example.net</span><br /></font></div></div></div></foreignObject><text x="805" y="1125" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">another.example.net
 </text></switch></g><rect x="670" y="1166" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1201px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">onemore.example.org</span><br /></font></div></div></div></foreignObject><text x="805" y="1205" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">onemore.example.org
-</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index 8a4f41056ca6978b84242cbf33711ac35057b613..794b192dfe10b2336c8025cb24b8677d529f982a 100644 (file)
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index 3047dd821759b867f6aa7a1b62821fb1e101f2a9..2d4680dcc23e15580ce3c89af11c1c7274775cf1 100644 (file)
@@ -59,4 +59,4 @@
 </text></switch></g><rect x="670" y="1006" width="270" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1041px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">someapp.example.com</span><br /></font></div></div></div></foreignObject><text x="805" y="1045" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">someapp.example.com
 </text></switch></g><rect x="670" y="1086" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1121px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">another.example.net</span><br /></font></div></div></div></foreignObject><text x="805" y="1125" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">another.example.net
 </text></switch></g><rect x="670" y="1166" width="270" height="70" fill="#f5f5f5" stroke="#666666" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 268px; height: 1px; padding-top: 1201px; margin-left: 671px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #333333; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">onemore.example.org</span><br /></font></div></div></div></foreignObject><text x="805" y="1205" fill="#333333" font-family="Helvetica" font-size="12px" text-anchor="middle">onemore.example.org
-</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+</text></switch></g><rect x="430" y="1141" width="220" height="70" fill="#ffffff" stroke="#000000" stroke-width="3" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 1176px; margin-left: 431px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: none; white-space: normal; word-wrap: normal; "><font face="Roboto" data-font-src="https://fonts.googleapis.com/css?family=Roboto"><span style="font-size: 24px">IP:</span><br /><span style="font-size: 24px">123.124.125.126</span><br /></font></div></div></div></foreignObject><text x="540" y="1180" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">IP:...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index 48f6e76fe035a74d6547d0337baeb3bf5d2ac3e8..cab3de2ca8376c6550a259a7b2f0eb4fc74000ab 100644 (file)
@@ -40,4 +40,4 @@
             </root>
         </mxGraphModel>
     </diagram>
-</mxfile>
\ No newline at end of file
+</mxfile>
index a9cec926a84aa7fca38cfce2f383bf335770109e..44da1dc30dd41a43eab8b6c5598fc9b9b3f071ae 100644 (file)
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1354px" height="624px" viewBox="-0.5 -0.5 1354 624" content="&lt;mxfile host=&quot;82b6d165-deb8-4851-8900-790cfdefbc58&quot; modified=&quot;2020-11-28T18:13:29.762Z&quot; agent=&quot;5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Code/1.51.1 Chrome/83.0.4103.122 Electron/9.3.3 Safari/537.36&quot; etag=&quot;9x_Fe34KMUvbrrfZ9ZN-&quot; version=&quot;13.6.5&quot;&gt;&lt;diagram id=&quot;zB4-QXJZ7ScUzHSLnJ1i&quot; name=&quot;Page-1&quot;&gt;7VnRbpswFP0aHofABpI8NlnTvVSqlkl7rFxwwarBDJyG7Otngx1wIG26JkvaRYoSOL6Afe45vhfFgrO0uilQntyyCFMLOFFlwa8WAK7re+JHIusGGY2dBogLEqmgFliQ31iBOmxJIlwagZwxyklugiHLMhxyA0NFwVZm2COj5lNzFOMesAgR7aM/ScQThU6A0w58wyRO9KOBo0ZSpKMVUCYoYisDwhWfs4yrOX5nD4wzy79OOJfLu7LAXHweZYQdMxZTjHJS2iFLBRyWImT+iFJCJbfq4tFMHQDnlmXiZyanIo/edVswbe7my/tN6/uJBcBrC84KxnhzlFYzTGX6dWabVc53jG6oLXDG97kANBc8I7pU2VHE8rVOV8GWWYRlvGPB6SohHC9yFMrRlRCowBKeUnHmikPJwEJdK89LXrCnTZo9gfRnqCb9jAuOqw6kZnyDWYp5sRYhGwuoXCsDAG2AVUdO0Fdg0pFSoFWClD7izc1bksSB4mmYMzjAWUC5Wr1BXvBryfTAl7J2opCKA7y8agelhxo+W0xrpI0JYvl7h8InaS+xgjzXj30o9HANzu/vSUb4/b2dr3WIEqeO6yVZMM/NTDaZmzHKCoFkLMNyHYTSLQhREmfiNBT5xAKfyjwS4fYrNZCSKJKPGZSOKS5TLVARN982zrYN4XT+Y53Lu8aHEVgAfUNg0O0LDDoD+hofQF6uv1NfZY6y3frSG4xUmBhCaV6zAaFXE60EZcIytFHgywptZCNq0ZIq8dkpIllHXs3ctLxaYZ5utufCWmNKSZdpSJOxLUOKylYrOsEVipnw0TTHBRFikh7T6J2GwB47M6mwbgb6OzM80M7smTuzBweMEwwYx3UO4ZzgYzgnwjkWu14WEtGGXRy0r4O6tH1+J0HTSX7g9500OpaThkrQ+beFDnx99/GGyjYIDsDZ+IRt4WL5kHc7Q5vIZixDtN8i7uwIz8nq7fR3NLNDe+XxaX4Dm5f++kWnjqE99uDYC1xffgPTt0Hft2ACbOiMgglQ30dqvicfo4XQBrFRlF7a8L/bWWrqPn8j4fhbncToX/bk3kfsJPw9XmM8b4Ayzz0AZaNzaiREcoSYy37la+y0GR6q05cy+U4ZTiY26BQ9+GqVhMC1/basur5/pDK5W6On3uaNMqnkaYuMp5dX7f2rZGvrmrlPXyT98SlrpLv71fHUchh007LsVISLm97gppq5/85NI+eIbqr51X+X1mOdv83h9R8=&lt;/diagram&gt;&lt;/mxfile&gt;"><defs><style type="text/css">/* cyrillic-ext */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu72xKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;&#xa;}&#xa;/* cyrillic */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu5mxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;&#xa;}&#xa;/* greek-ext */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7mxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+1F00-1FFF;&#xa;}&#xa;/* greek */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4WxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0370-03FF;&#xa;}&#xa;/* vietnamese */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7WxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;&#xa;}&#xa;/* latin-ext */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7GxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;&#xa;}&#xa;/* latin */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxK.woff2") format('woff2');&#xa;  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;&#xa;}&#xa;@import url("https://fonts.googleapis.com/css?family=Roboto+Mono%2C+mono");</style></defs><g><rect x="2" y="2" width="1350" height="620" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="all"/><rect x="527" y="32" width="300" height="80" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 72px; margin-left: 528px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 24px" face="Roboto">Package app<br />app/__init__.py</font></div></div></div></foreignObject><text x="677" y="76" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">Package app...</text></switch></g><path d="M 52 152 L 372 152 L 392 202 L 372 252 L 52 252 L 32 202 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 202px; margin-left: 33px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.main</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/main.py</span></div></div></div></foreignObject><text x="212" y="206" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.main...</text></switch></g><path d="M 42 287 L 372 287 L 392 337 L 372 387 L 42 387 L 22 337 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 368px; height: 1px; padding-top: 337px; margin-left: 23px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.dependencies</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/dependencies.py</span></div></div></div></foreignObject><text x="207" y="341" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.dependencies...</text></switch></g><rect x="922" y="152" width="400" height="260" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="all"/><rect x="975.84" y="182" width="292.31" height="80" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 290px; height: 1px; padding-top: 222px; margin-left: 977px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 24px" face="Roboto">Subpackage app.internal<br /></font><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/internal/__init__.py</span><font style="font-size: 24px" face="Roboto"><br /></font></div></div></div></foreignObject><text x="1122" y="226" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">Subpackage app.internal...</text></switch></g><path d="M 962 292 L 1282 292 L 1302 342 L 1282 392 L 962 392 L 942 342 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 342px; margin-left: 943px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.internal.admin</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/internal/admin.py</span></div></div></div></foreignObject><text x="1122" y="346" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.internal.admin...</text></switch></g><rect x="432" y="152" width="440" height="410" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="all"/><rect x="491.23" y="182" width="321.54" height="80" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 320px; height: 1px; padding-top: 222px; margin-left: 492px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 24px" face="Roboto">Subpackage app.routers<br />app/routers/__init__.py<br /></font></div></div></div></foreignObject><text x="652" y="226" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">Subpackage app.routers...</text></switch></g><path d="M 492 292 L 812 292 L 832 342 L 812 392 L 492 392 L 472 342 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 342px; margin-left: 473px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.routers.items</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/routers/items.py</span></div></div></div></foreignObject><text x="652" y="346" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.routers.items...</text></switch></g><path d="M 492 422 L 812 422 L 832 472 L 812 522 L 492 522 L 472 472 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 472px; margin-left: 473px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.routers.users</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/routers/users.py</span></div></div></div></foreignObject><text x="652" y="476" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.routers.users...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1354px" height="624px" viewBox="-0.5 -0.5 1354 624" content="&lt;mxfile host=&quot;82b6d165-deb8-4851-8900-790cfdefbc58&quot; modified=&quot;2020-11-28T18:13:29.762Z&quot; agent=&quot;5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Code/1.51.1 Chrome/83.0.4103.122 Electron/9.3.3 Safari/537.36&quot; etag=&quot;9x_Fe34KMUvbrrfZ9ZN-&quot; version=&quot;13.6.5&quot;&gt;&lt;diagram id=&quot;zB4-QXJZ7ScUzHSLnJ1i&quot; name=&quot;Page-1&quot;&gt;7VnRbpswFP0aHofABpI8NlnTvVSqlkl7rFxwwarBDJyG7Otngx1wIG26JkvaRYoSOL6Afe45vhfFgrO0uilQntyyCFMLOFFlwa8WAK7re+JHIusGGY2dBogLEqmgFliQ31iBOmxJIlwagZwxyklugiHLMhxyA0NFwVZm2COj5lNzFOMesAgR7aM/ScQThU6A0w58wyRO9KOBo0ZSpKMVUCYoYisDwhWfs4yrOX5nD4wzy79OOJfLu7LAXHweZYQdMxZTjHJS2iFLBRyWImT+iFJCJbfq4tFMHQDnlmXiZyanIo/edVswbe7my/tN6/uJBcBrC84KxnhzlFYzTGX6dWabVc53jG6oLXDG97kANBc8I7pU2VHE8rVOV8GWWYRlvGPB6SohHC9yFMrRlRCowBKeUnHmikPJwEJdK89LXrCnTZo9gfRnqCb9jAuOqw6kZnyDWYp5sRYhGwuoXCsDAG2AVUdO0Fdg0pFSoFWClD7izc1bksSB4mmYMzjAWUC5Wr1BXvBryfTAl7J2opCKA7y8agelhxo+W0xrpI0JYvl7h8InaS+xgjzXj30o9HANzu/vSUb4/b2dr3WIEqeO6yVZMM/NTDaZmzHKCoFkLMNyHYTSLQhREmfiNBT5xAKfyjwS4fYrNZCSKJKPGZSOKS5TLVARN982zrYN4XT+Y53Lu8aHEVgAfUNg0O0LDDoD+hofQF6uv1NfZY6y3frSG4xUmBhCaV6zAaFXE60EZcIytFHgywptZCNq0ZIq8dkpIllHXs3ctLxaYZ5utufCWmNKSZdpSJOxLUOKylYrOsEVipnw0TTHBRFikh7T6J2GwB47M6mwbgb6OzM80M7smTuzBweMEwwYx3UO4ZzgYzgnwjkWu14WEtGGXRy0r4O6tH1+J0HTSX7g9500OpaThkrQ+beFDnx99/GGyjYIDsDZ+IRt4WL5kHc7Q5vIZixDtN8i7uwIz8nq7fR3NLNDe+XxaX4Dm5f++kWnjqE99uDYC1xffgPTt0Hft2ACbOiMgglQ30dqvicfo4XQBrFRlF7a8L/bWWrqPn8j4fhbncToX/bk3kfsJPw9XmM8b4Ayzz0AZaNzaiREcoSYy37la+y0GR6q05cy+U4ZTiY26BQ9+GqVhMC1/basur5/pDK5W6On3uaNMqnkaYuMp5dX7f2rZGvrmrlPXyT98SlrpLv71fHUchh007LsVISLm97gppq5/85NI+eIbqr51X+X1mOdv83h9R8=&lt;/diagram&gt;&lt;/mxfile&gt;"><defs><style type="text/css">/* cyrillic-ext */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu72xKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;&#xa;}&#xa;/* cyrillic */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu5mxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;&#xa;}&#xa;/* greek-ext */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7mxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+1F00-1FFF;&#xa;}&#xa;/* greek */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4WxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0370-03FF;&#xa;}&#xa;/* vietnamese */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7WxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;&#xa;}&#xa;/* latin-ext */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7GxKOzY.woff2") format('woff2');&#xa;  unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;&#xa;}&#xa;/* latin */&#xa;@font-face {&#xa;  font-family: 'Roboto';&#xa;  font-style: normal;&#xa;  font-weight: 400;&#xa;  src: url("https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxK.woff2") format('woff2');&#xa;  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;&#xa;}&#xa;@import url("https://fonts.googleapis.com/css?family=Roboto+Mono%2C+mono");</style></defs><g><rect x="2" y="2" width="1350" height="620" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="all"/><rect x="527" y="32" width="300" height="80" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 298px; height: 1px; padding-top: 72px; margin-left: 528px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 24px" face="Roboto">Package app<br />app/__init__.py</font></div></div></div></foreignObject><text x="677" y="76" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">Package app...</text></switch></g><path d="M 52 152 L 372 152 L 392 202 L 372 252 L 52 252 L 32 202 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 202px; margin-left: 33px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.main</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/main.py</span></div></div></div></foreignObject><text x="212" y="206" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.main...</text></switch></g><path d="M 42 287 L 372 287 L 392 337 L 372 387 L 42 387 L 22 337 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 368px; height: 1px; padding-top: 337px; margin-left: 23px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.dependencies</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/dependencies.py</span></div></div></div></foreignObject><text x="207" y="341" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.dependencies...</text></switch></g><rect x="922" y="152" width="400" height="260" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="all"/><rect x="975.84" y="182" width="292.31" height="80" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 290px; height: 1px; padding-top: 222px; margin-left: 977px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 24px" face="Roboto">Subpackage app.internal<br /></font><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/internal/__init__.py</span><font style="font-size: 24px" face="Roboto"><br /></font></div></div></div></foreignObject><text x="1122" y="226" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">Subpackage app.internal...</text></switch></g><path d="M 962 292 L 1282 292 L 1302 342 L 1282 392 L 962 392 L 942 342 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 342px; margin-left: 943px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.internal.admin</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/internal/admin.py</span></div></div></div></foreignObject><text x="1122" y="346" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.internal.admin...</text></switch></g><rect x="432" y="152" width="440" height="410" fill="#ffffff" stroke="#000000" stroke-width="4" pointer-events="all"/><rect x="491.23" y="182" width="321.54" height="80" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 320px; height: 1px; padding-top: 222px; margin-left: 492px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Roboto Mono, mono; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 24px" face="Roboto">Subpackage app.routers<br />app/routers/__init__.py<br /></font></div></div></div></foreignObject><text x="652" y="226" fill="#000000" font-family="Roboto Mono, mono" font-size="12px" text-anchor="middle">Subpackage app.routers...</text></switch></g><path d="M 492 292 L 812 292 L 832 342 L 812 392 L 492 392 L 472 342 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 342px; margin-left: 473px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.routers.items</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/routers/items.py</span></div></div></div></foreignObject><text x="652" y="346" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.routers.items...</text></switch></g><path d="M 492 422 L 812 422 L 832 472 L 812 522 L 492 522 L 472 472 Z" fill="#ffffff" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 358px; height: 1px; padding-top: 472px; margin-left: 473px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;roboto&quot; ; font-size: 24px">Module app.routers.users</span><br style="font-family: &quot;roboto&quot; ; font-size: 24px" /><span style="font-family: &quot;roboto&quot; ; font-size: 24px">app/routers/users.py</span></div></div></div></foreignObject><text x="652" y="476" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Module app.routers.users...</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
index 8b0e9339e8772022d0e89babbf922835a643eead..4ac32708a31a0ee74ae1f03b48de8aa8790beb26 100644 (file)
@@ -72,14 +72,14 @@ class Termynal {
      * Initialise the widget, get lines, clear container and start animation.
      */
     init() {
-        /** 
+        /**
          * Calculates width and height of Termynal container.
          * If container is empty and lines are dynamically loaded, defaults to browser `auto` or CSS.
-         */ 
+         */
         const containerStyle = getComputedStyle(this.container);
-        this.container.style.width = containerStyle.width !== '0px' ? 
+        this.container.style.width = containerStyle.width !== '0px' ?
             containerStyle.width : undefined;
-        this.container.style.minHeight = containerStyle.height !== '0px' ? 
+        this.container.style.minHeight = containerStyle.height !== '0px' ?
             containerStyle.height : undefined;
 
         this.container.setAttribute('data-termynal', '');
@@ -138,7 +138,7 @@ class Termynal {
         restart.innerHTML = "restart ↻"
         return restart
     }
-    
+
     generateFinish() {
         const finish = document.createElement('a')
         finish.onclick = (e) => {
@@ -215,7 +215,7 @@ class Termynal {
 
     /**
      * Converts line data objects into line elements.
-     * 
+     *
      * @param {Object[]} lineData - Dynamically loaded lines.
      * @param {Object} line - Line data object.
      * @returns {Element[]} - Array of line elements.
@@ -231,7 +231,7 @@ class Termynal {
 
     /**
      * Helper function for generating attributes string.
-     * 
+     *
      * @param {Object} line - Line data object.
      * @returns {string} - String of attributes.
      */
index fe56dadec080175d5543fa72e079c10444c08606..8486ed849d2815776ff114feb03bb862a0bf1ed3 100644 (file)
@@ -29,7 +29,7 @@ Calling this program outputs:
 John Doe
 ```
 
-The function does the following: 
+The function does the following:
 
 * Takes a `first_name` and `last_name`.
 * Converts the first letter of each one to upper case with `title()`.
@@ -334,14 +334,14 @@ These types that take type parameters in square brackets are called **Generic ty
 === "Python 3.9 and above"
 
     You can use the same builtin types as generics (with square brakets and types inside):
-    
+
     * `list`
     * `tuple`
     * `set`
     * `dict`
 
     And the same as with Python 3.6, from the `typing` module:
-    
+
     * `Union`
     * `Optional`
     * ...and others.
@@ -354,7 +354,7 @@ These types that take type parameters in square brackets are called **Generic ty
     * `tuple`
     * `set`
     * `dict`
-    
+
     And the same as with Python 3.6, from the `typing` module:
 
     * `Union`
index 2a2e764b5988d60a822e4e909ff07f28b2db6196..d201953df4eb19206cf051691fd9eed2dfb49b7c 100644 (file)
@@ -334,7 +334,7 @@ from app.routers import items, users
     ```Python
     from .routers import items, users
     ```
-    
+
     The second version is an "absolute import":
 
     ```Python
index fa38cfc4883f508050746a080f5beef48e4f015a..bfc948f4fadc2215b16e1cd0b4ce0741ef5be2f2 100644 (file)
@@ -366,7 +366,7 @@ In this case, you would accept any `dict` as long as it has `int` keys with `flo
     But Pydantic has automatic data conversion.
 
     This means that, even though your API clients can only send strings as keys, as long as those strings contain pure integers, Pydantic will convert them and validate them.
-    
+
     And the `dict` you receive as `weights` will actually have `int` keys and `float` values.
 
 ## Recap
index 81441b41eb2aa2f831e2be146f81308dce13fdf5..eb21f29a864fa75227aae4c9fb3e66a969dd02dd 100644 (file)
@@ -138,7 +138,7 @@ But you would get the same editor support with <a href="https://www.jetbrains.co
     If you use <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> as your editor, you can use the <a href="https://github.com/koxudaxi/pydantic-pycharm-plugin/" class="external-link" target="_blank">Pydantic PyCharm Plugin</a>.
 
     It improves editor support for Pydantic models, with:
-    
+
     * auto-completion
     * type checks
     * refactoring
index ac2e9cb8cb4c4a8a043d98548f65a13e4e308e64..a7300f0b7a68dd68180a7cde27e7b4da29febed7 100644 (file)
@@ -10,7 +10,7 @@ To do this, use `yield` instead of `return`, and write the extra steps after.
 !!! note "Technical Details"
     Any function that is valid to use with:
 
-    * <a href="https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager" class="external-link" target="_blank">`@contextlib.contextmanager`</a> or 
+    * <a href="https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager" class="external-link" target="_blank">`@contextlib.contextmanager`</a> or
     * <a href="https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager" class="external-link" target="_blank">`@contextlib.asynccontextmanager`</a>
 
     would be valid to use as a **FastAPI** dependency.
@@ -207,7 +207,7 @@ You can also use them inside of **FastAPI** dependencies with `yield` by using
 !!! tip
     Another way to create a context manager is with:
 
-    * <a href="https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager" class="external-link" target="_blank">`@contextlib.contextmanager`</a> or 
+    * <a href="https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager" class="external-link" target="_blank">`@contextlib.contextmanager`</a> or
     * <a href="https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager" class="external-link" target="_blank">`@contextlib.asynccontextmanager`</a>
 
     using them to decorate a function with a single `yield`.
index 3ca471a91b8662bea1f807ed2438f3fd84c9d831..664a1102f161f06d45ea22c92875fb3e137b4861 100644 (file)
@@ -106,7 +106,7 @@ The way HTML forms (`<form></form>`) sends the data to the server normally uses
     Data from forms is normally encoded using the "media type" `application/x-www-form-urlencoded` when it doesn't include files.
 
     But when the form includes files, it is encoded as `multipart/form-data`. If you use `File`, **FastAPI** will know it has to get the files from the correct part of the body.
-    
+
     If you want to read more about these encodings and form fields, head to the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network">MDN</abbr> web docs for <code>POST</code></a>.
 
 !!! warning
index b5495a4005610480688181b95e5231f93b6ef4d6..2021a098f928a4fba6a78e7c5c4ef93d6dcf08ae 100644 (file)
@@ -45,7 +45,7 @@ The way HTML forms (`<form></form>`) sends the data to the server normally uses
     Data from forms is normally encoded using the "media type" `application/x-www-form-urlencoded`.
 
     But when the form includes files, it is encoded as `multipart/form-data`. You'll read about handling files in the next chapter.
-    
+
     If you want to read more about these encodings and form fields, head to the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network">MDN</abbr> web docs for <code>POST</code></a>.
 
 !!! warning
index cac02ca7c31acbff1f94e86ddbd8249c7360b071..eb1cb5c82f4362019a5fcdafb9bb1bcf532eed7c 100644 (file)
@@ -69,9 +69,9 @@
     });
   });
 </script>
-<qa-bot 
+<qa-bot
   server="https://tiangolo-fastapi.docsqa.jina.ai"
-  theme="infer" 
+  theme="infer"
   title="FastAPI Bot"
   description="FastAPI framework, high performance, easy to learn, fast to code, ready for production"
   style="font-size: 0.8rem"
index 79f0a51c0a720cae30f5430cb90b852c6c3ed8c7..110036e8caadd5166dccc9bc2b96bb4aa579d60f 100644 (file)
@@ -254,7 +254,7 @@ El `@app.get("/")` le dice a **FastAPI** que la función que tiene justo debajo
     Esa sintaxis `@algo` se llama un "decorador" en Python.
 
     Lo pones encima de una función. Es como un lindo sombrero decorado (creo que de ahí salió el concepto).
-    
+
     Un "decorador" toma la función que tiene debajo y hace algo con ella.
 
     En nuestro caso, este decorador le dice a **FastAPI** que la función que está debajo corresponde al **path** `/` con una **operación** `get`.
index bf3e7bc3c3cea5d63c2255dd9c3d58505fe9e149..ee20438c3db2feea98bc194767a8b07f5ca84d7f 100644 (file)
@@ -133,7 +133,7 @@ permanents qui les rendent inadaptés.
 
 ### <a href="https://marshmallow.readthedocs.io/en/3.0/" class="external-link" target="_blank">Marshmallow</a>
 
-L'une des principales fonctionnalités nécessaires aux systèmes API est la "<abbr title="également appelée 
+L'une des principales fonctionnalités nécessaires aux systèmes API est la "<abbr title="également appelée
 marshalling, conversion">sérialisation</abbr>" des données, qui consiste à prendre les données du code (Python) et à
 les convertir en quelque chose qui peut être envoyé sur le réseau. Par exemple, convertir un objet contenant des
 données provenant d'une base de données en un objet JSON. Convertir des objets `datetime` en strings, etc.
@@ -147,7 +147,7 @@ Sans un système de validation des données, vous devriez effectuer toutes les v
 
 Ces fonctionnalités sont ce pourquoi Marshmallow a été construit. C'est une excellente bibliothèque, et je l'ai déjà beaucoup utilisée.
 
-Mais elle a été créée avant que les type hints n'existent en Python. Ainsi, pour définir chaque <abbr title="la définition de 
+Mais elle a été créée avant que les type hints n'existent en Python. Ainsi, pour définir chaque <abbr title="la définition de
 la façon dont les données doivent être formées">schéma</abbr>, vous devez utiliser des utilitaires et des classes spécifiques fournies par Marshmallow.
 
 !!! check "A inspiré **FastAPI** à"
@@ -155,7 +155,7 @@ Utilisez du code pour définir des "schémas" qui fournissent automatiquement le
 
 ### <a href="https://webargs.readthedocs.io/en/latest/" class="external-link" target="_blank">Webargs</a>
 
-Une autre grande fonctionnalité requise par les API est le <abbr title="la lecture et la conversion en données 
+Une autre grande fonctionnalité requise par les API est le <abbr title="la lecture et la conversion en données
 Python">parsing</abbr> des données provenant des requêtes entrantes.
 
 Webargs est un outil qui a été créé pour fournir cela par-dessus plusieurs frameworks, dont Flask.
index 20f4ee1011b6194490b7a648bb9b5e225eed570d..71c28b70390689f1799a539f1c0799dd3edd6e02 100644 (file)
@@ -220,7 +220,7 @@ Et comme on peut avoir du parallélisme et de l'asynchronicité en même temps,
 Nope ! C'est ça la morale de l'histoire.
 
 La concurrence est différente du parallélisme. C'est mieux sur des scénarios **spécifiques** qui impliquent beaucoup d'attente. À cause de ça, c'est généralement bien meilleur que le parallélisme pour le développement d'applications web. Mais pas pour tout.
+
 Donc pour équilibrer tout ça, imaginez l'histoire suivante :
 
 > Vous devez nettoyer une grande et sale maison.
@@ -293,7 +293,7 @@ def get_sequential_burgers(number: int):
 
 Avec `async def`, Python sait que dans cette fonction il doit prendre en compte les expressions `await`, et qu'il peut mettre en pause ⏸ l'exécution de la fonction pour aller faire autre chose 🔀 avant de revenir.
 
-Pour appeler une fonction définie avec `async def`, vous devez utiliser `await`. Donc ceci ne marche pas : 
+Pour appeler une fonction définie avec `async def`, vous devez utiliser `await`. Donc ceci ne marche pas :
 
 ```Python
 # Ceci ne fonctionne pas, car get_burgers a été défini avec async def
@@ -375,7 +375,7 @@ Au final, dans les deux situations, il est fort probable que **FastAPI** soit to
 
 La même chose s'applique aux dépendances. Si une dépendance est définie avec `def` plutôt que `async def`, elle est exécutée dans la threadpool externe.
 
-### Sous-dépendances 
+### Sous-dépendances
 
 Vous pouvez avoir de multiples dépendances et sous-dépendances dépendant les unes des autres (en tant que paramètres de la définition de la *fonction de chemin*), certaines créées avec `async def` et d'autres avec `def`. Cela fonctionnerait aussi, et celles définies avec un simple `def` seraient exécutées sur un thread externe (venant de la threadpool) plutôt que d'être "attendues".
 
index e4b59afbfd53df3a8acdf39a20a73324222f93fc..d2dcae7223fdf2ea24a1eaf9786d4c524291dc83 100644 (file)
@@ -118,7 +118,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage
 
 </div>
 
-Vous disposez maintenant d'un serveur FastAPI optimisé dans un conteneur Docker. Configuré automatiquement pour votre 
+Vous disposez maintenant d'un serveur FastAPI optimisé dans un conteneur Docker. Configuré automatiquement pour votre
 serveur actuel (et le nombre de cœurs du CPU).
 
 ## Vérifier
@@ -139,7 +139,7 @@ Vous verrez la documentation interactive automatique de l'API (fournie par <a hr
 
 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
 
-## Documentation de l'API alternative 
+## Documentation de l'API alternative
 
 Et vous pouvez également aller sur <a href="http://192.168.99.100/redoc" class="external-link" target="_blank">http://192.168.99.100/redoc</a> ou <a href="http://127.0.0.1/redoc" class="external-link" target="_blank">http://127.0.0.1/redoc</a> (ou équivalent, en utilisant votre hôte Docker).
 
@@ -149,7 +149,7 @@ Vous verrez la documentation automatique alternative (fournie par <a href="https
 
 ## Traefik
 
-<a href="https://traefik.io/" class="external-link" target="_blank">Traefik</a> est un reverse proxy/load balancer 
+<a href="https://traefik.io/" class="external-link" target="_blank">Traefik</a> est un reverse proxy/load balancer
 haute performance. Il peut faire office de "Proxy de terminaison TLS" (entre autres fonctionnalités).
 
 Il est intégré à Let's Encrypt. Ainsi, il peut gérer toutes les parties HTTPS, y compris l'acquisition et le renouvellement des certificats.
@@ -164,7 +164,7 @@ Avec ces informations et ces outils, passez à la section suivante pour tout com
 
 Vous pouvez avoir un cluster en mode Docker Swarm configuré en quelques minutes (environ 20 min) avec un processus Traefik principal gérant HTTPS (y compris l'acquisition et le renouvellement des certificats).
 
-En utilisant le mode Docker Swarm, vous pouvez commencer par un "cluster" d'une seule machine (il peut même s'agir 
+En utilisant le mode Docker Swarm, vous pouvez commencer par un "cluster" d'une seule machine (il peut même s'agir
 d'un serveur à 5 USD/mois) et ensuite vous pouvez vous développer autant que vous le souhaitez en ajoutant d'autres serveurs.
 
 Pour configurer un cluster en mode Docker Swarm avec Traefik et la gestion de HTTPS, suivez ce guide :
index 4b00ecb6f39a7339ac93273cb47966871ab1a2d4..dcc0e39ed77ac327bb263412a0596e08f3721869 100644 (file)
@@ -27,7 +27,7 @@ Documentation d'API interactive et interface web d'exploration. Comme le framewo
 
 Tout est basé sur la déclaration de type standard de **Python 3.6** (grâce à Pydantic). Pas de nouvelles syntaxes à apprendre. Juste du Python standard et moderne.
 
-Si vous souhaitez un rappel de 2 minutes sur l'utilisation des types en Python (même si vous ne comptez pas utiliser FastAPI), jetez un oeil au tutoriel suivant: [Python Types](python-types.md){.internal-link target=_blank}. 
+Si vous souhaitez un rappel de 2 minutes sur l'utilisation des types en Python (même si vous ne comptez pas utiliser FastAPI), jetez un oeil au tutoriel suivant: [Python Types](python-types.md){.internal-link target=_blank}.
 
 Vous écrivez du python standard avec des annotations de types:
 
index 3922d9c776ec2bda306a395a8e621cd1190a2dcc..0b537054e998a9d6631be8ff45ebf5e74732ac21 100644 (file)
@@ -321,7 +321,7 @@ And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" targe
 
 ### Recap
 
-In summary, you declare **once** the types of parameters, body, etc. as function parameters. 
+In summary, you declare **once** the types of parameters, body, etc. as function parameters.
 
 You do that with standard modern Python types.
 
@@ -378,7 +378,7 @@ Coming back to the previous code example, **FastAPI** will:
     * As the `q` parameter is declared with `= None`, it is optional.
     * Without the `None` it would be required (as is the body in the case with `PUT`).
 * For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
-    * Check that it has a required attribute `name` that should be a `str`. 
+    * Check that it has a required attribute `name` that should be a `str`.
     * Check that it has a required attribute `price` that has to be a `float`.
     * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
     * All this would also work for deeply nested JSON objects.
@@ -463,4 +463,4 @@ You can install all of these with `pip install fastapi[all]`.
 
 ## License
 
-This project is licensed under the terms of the MIT license.
\ No newline at end of file
+This project is licensed under the terms of the MIT license.
index bb6afb4576f951592965f5a16998c8780c6ce0da..f7cf1a6ccc17eccfa5f7bb948e6be0c589ccd094 100644 (file)
@@ -9,7 +9,7 @@ Cela comprend, par exemple :
 * Les notifications par email envoyées après l'exécution d'une action :
     * Étant donné que se connecter à un serveur et envoyer un email a tendance à être «lent» (plusieurs secondes), vous pouvez retourner la réponse directement et envoyer la notification en arrière-plan.
 * Traiter des données :
-    * Par exemple, si vous recevez un fichier qui doit passer par un traitement lent, vous pouvez retourner une réponse «Accepted» (HTTP 202) puis faire le traitement en arrière-plan. 
+    * Par exemple, si vous recevez un fichier qui doit passer par un traitement lent, vous pouvez retourner une réponse «Accepted» (HTTP 202) puis faire le traitement en arrière-plan.
 
 
 ## Utiliser `BackgroundTasks`
@@ -73,7 +73,7 @@ La classe `BackgroundTasks` provient directement de <a href="https://www.starlet
 
 Elle est importée/incluse directement dans **FastAPI** pour que vous puissiez l'importer depuis `fastapi` et éviter d'importer accidentellement `BackgroundTask` (sans `s` à la fin) depuis `starlette.background`.
 
-En utilisant seulement `BackgroundTasks` (et non `BackgroundTask`), il est possible de l'utiliser en tant que paramètre de *fonction de chemin* et de laisser **FastAPI** gérer le reste pour vous, comme en utilisant l'objet `Request` directement. 
+En utilisant seulement `BackgroundTasks` (et non `BackgroundTask`), il est possible de l'utiliser en tant que paramètre de *fonction de chemin* et de laisser **FastAPI** gérer le reste pour vous, comme en utilisant l'objet `Request` directement.
 
 Il est tout de même possible d'utiliser `BackgroundTask` seul dans **FastAPI**, mais dans ce cas il faut créer l'objet dans le code et renvoyer une `Response` Starlette l'incluant.
 
index 304584498272f77d2d8ef5255bd380823a27db6f..1e732d3364f9d25f4bd8b4afd9fb0211aa92cf70 100644 (file)
@@ -162,4 +162,4 @@ Les paramètres de la fonction seront reconnus comme tel :
 
 ## Sans Pydantic
 
-Si vous ne voulez pas utiliser des modèles Pydantic, vous pouvez aussi utiliser des paramètres de **Corps**. Pour cela, allez voir la partie de la documentation sur  [Corps de la requête - Paramètres multiples](body-multiple-params.md){.internal-link target=_blank}.
\ No newline at end of file
+Si vous ne voulez pas utiliser des modèles Pydantic, vous pouvez aussi utiliser des paramètres de **Corps**. Pour cela, allez voir la partie de la documentation sur  [Corps de la requête - Paramètres multiples](body-multiple-params.md){.internal-link target=_blank}.
index 3a81362f608a7de31df54eee59dd8fce9ddc8e46..224c340c66e9390d7a98076b038b96584c4b2d3e 100644 (file)
@@ -280,7 +280,7 @@ Tout comme celles les plus exotiques :
 
     **FastAPI** n'impose pas de sens spécifique à chacune d'elle.
 
-    Les informations qui sont présentées ici forment une directive générale, pas des obligations.  
+    Les informations qui sont présentées ici forment une directive générale, pas des obligations.
 
     Par exemple, quand l'on utilise **GraphQL**, toutes les actions sont effectuées en utilisant uniquement des opérations `POST`.
 
index 58f53e008ea7849bf82492a4ff1c3d9baec314ec..894d62dd46108e9b760a0d9b5568ad87cd854d64 100644 (file)
@@ -8,7 +8,7 @@ Vous pouvez déclarer des "paramètres" ou "variables" de chemin avec la même s
 {!../../../docs_src/path_params/tutorial001.py!}
 ```
 
-La valeur du paramètre `item_id` sera transmise à la fonction dans l'argument `item_id`. 
+La valeur du paramètre `item_id` sera transmise à la fonction dans l'argument `item_id`.
 
 Donc, si vous exécutez cet exemple et allez sur <a href="http://127.0.0.1:8000/items/foo" class="external-link" target="_blank">http://127.0.0.1:8000/items/foo</a>,
 vous verrez comme réponse :
@@ -44,7 +44,7 @@ Si vous exécutez cet exemple et allez sur <a href="http://127.0.0.1:8000/items/
     Comme vous l'avez remarqué, la valeur reçue par la fonction (et renvoyée ensuite) est `3`,
     en tant qu'entier (`int`) Python, pas la chaîne de caractères (`string`) `"3"`.
 
-    Grâce aux déclarations de types, **FastAPI** fournit du 
+    Grâce aux déclarations de types, **FastAPI** fournit du
     <abbr title="conversion de la chaîne de caractères venant de la requête HTTP en données Python">"parsing"</abbr> automatique.
 
 ## Validation de données
@@ -91,7 +91,7 @@ documentation générée automatiquement et interactive :
 
     On voit bien dans la documentation que `item_id` est déclaré comme entier.
 
-## Les avantages d'avoir une documentation basée sur une norme, et la documentation alternative. 
+## Les avantages d'avoir une documentation basée sur une norme, et la documentation alternative.
 
 Le schéma généré suivant la norme <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md" class="external-link" target="_blank">OpenAPI</a>,
 il existe de nombreux outils compatibles.
@@ -102,7 +102,7 @@ sur <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">
 <img src="/img/tutorial/path-params/image02.png">
 
 De la même façon, il existe bien d'autres outils compatibles, y compris des outils de génération de code
-pour de nombreux langages. 
+pour de nombreux langages.
 
 ## Pydantic
 
index f1f2a605db14dfaa430170014d39c2fc444af8b2..7bf3b9e7942e5a499f423a318eb2fb43f2b634a5 100644 (file)
@@ -6,7 +6,7 @@ Quand vous déclarez des paramètres dans votre fonction de chemin qui ne font p
 {!../../../docs_src/query_params/tutorial001.py!}
 ```
 
-La partie appelée requête (ou **query**) dans une URL est l'ensemble des paires clés-valeurs placées après le `?` , séparées par des `&`. 
+La partie appelée requête (ou **query**) dans une URL est l'ensemble des paires clés-valeurs placées après le `?` , séparées par des `&`.
 
 Par exemple, dans l'URL :
 
@@ -120,7 +120,7 @@ ou n'importe quelle autre variation de casse (tout en majuscules, uniquement la
 
 ## Multiples paramètres de chemin et de requête
 
-Vous pouvez déclarer plusieurs paramètres de chemin et paramètres de requête dans la même fonction, **FastAPI** saura comment les gérer. 
+Vous pouvez déclarer plusieurs paramètres de chemin et paramètres de requête dans la même fonction, **FastAPI** saura comment les gérer.
 
 Et vous n'avez pas besoin de les déclarer dans un ordre spécifique.
 
index a7af14781a7316b258b028b2906fdfa447016b24..0bb7b55e3b0659d064ee8bcada3f3b918a6d345b 100644 (file)
@@ -321,7 +321,7 @@ And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" targe
 
 ### Recap
 
-In summary, you declare **once** the types of parameters, body, etc. as function parameters. 
+In summary, you declare **once** the types of parameters, body, etc. as function parameters.
 
 You do that with standard modern Python types.
 
@@ -378,7 +378,7 @@ Coming back to the previous code example, **FastAPI** will:
     * As the `q` parameter is declared with `= None`, it is optional.
     * Without the `None` it would be required (as is the body in the case with `PUT`).
 * For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
-    * Check that it has a required attribute `name` that should be a `str`. 
+    * Check that it has a required attribute `name` that should be a `str`.
     * Check that it has a required attribute `price` that has to be a `float`.
     * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
     * All this would also work for deeply nested JSON objects.
index e9e4285614f0b3b834ba4ede7a9226935920b11d..6acf925528935504667a0f28334a7abd1ae5e18b 100644 (file)
@@ -318,7 +318,7 @@ And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" targe
 
 ### Recap
 
-In summary, you declare **once** the types of parameters, body, etc. as function parameters. 
+In summary, you declare **once** the types of parameters, body, etc. as function parameters.
 
 You do that with standard modern Python types.
 
@@ -375,7 +375,7 @@ Coming back to the previous code example, **FastAPI** will:
     * As the `q` parameter is declared with `= None`, it is optional.
     * Without the `None` it would be required (as is the body in the case with `PUT`).
 * For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
-    * Check that it has a required attribute `name` that should be a `str`. 
+    * Check that it has a required attribute `name` that should be a `str`.
     * Check that it has a required attribute `price` that has to be a `float`.
     * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
     * All this would also work for deeply nested JSON objects.
index 27e3c8846dfeea67aa53c5ea57f549154e7b11e4..ca6b29a0776dbd6bd9069c0e0197935b2f8985d1 100644 (file)
@@ -193,7 +193,7 @@ Flask、Flask-apispec、Marshmallow、Webargsの組み合わせは、**FastAPI**
 
 * <a href="https://github.com/tiangolo/full-stack" class="external-link" target="_blank">https://github.com/tiangolo/full-stack</a>
 * <a href="https://github.com/tiangolo/full-stack-flask-couchbase" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-flask-couchbase</a>
-* <a href="https://github.com/tiangolo/full-stack-flask-couchdb" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-flask-couchdb</a> 
+* <a href="https://github.com/tiangolo/full-stack-flask-couchdb" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-flask-couchdb</a>
 
 そして、これらのフルスタックジェネレーターは、[**FastAPI** Project Generators](project-generation.md){.internal-link target=_blank}の元となっていました。
 
@@ -295,7 +295,7 @@ OpenAPIやJSON Schemaのような標準に基づいたものではありませ
     HugはAPIStarに部分的なインスピレーションを与えており、私が発見した中ではAPIStarと同様に最も期待の持てるツールの一つでした。
 
     Hugは、**FastAPI**がPythonの型ヒントを用いてパラメータを宣言し自動的にAPIを定義するスキーマを生成することを触発しました。
-    
+
     Hugは、**FastAPI**がヘッダーやクッキーを設定するために関数に `response`引数を宣言することにインスピレーションを与えました。
 
 ### <a href="https://github.com/encode/apistar" class="external-link" target="_blank">APIStar</a> (<= 0.5)
index eff4f2f4332a74f5d45b306ca2d04f06c5efe078..8fac2cb38632ef7ec6d3227de79b187a19ac1abf 100644 (file)
@@ -361,7 +361,7 @@ async def read_burgers():
     この部分は**FastAPI**の仕組みに関する非常に技術的な詳細です。
 
     かなりの技術知識 (コルーチン、スレッド、ブロッキングなど) があり、FastAPIが `async def` と通常の `def` をどのように処理するか知りたい場合は、先に進んでください。
-    
+
 ### Path operation 関数
 
 *path operation 関数*を `async def` の代わりに通常の `def` で宣言すると、(サーバーをブロックするので) 直接呼び出す代わりに外部スレッドプール (awaitされる) で実行されます。
index 2ce81b551814978777a05ef8dc702ceccf328647..40710a93a1ab7486e7d2c680bc689253e8fec134 100644 (file)
@@ -4,4 +4,4 @@
 
 ユースケースや使用しているツールによっていくつかの方法に分かれます。
 
-次のセクションでより詳しくそれらの方法について説明します。
\ No newline at end of file
+次のセクションでより詳しくそれらの方法について説明します。
index 3296ba76f2def7457a1eced1dfcb0a6d6f7130cb..dd4b568bdcd655346f79c4ee65c694e000426deb 100644 (file)
@@ -20,7 +20,7 @@
 
 !!! tip "豆知識"
     `standard` を加えることで、Uvicornがインストールされ、いくつかの推奨される依存関係を利用するようになります。
-    
+
     これには、`asyncio` の高性能な完全互換品である `uvloop` が含まれ、並行処理のパフォーマンスが大幅に向上します。
 
 === "Hypercorn"
index 778252d4e2695054a3e038f21c68be6a7adbab65..d0d1230c4b9d03c3fcf5166e10531ee19902c22d 100644 (file)
@@ -77,4 +77,4 @@
 
 **FastAPI**には大きな未来が待っています。
 
-そして、[あなたの助け](help-fastapi.md){.internal-link target=_blank}を大いに歓迎します。
\ No newline at end of file
+そして、[あなたの助け](help-fastapi.md){.internal-link target=_blank}を大いに歓迎します。
index 59388d904b44a93354ba8d840fef380cc271b93c..d2559205bd5767f8c3fc85749a4f4ff617e26bca 100644 (file)
@@ -114,7 +114,7 @@ APIはほとんどの場合 **レスポンス** ボディを送らなければ
     <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a>エディタを使用している場合は、<a href="https://github.com/koxudaxi/pydantic-pycharm-plugin/" class="external-link" target="_blank">Pydantic PyCharm Plugin</a>が使用可能です。
 
     以下のエディターサポートが強化されます:
-    
+
     * 自動補完
     * 型チェック
     * リファクタリング
@@ -157,7 +157,7 @@ APIはほとんどの場合 **レスポンス** ボディを送らなければ
 
 !!! note "備考"
     FastAPIは、`= None`があるおかげで、`q`がオプショナルだとわかります。
+
     `Optional[str]` の`Optional` はFastAPIでは使用されていません(FastAPIは`str`の部分のみ使用します)。しかし、`Optional[str]` はエディタがコードのエラーを見つけるのを助けてくれます。
 
 ## Pydanticを使わない方法
index f2a22119bbf76b52a6368db8aa3e2e7a96f3422d..973eb2b1a96a3571af563e4d52b7d4107fbba512 100644 (file)
@@ -35,7 +35,7 @@
 !!! tip "豆知識"
     <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers" class="external-link" target="_blank">'X-'プレフィックスを使用</a>してカスタムの独自ヘッダーを追加できます。
 
-    ただし、ブラウザのクライアントに表示させたいカスタムヘッダーがある場合は、<a href="https://www.starlette.io/middleware/#corsmiddleware" class="external-link" target="_blank">StarletteのCORSドキュメント</a>に記載されているパラメータ `expose_headers` を使用して、それらをCORS設定に追加する必要があります ([CORS (オリジン間リソース共有)](cors.md){.internal-link target=_blank}) 
+    ただし、ブラウザのクライアントに表示させたいカスタムヘッダーがある場合は、<a href="https://www.starlette.io/middleware/#corsmiddleware" class="external-link" target="_blank">StarletteのCORSドキュメント</a>に記載されているパラメータ `expose_headers` を使用して、それらをCORS設定に追加する必要があります ([CORS (オリジン間リソース共有)](cors.md){.internal-link target=_blank})
 
 !!! note "技術詳細"
     `from starlette.requests import Request` を使用することもできます。
index 452ca0c989ea60177ef44a3b7c1d7d9f733c0d73..66de05afb1339afe2c4e82b14b05da5dab409b1d 100644 (file)
@@ -139,7 +139,7 @@ Pythonのformat文字列と同様のシンタックスで「パスパラメー
 
 ### *パスパラメータ*の宣言
 
-次に、作成したenumクラスである`ModelName`を使用した型アノテーションをもつ*パスパラメータ*を作成します: 
+次に、作成したenumクラスである`ModelName`を使用した型アノテーションをもつ*パスパラメータ*を作成します:
 
 ```Python hl_lines="16"
 {!../../../docs_src/path_params/tutorial005.py!}
index 91783a53a190afe9a84493a7570399f8a6807511..9f8c6ab9f2b55ca332317658a656ff7ce0e86838 100644 (file)
@@ -18,7 +18,7 @@ http://127.0.0.1:8000/items/?skip=0&limit=10
 ...クエリパラメータは:
 
 * `skip`: 値は `0`
-* `limit`: 値は `10` 
+* `limit`: 値は `10`
 
 これらはURLの一部なので、「自然に」文字列になります。
 
@@ -75,7 +75,7 @@ http://127.0.0.1:8000/items/?skip=20
 
 !!! note "備考"
     FastAPIは、`= None`があるおかげで、`q`がオプショナルだとわかります。
-    
+
     `Optional[str]` の`Optional` はFastAPIでは使用されていません(FastAPIは`str`の部分のみ使用します)。しかし、`Optional[str]` はエディタがコードのエラーを見つけるのを助けてくれます。
 
 ## クエリパラメータの型変換
@@ -116,7 +116,7 @@ http://127.0.0.1:8000/items/foo?short=on
 http://127.0.0.1:8000/items/foo?short=yes
 ```
 
-もしくは、他の大文字小文字のバリエーション (アッパーケース、最初の文字だけアッパーケース、など)で、関数は `short` パラメータを `True` な `bool` 値として扱います。それ以外は `False` になります。  
+もしくは、他の大文字小文字のバリエーション (アッパーケース、最初の文字だけアッパーケース、など)で、関数は `short` パラメータを `True` な `bool` 値として扱います。それ以外は `False` になります。
 
 ## 複数のパスパラメータとクエリパラメータ
 
index 06105c9ef6ce499a3ff087082104f33f17baab03..bce6e8d9a60f66e92b042431f5bcdb0d2cfb3e58 100644 (file)
@@ -45,7 +45,7 @@ HTMLフォーム(`<form></form>`)がサーバにデータを送信する方
     フォームからのデータは通常、`application/x-www-form-urlencoded`の「media type」を使用してエンコードされます。
 
     しかし、フォームがファイルを含む場合は、`multipart/form-data`としてエンコードされます。ファイルの扱いについては次の章で説明します。
-    
+
     これらのエンコーディングやフォームフィールドの詳細については、<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network">MDN</abbr>の<code>POST</code></a>のウェブドキュメントを参照してください。
 
 !!! warning "注意"
index 3db493294047eb0876fd6a7898fab9c352e17645..03b0e1deef3591dce114ee69fb27f6c236449993 100644 (file)
@@ -36,7 +36,7 @@
 
 !!! tip "豆知識"
     FastAPIアプリケーションへのリクエストの送信とは別に、テストで `async` 関数 (非同期データベース関数など) を呼び出したい場合は、高度なチュートリアルの[Async Tests](../advanced/async-tests.md){.internal-link target=_blank} を参照してください。
-    
+
 ## テストの分離
 
 実際のアプリケーションでは、おそらくテストを別のファイルに保存します。
     `TestClient` は、Pydanticモデルではなく、JSONに変換できるデータを受け取ることに注意してください。
 
     テストにPydanticモデルがあり、テスト中にそのデータをアプリケーションに送信したい場合は、[JSON互換エンコーダ](encoder.md){.internal-link target=_blank} で説明されている `jsonable_encoder` が利用できます。
-    
+
 ## 実行
 
 後は、`pytest` をインストールするだけです:
index 4c1bcdc2e4392a76d354e7d34f3dfa21161cd551..074c15158be6f9cb5f68c1b2fb38f484e52af6ab 100644 (file)
@@ -6,7 +6,7 @@
 
 이것이 아직도 최신 버전이 `0.x.x`인 이유입니다. 이것은 각각의 버전들이 잠재적으로 변할 수 있다는 것을 보여줍니다. 이는 <a href="https://semver.org/" class="external-link" target="_blank">유의적 버전</a> 관습을 따릅니다.
 
-지금 바로 **FastAPI**로 응용 프로그램을 만들 수 있습니다. 이때 (아마 지금까지 그래 왔던 것처럼), 사용하는 버전이 코드와 잘 맞는지 확인해야합니다.  
+지금 바로 **FastAPI**로 응용 프로그램을 만들 수 있습니다. 이때 (아마 지금까지 그래 왔던 것처럼), 사용하는 버전이 코드와 잘 맞는지 확인해야합니다.
 
 ## `fastapi` 버전을 표시
 
@@ -46,7 +46,7 @@ FastAPI는 오류를 수정하고, 일반적인 변경사항을 위해 "패치"
 !!! tip "팁"
     여기서 말하는 "패치"란 버전의 마지막 숫자로, 예를 들어 `0.2.3` 버전에서 "패치"는 `3`을 의미합니다.
 
-따라서 다음과 같이 버전을 표시할 수 있습니다: 
+따라서 다음과 같이 버전을 표시할 수 있습니다:
 
 ```txt
 fastapi>=0.45.0,<0.46.0
@@ -71,7 +71,7 @@ fastapi>=0.45.0,<0.46.0
 
 `starlette`의 버전은 표시할 수 없습니다.
 
-서로다른 버전의 **FastAPI**가 구체적이고 새로운 버전의 Starlette을 사용할 것입니다. 
+서로다른 버전의 **FastAPI**가 구체적이고 새로운 버전의 Starlette을 사용할 것입니다.
 
 그러므로 **FastAPI**가 알맞은 Starlette 버전을 사용하도록 하십시오.
 
index 1c46b32ba0067cc8d666609dd2f52ca600a9b7c7..484554e973ea373c01a203227eb6cb4dc8eb7057 100644 (file)
@@ -57,7 +57,7 @@
 
 타입 정의에서 리스트를 사용하여 이러한 케이스를 정의할 수 있습니다.
 
-중복 헤더의 모든 값을 파이썬 `list`로 수신합니다. 
+중복 헤더의 모든 값을 파이썬 `list`로 수신합니다.
 
 예를 들어, 두 번 이상 나타날 수 있는 `X-Token`헤더를 선언하려면, 다음과 같이 작성합니다:
 
index ede63f69d5c484f5815a5e879e6c81aefadefc49..5cf397e7ae0e2a33e19d63ab9c76554ecd772271 100644 (file)
@@ -241,4 +241,4 @@ Starlette에서 직접 옵션을 사용하면 다음과 같은 URL을 사용하
 
 위 사항들을 그저 한번에 선언하면 됩니다.
 
-이는 (원래 성능과는 별개로) 대체 프레임워크와 비교했을 때 **FastAPI**의 주요 가시적 장점일 것입니다.
\ No newline at end of file
+이는 (원래 성능과는 별개로) 대체 프레임워크와 비교했을 때 **FastAPI**의 주요 가시적 장점일 것입니다.
index 769a676cd82db32b561d972777f7aa77fb7f96b6..decefe981fef7d12c26ae377004467b87df593aa 100644 (file)
@@ -13,7 +13,7 @@
 
 `fastapi` 에서 `File` 과 `UploadFile` 을 임포트 합니다:
 
-```Python hl_lines="1" 
+```Python hl_lines="1"
 {!../../../docs_src/request_files/tutorial001.py!}
 ```
 
@@ -21,7 +21,7 @@
 
 `Body` 및 `Form` 과 동일한 방식으로 파일의 매개변수를 생성합니다:
 
-```Python hl_lines="7" 
+```Python hl_lines="7"
 {!../../../docs_src/request_files/tutorial001.py!}
 ```
 
@@ -45,7 +45,7 @@
 
 `File` 매개변수를 `UploadFile` 타입으로 정의합니다:
 
-```Python hl_lines="12" 
+```Python hl_lines="12"
 {!../../../docs_src/request_files/tutorial001.py!}
 ```
 
@@ -97,7 +97,7 @@ contents = myfile.file.read()
 
 ## "폼 데이터"란
 
-HTML의 폼들(`<form></form>`)이 서버에 데이터를 전송하는 방식은 대개 데이터에 JSON과는 다른 "특별한" 인코딩을 사용합니다. 
+HTML의 폼들(`<form></form>`)이 서버에 데이터를 전송하는 방식은 대개 데이터에 JSON과는 다른 "특별한" 인코딩을 사용합니다.
 
 **FastAPI**는 JSON 대신 올바른 위치에서 데이터를 읽을 수 있도록 합니다.
 
@@ -121,7 +121,7 @@ HTML의 폼들(`<form></form>`)이 서버에 데이터를 전송하는 방식은
 
 이 기능을 사용하기 위해 , `bytes` 의 `List` 또는 `UploadFile` 를 선언하기 바랍니다:
 
-```Python hl_lines="10  15" 
+```Python hl_lines="10  15"
 {!../../../docs_src/request_files/tutorial002.py!}
 ```
 
index 6750c7b238dd7fb3c0abd84c4af63d96ce98ca8a..ddf232e7fedd47561b8b58db9980299f862ea5cd 100644 (file)
@@ -9,7 +9,7 @@
 
 ## `File` 및 `Form` 업로드
 
-```Python hl_lines="1" 
+```Python hl_lines="1"
 {!../../../docs_src/request_forms_and_files/tutorial001.py!}
 ```
 
@@ -17,7 +17,7 @@
 
 `Body` 및 `Query`와 동일한 방식으로 파일과 폼의 매개변수를 생성합니다:
 
-```Python hl_lines="8" 
+```Python hl_lines="8"
 {!../../../docs_src/request_forms_and_files/tutorial001.py!}
 ```
 
index d201867a186b9a72455bf773735bc13cefa9f759..f92c057be4fd92c8581fbbf26f5988c9ee4b5513 100644 (file)
@@ -8,11 +8,11 @@
 * `@app.delete()`
 * 기타
 
-```Python hl_lines="6" 
+```Python hl_lines="6"
 {!../../../docs_src/response_status_code/tutorial001.py!}
 ```
 
-!!! note "참고" 
+!!! note "참고"
     `status_code` 는 "데코레이터" 메소드(`get`, `post` 등)의 매개변수입니다. 모든 매개변수들과 본문처럼 *경로 작동 함수*가 아닙니다.
 
 `status_code` 매개변수는 HTTP 상태 코드를 숫자로 입력받습니다.
@@ -27,7 +27,7 @@
 
 <img src="https://fastapi.tiangolo.com/img/tutorial/response-status-code/image01.png">
 
-!!! note "참고" 
+!!! note "참고"
     어떤 응답 코드들은 해당 응답에 본문이 없다는 것을 의미하기도 합니다 (다음 항목 참고).
 
     이에 따라 FastAPI는 응답 본문이 없음을 명시하는 OpenAPI를 생성합니다.
@@ -61,7 +61,7 @@ HTTP는 세자리의 숫자 상태 코드를 응답의 일부로 전송합니다
 
 상기 예시 참고:
 
-```Python hl_lines="6" 
+```Python hl_lines="6"
 {!../../../docs_src/response_status_code/tutorial001.py!}
 ```
 
@@ -71,7 +71,7 @@ HTTP는 세자리의 숫자 상태 코드를 응답의 일부로 전송합니다
 
 `fastapi.status` 의 편의 변수를 사용할 수 있습니다.
 
-```Python hl_lines="1  6" 
+```Python hl_lines="1  6"
 {!../../../docs_src/response_status_code/tutorial002.py!}
 ```
 
index 1a97214af8ef5c06ae1d001d5d22c5cd6af9707e..ed8752a95a6715508f842e857c0fb8a5eced6e3b 100644 (file)
@@ -78,4 +78,3 @@ Jest też **Zaawansowany poradnik**, który możesz przeczytać po lekturze tego
 Najpierw jednak  powinieneś przeczytać **Samouczek** (czytasz go teraz).
 
 Ten rozdział jest zaprojektowany tak, że możesz stworzyć kompletną aplikację używając tylko informacji tutaj zawartych, a następnie rozszerzać ją na różne sposoby, w zależności od potrzeb, używając kilku dodatkowych pomysłów z **Zaawansowanego poradnika**.
-
index 6559b7398cfcbff2aa027b759abdd59d2f2f1a05..61ee4f9000e10107d9b8b3d7d0d44d8b2de47036 100644 (file)
@@ -331,7 +331,7 @@ Agora APIStar é um conjunto de ferramentas para validar especificações OpenAP
     Existir.
 
     A idéia de declarar múltiplas coisas (validação de dados, serialização e documentação) com os mesmos tipos Python, que ao mesmo tempo fornecesse grande suporte ao editor, era algo que eu considerava uma brilhante idéia.
-    
+
     E após procurar por um logo tempo por um framework similar e testar muitas alternativas diferentes, APIStar foi a melhor opção disponível.
 
     Então APIStar parou de existir como um servidor e Starlette foi criado, e foi uma nova melhor fundação para tal sistema. Essa foi a inspiração final para construir **FastAPI**.
@@ -390,7 +390,7 @@ Essa é uma das principais coisas que **FastAPI** adiciona no topo, tudo baseado
     Controlar todas as partes web centrais. Adiciona recursos no topo.
 
     A classe `FastAPI` em si herda `Starlette`.
-    
+
     Então, qualquer coisa que você faz com Starlette, você pode fazer diretamente com **FastAPI**, pois ele é basicamente um Starlette com esteróides.
 
 ### <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>
index 44f4b5148ecaa565f10590c2c82d0b858331dc65..be1278a1b30984734307120e795df49dea31aee1 100644 (file)
@@ -94,7 +94,7 @@ Para "síncrono" (contrário de "assíncrono") também é utilizado o termo "seq
 
 Essa idéia de código **assíncrono** descrito acima é algo às vezes chamado de **"concorrência"**. E é diferente de **"paralelismo"**.
 
-**Concorrência** e **paralelismo** ambos são relacionados a "diferentes coisas acontecendo mais ou menos ao mesmo tempo". 
+**Concorrência** e **paralelismo** ambos são relacionados a "diferentes coisas acontecendo mais ou menos ao mesmo tempo".
 
 Mas os detalhes entre *concorrência* e *paralelismo* são bem diferentes.
 
@@ -134,7 +134,7 @@ Mas então, embora você ainda não tenha os hambúrgueres, seu trabalho no caix
 
 Mas enquanto você se afasta do balcão e senta na mesa com o número da sua chamada, você pode trocar sua atenção para seu _crush_ :heart_eyes:, e "trabalhar" nisso. Então você está novamente fazendo algo muito "produtivo", como flertar com seu _crush_ :heart_eyes:.
 
-Então o caixa diz que "seus hambúrgueres estão prontos" colocando seu número no balcão, mas você não corre que nem um maluco imediatamente quando o número exibido é o seu. Você sabe que ninguém irá roubar seus hambúrgueres porquê você tem o número de chamada, e os outros tem os números deles. 
+Então o caixa diz que "seus hambúrgueres estão prontos" colocando seu número no balcão, mas você não corre que nem um maluco imediatamente quando o número exibido é o seu. Você sabe que ninguém irá roubar seus hambúrgueres porquê você tem o número de chamada, e os outros tem os números deles.
 
 Então você espera que seu _crush_ :heart_eyes: termine a história que estava contando (terminar o trabalho atual / tarefa sendo processada), sorri gentilmente e diz que você está indo buscar os hambúrgueres.
 
@@ -358,9 +358,9 @@ Tudo isso é o que deixa o FastAPI poderoso (através do Starlette) e que o faz
 
 !!! warning
     Você pode provavelmente pular isso.
-    
+
     Esses são detalhes muito técnicos de como **FastAPI** funciona por baixo do capô.
-    
+
     Se você tem algum conhecimento técnico (corrotinas, threads, blocking etc) e está curioso sobre como o FastAPI controla o `async def` vs normal `def`, vá em frente.
 
 ### Funções de operação de rota
index 7f7c95ba1c65eb48ba1846e1ef6c8f111a9b4133..07461ce46387c245d202de468e54365bf00a5a20 100644 (file)
@@ -2,7 +2,7 @@
 
 As comparações independentes da TechEmpower mostram as aplicações **FastAPI** rodando com Uvicorn como <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">um dos _frameworks_ Python mais rápidos disponíveis</a>, somente atrás dos próprios Starlette e Uvicorn (utilizados internamente pelo FastAPI). (*)
 
-Mas quando se checa _benchmarks_ e comparações você deveria ter o seguinte em mente. 
+Mas quando se checa _benchmarks_ e comparações você deveria ter o seguinte em mente.
 
 ## Comparações e velocidade
 
index 086273a1df62cc0fe296a4e05ee632b58dcaa5ac..d82ce3414a7a073b813bb0e6baf212a5e67b30b5 100644 (file)
@@ -36,7 +36,7 @@ Você pode "acompanhar" (watch) o FastAPI no GitHub (clicando no botão com um "
 
 Podendo selecionar apenas "Novos Updates".
 
-Fazendo isto, serão enviadas notificações (em seu email) sempre que tiver novos updates (uma nova versão) com correções de bugs e novos recursos no **FastAPI** 
+Fazendo isto, serão enviadas notificações (em seu email) sempre que tiver novos updates (uma nova versão) com correções de bugs e novos recursos no **FastAPI**
 
 ## Conect-se com o autor
 
index 97044dd90c921f5125f7d8ded307f905f855ce41..c1a0dbf0dbbe0f22c228856e74f7970075e53c14 100644 (file)
@@ -365,7 +365,7 @@ Voltando ao código do exemplo anterior, **FastAPI** irá:
     * Como o parâmetro `q` é declarado com `= None`, ele é opcional.
     * Sem o `None` ele poderia ser obrigatório (como o corpo no caso de `PUT`).
 * Para requisições `PUT` para `/items/{item_id}`, lerá o corpo como JSON e:
-    * Verifica que tem um atributo obrigatório `name` que deve ser `str`. 
+    * Verifica que tem um atributo obrigatório `name` que deve ser `str`.
     * Verifica que tem um atributo obrigatório `price` que deve ser `float`.
     * Verifica que tem an atributo opcional `is_offer`, que deve ser `bool`, se presente.
     * Tudo isso também funciona para objetos JSON profundamente aninhados.
index df70afd4080bdd917917f11da01f7bcb7b32e273..9f12211c74010cf459f81ad0a7eae385c72ab56c 100644 (file)
@@ -313,4 +313,3 @@ O importante é que, usando tipos padrão de Python, em um único local (em vez
 
 !!! info "Informação"
     Se você já passou por todo o tutorial e voltou para ver mais sobre os tipos, um bom recurso é <a href = "https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html" class = "external-link "target =" _ blank "> a "cheat sheet" do `mypy` </a>.
-
index 5891185f36bf3fe116862887f473de607133cde6..5abc9117795faba028f94ba42dde3a874513ca08 100644 (file)
@@ -114,7 +114,7 @@ Mas você terá o mesmo suporte do editor no <a href="https://www.jetbrains.com/
     Se você utiliza o <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> como editor, você pode utilizar o <a href="https://github.com/koxudaxi/pydantic-pycharm-plugin/" class="external-link" target="_blank">Plugin do Pydantic para o PyCharm </a>.
 
     Melhora o suporte do editor para seus modelos Pydantic com::
-    
+
     * completação automática
     * verificação de tipos
     * refatoração
index fc5e4447198f61e744a7d7512bae652128ed4cc9..4c44fc22d37f478676c684f1c69704ed58b8f336 100644 (file)
@@ -228,7 +228,7 @@ def results():
 
 И то же самое с большинством веб-приложений.
 
-Пользователей очень много, но ваш сервер всё равно вынужден ждать 🕙 запросы по их слабому интернет-соединению. 
+Пользователей очень много, но ваш сервер всё равно вынужден ждать 🕙 запросы по их слабому интернет-соединению.
 
 Потом снова ждать 🕙, пока вернётся ответ.
 
@@ -379,7 +379,7 @@ async def read_burgers():
     burgers = await get_burgers(2)
     return burgers
 ```
+
 ### Технические подробности
 
 Как вы могли заметить, `await` может применяться только в функциях, объявленных с использованием `async def`.
index c0a958c3d742162561b77e9effd7f0ebbc6f6d78..a1d3022762cfd397fd2d6704d3cf32f9a4be2b94 100644 (file)
@@ -321,7 +321,7 @@ And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" targe
 
 ### Recap
 
-In summary, you declare **once** the types of parameters, body, etc. as function parameters. 
+In summary, you declare **once** the types of parameters, body, etc. as function parameters.
 
 You do that with standard modern Python types.
 
@@ -378,7 +378,7 @@ Coming back to the previous code example, **FastAPI** will:
     * As the `q` parameter is declared with `= None`, it is optional.
     * Without the `None` it would be required (as is the body in the case with `PUT`).
 * For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
-    * Check that it has a required attribute `name` that should be a `str`. 
+    * Check that it has a required attribute `name` that should be a `str`.
     * Check that it has a required attribute `price` that has to be a `float`.
     * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
     * All this would also work for deeply nested JSON objects.
index 99670363c8432fc7e993f4586e1309afdc1ee360..7523083c8831955b89eb6a24d6f5f1f254fb1fee 100644 (file)
@@ -1,6 +1,6 @@
 # Введение в аннотации типов Python
 
-Python имеет поддержку необязательных аннотаций типов. 
+Python имеет поддержку необязательных аннотаций типов.
 
 **Аннотации типов** являются специальным синтаксисом, который позволяет определять <abbr title="например: str, int, float, bool">тип</abbr> переменной.
 
index a7af14781a7316b258b028b2906fdfa447016b24..0bb7b55e3b0659d064ee8bcada3f3b918a6d345b 100644 (file)
@@ -321,7 +321,7 @@ And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" targe
 
 ### Recap
 
-In summary, you declare **once** the types of parameters, body, etc. as function parameters. 
+In summary, you declare **once** the types of parameters, body, etc. as function parameters.
 
 You do that with standard modern Python types.
 
@@ -378,7 +378,7 @@ Coming back to the previous code example, **FastAPI** will:
     * As the `q` parameter is declared with `= None`, it is optional.
     * Without the `None` it would be required (as is the body in the case with `PUT`).
 * For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
-    * Check that it has a required attribute `name` that should be a `str`. 
+    * Check that it has a required attribute `name` that should be a `str`.
     * Check that it has a required attribute `price` that has to be a `float`.
     * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
     * All this would also work for deeply nested JSON objects.
index 31d1d889c3ded72aa1d7c4c90f19952cb1a714a5..0bcda4e9c7f85ea17bf1cc487160654db5518130 100644 (file)
@@ -6,7 +6,7 @@
 
 ### Açık standartları temel alır
 
-* API oluşturma işlemlerinde <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank"><strong>OpenAPI</strong></a> buna <abbr title="also known as: endpoints, routes">path</abbr> <abbr title=" HTTP metodları olarak bilinen, POST, GET, PUT, DELETE">operasyonları </abbr>parametreleri, body talebi, güvenlik  gibi şeyler dahil olmak üzere deklare bunların deklare edilmesi. 
+* API oluşturma işlemlerinde <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank"><strong>OpenAPI</strong></a> buna <abbr title="also known as: endpoints, routes">path</abbr> <abbr title=" HTTP metodları olarak bilinen, POST, GET, PUT, DELETE">operasyonları </abbr>parametreleri, body talebi, güvenlik  gibi şeyler dahil olmak üzere deklare bunların deklare edilmesi.
 * Otomatik olarak data modelinin <a href="http://json-schema.org/" class="external-link" target="_blank"><strong>JSON Schema</strong></a> ile beraber dokümante edilmesi (OpenAPI'n kendisi zaten JSON Schema'ya dayanıyor).
 * Titiz bir çalışmanın sonucunda yukarıdaki standartlara uygun bir framework oluşturduk. Standartları pastanın üzerine sonradan eklenmiş bir çilek olarak görmedik.
 * Ayrıca bu bir çok dilde kullanılabilecek **client code generator** kullanımına da izin veriyor.
@@ -74,7 +74,7 @@ my_second_user: User = User(**second_user_data)
 
 ### Editor desteği
 
-Bütün framework kullanılması kolay ve sezgileri güçlü olması için tasarlandı, verilen bütün kararlar geliştiricilere en iyi geliştirme deneyimini yaşatmak üzere, bir çok editör üzerinde test edildi. 
+Bütün framework kullanılması kolay ve sezgileri güçlü olması için tasarlandı, verilen bütün kararlar geliştiricilere en iyi geliştirme deneyimini yaşatmak üzere, bir çok editör üzerinde test edildi.
 
 Son yapılan Python geliştiricileri anketinde, açık ara <a href="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features" class="external-link" target="_blank">en çok kullanılan özellik "oto-tamamlama" idi.</a>.
 
@@ -135,7 +135,7 @@ Bütün güvenlik şemaları OpenAPI'da tanımlanmış durumda, kapsadıkları:
 
 Bütün güvenlik özellikleri Starlette'den geliyor (**session cookies'de** dahil olmak üzere).
 
-Bütün hepsi tekrardan kullanılabilir aletler ve bileşenler olarak, kolayca sistemlerinize, data depolarınıza, ilişkisel ve NoSQL databaselerinize entegre edebileceğiniz şekilde yapıldı. 
+Bütün hepsi tekrardan kullanılabilir aletler ve bileşenler olarak, kolayca sistemlerinize, data depolarınıza, ilişkisel ve NoSQL databaselerinize entegre edebileceğiniz şekilde yapıldı.
 
 ### Dependency injection
 
@@ -206,4 +206,3 @@ Aynı şekilde, databaseden gelen objeyi de **direkt olarak isteğe** de tamamiy
 * **Genişletilebilir**:
     * Pydantic özelleştirilmiş data tiplerinin tanımlanmasının yapılmasına izin veriyor ayrıca validator decoratorü ile senin doğrulamaları genişletip, kendi doğrulayıcılarını yazmana izin veriyor.
 * 100% test kapsayıcılığı.
-    
index 19f46fb4c4acf0ffa47526f7c9e469ec652636d6..3195cd4409ac4e33f06808ee807f576e963bad64 100644 (file)
@@ -28,7 +28,7 @@
 
 ---
 
-FastAPI, Python 3.6+'nın standart type hintlerine dayanan modern ve hızlı (yüksek performanslı) API'lar oluşturmak için kullanılabilecek web framework'ü. 
+FastAPI, Python 3.6+'nın standart type hintlerine dayanan modern ve hızlı (yüksek performanslı) API'lar oluşturmak için kullanılabilecek web framework'ü.
 
 Ana özellikleri:
 
@@ -315,7 +315,7 @@ Server otomatik olarak yeniden başlamalı (çünkü yukarıda `uvicorn`'u çal
 
 ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)
 
-* Şimdi "Execute" butonuna tıkla, kullanıcı arayüzü otomatik olarak API'ın ile bağlantı kurarak ona bu parametreleri gönderecek ve sonucu karşına getirecek. 
+* Şimdi "Execute" butonuna tıkla, kullanıcı arayüzü otomatik olarak API'ın ile bağlantı kurarak ona bu parametreleri gönderecek ve sonucu karşına getirecek.
 
 ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)
 
@@ -329,7 +329,7 @@ Server otomatik olarak yeniden başlamalı (çünkü yukarıda `uvicorn`'u çal
 
 ### Özet
 
-Özetleyecek olursak, URL, sorgu veya request body'deki parametrelerini fonksiyon parametresi olarak kullanıyorsun. Bu parametrelerin veri tiplerini bir kere belirtmen yeterli. 
+Özetleyecek olursak, URL, sorgu veya request body'deki parametrelerini fonksiyon parametresi olarak kullanıyorsun. Bu parametrelerin veri tiplerini bir kere belirtmen yeterli.
 
 Type-hinting işlemini Python dilindeki standart veri tipleri ile yapabilirsin
 
@@ -381,14 +381,14 @@ Az önceki kod örneğine geri dönelim, **FastAPI**'ın yapacaklarına bir bak
 
 * `item_id`'nin `GET` ve `PUT` talepleri içinde olup olmadığının doğruluğunu kontol edecek.
 * `item_id`'nin tipinin `int` olduğunu `GET` ve `PUT` talepleri içinde olup olmadığının doğruluğunu kontol edecek.
-    * Eğer `GET` ve `PUT` içinde yok ise ve `int` değil ise, sebebini belirten bir hata mesajı gösterecek 
+    * Eğer `GET` ve `PUT` içinde yok ise ve `int` değil ise, sebebini belirten bir hata mesajı gösterecek
 * Opsiyonel bir `q` parametresinin `GET` talebi için (`http://127.0.0.1:8000/items/foo?q=somequery` içinde) olup olmadığını kontrol edecek
     * `q` parametresini `= None` ile oluşturduğumuz için, opsiyonel bir parametre olacak.
     * Eğer `None` olmasa zorunlu bir parametre olacak idi (bu yüzden body'de `PUT` parametresi var).
 * `PUT` talebi için `/items/{item_id}`'nin body'sini, JSON olarak okuyor:
-    * `name` adında bir parametetre olup olmadığını ve var ise onun `str` olup olmadığını kontol ediyor. 
-    * `price` adında bir parametetre olup olmadığını ve var ise onun `float` olup olmadığını kontol ediyor. 
-    * `is_offer` adında bir parametetre olup olmadığını ve var ise onun `bool` olup olmadığını kontol ediyor. 
+    * `name` adında bir parametetre olup olmadığını ve var ise onun `str` olup olmadığını kontol ediyor.
+    * `price` adında bir parametetre olup olmadığını ve var ise onun `float` olup olmadığını kontol ediyor.
+    * `is_offer` adında bir parametetre olup olmadığını ve var ise onun `bool` olup olmadığını kontol ediyor.
     * Bunların hepsini en derin JSON modellerinde bile yapacaktır.
 * Bütün veri tiplerini otomatik olarak JSON'a çeviriyor veya tam tersi.
 * Her şeyi dokümanlayıp, çeşitli yerlerde:
index 7e46bd0314dee121a3ae57d057343679923a9da7..3b9ab905079e51aa8b8d6b0456755a2a075b6d29 100644 (file)
@@ -29,7 +29,7 @@ Programın çıktısı:
 John Doe
 ```
 
-Fonksiyon sırayla şunları yapar: 
+Fonksiyon sırayla şunları yapar:
 
 * `first_name` ve `last_name` değerlerini alır.
 * `title()` ile değişkenlerin ilk karakterlerini büyütür.
index a7af14781a7316b258b028b2906fdfa447016b24..0bb7b55e3b0659d064ee8bcada3f3b918a6d345b 100644 (file)
@@ -321,7 +321,7 @@ And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" targe
 
 ### Recap
 
-In summary, you declare **once** the types of parameters, body, etc. as function parameters. 
+In summary, you declare **once** the types of parameters, body, etc. as function parameters.
 
 You do that with standard modern Python types.
 
@@ -378,7 +378,7 @@ Coming back to the previous code example, **FastAPI** will:
     * As the `q` parameter is declared with `= None`, it is optional.
     * Without the `None` it would be required (as is the body in the case with `PUT`).
 * For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
-    * Check that it has a required attribute `name` that should be a `str`. 
+    * Check that it has a required attribute `name` that should be a `str`.
     * Check that it has a required attribute `price` that has to be a `float`.
     * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
     * All this would also work for deeply nested JSON objects.
index 1cb724f1db14280193cf1acb4ca149801752bc99..40cceebee9e51cb175d8121ddab0c4bfb6fd49f2 100644 (file)
@@ -22,7 +22,7 @@
     当你直接返回一个像上面例子中的 `Response` 对象时,它会直接返回。
 
     FastAPI 不会用模型等对该响应进行序列化。
-    
+
     确保其中有你想要的数据,且返回的值为合法的 JSON(如果你使用 `JSONResponse` 的话)。
 
 !!! note "技术细节"
index 5f1a74e9e6bba229c31d6da65d5cfc68f56c77f1..155ce28828b0b022639ad7bcb10cc20f6fb4709d 100644 (file)
@@ -60,7 +60,7 @@
 正如你在 [直接返回响应](response-directly.md){.internal-link target=_blank} 中了解到的,你也可以通过直接返回响应在 *路径操作* 中直接重载响应。
 
 和上面一样的例子,返回一个 `HTMLResponse` 看起来可能是这样:
+
 ```Python hl_lines="2 7 19"
 {!../../../docs_src/custom_response/tutorial003.py!}
 ```
index 05926a9c8310c7df6c4a5447f96c95cc116bda66..797a878eb923b0c6072963cf458bf1559d0e4ee4 100644 (file)
@@ -10,7 +10,7 @@
 
 直接返回响应可能会有用处,比如返回自定义的响应头和 cookies。
 
-## 返回 `Response` 
+## 返回 `Response`
 
 事实上,你可以返回任意 `Response` 或者任意 `Response` 的子类。
 
@@ -62,4 +62,3 @@
 但是你仍可以参考 [OpenApI 中的额外响应](additional-responses.md){.internal-link target=_blank} 给响应编写文档。
 
 在后续的章节中你可以了解到如何使用/声明这些自定义的 `Response` 的同时还保留自动化的数据转换和文档等。
-
index c133d51b7d90e03d614f2653985e3ab171ff47d0..8991c72cd9b4b4d235176c56d58f4883b64a8c04 100644 (file)
@@ -22,7 +22,7 @@
     * 具有最佳性能,因为除了服务器本身外,它没有太多额外的代码。
     * 您不会直接在 Uvicorn 中编写应用程序。这意味着您的代码至少必须包含 Starlette(或 **FastAPI**)提供的代码。如果您这样做了(即直接在 Uvicorn 中编写应用程序),最终的应用程序会和使用了框架并且最小化了应用代码和 bug 的情况具有相同的性能损耗。
     * 如果要对比与 Uvicorn 对标的服务器,请将其与 Daphne,Hypercorn,uWSGI等应用服务器进行比较。
-* **Starlette**: 
+* **Starlette**:
     * 在 Uvicorn 后使用 Starlette,性能会略有下降。实际上,Starlette 使用 Uvicorn运行。因此,由于必须执行更多的代码,它只会比 Uvicorn 更慢。
     * 但它为您提供了构建简单的网络程序的工具,并具有基于路径的路由等功能。
     * 如果想对比与 Starlette 对标的开发框架,请将其与 Sanic,Flask,Django 等网络框架(或微框架)进行比较。
index 402668c47e4b6b43309f8ef1cdd761ca447dff36..95500d12be3a6d76c085ad266b5dee4aa3338773 100644 (file)
@@ -497,4 +497,4 @@ $ bash scripts/test-cov-html.sh
 
 </div>
 
-该命令生成了一个 `./htmlcov/` 目录,如果你在浏览器中打开 `./htmlcov/index.html` 文件,你可以交互式地浏览被测试所覆盖的代码区块,并注意是否缺少了任何区块。 
+该命令生成了一个 `./htmlcov/` 目录,如果你在浏览器中打开 `./htmlcov/index.html` 文件,你可以交互式地浏览被测试所覆盖的代码区块,并注意是否缺少了任何区块。
index 2d5ba29827bdb792ebe1298aa3836e2b229e3a84..fefe4b1973995c99d9f3d56653a640c95713d277 100644 (file)
@@ -193,7 +193,7 @@ FastAPI 有一个使用非常简单,但是非常强大的<abbr title='也叫
     * 没有新的模式定义 micro-language 需要学习。
     * 如果你知道 Python types,你就知道如何使用 Pydantic。
 * 和你 **<abbr title="集成开发环境,和代码编辑器类似">IDE</abbr>/<abbr title="一个检查代码错误的程序">linter</abbr>/brain** 适配:
-    * 因为 pydantic 数据结构仅仅是你定义的类的实例;自动补全,linting,mypy 以及你的直觉应该可以和你验证的数据一起正常工作。 
+    * 因为 pydantic 数据结构仅仅是你定义的类的实例;自动补全,linting,mypy 以及你的直觉应该可以和你验证的数据一起正常工作。
 * **更快**:
     * 在 <a href="https://pydantic-docs.helpmanual.io/benchmarks/" class="external-link" target="_blank">基准测试</a> 中,Pydantic 比其他被测试的库都要快。
 * 验证**复杂结构**:
index 6f3f5159bda7fcb1edaa0797d2d9fdf5d9d7d0ac..2a99950e31ea6841a6de64e76b56675b7da97359 100644 (file)
@@ -20,7 +20,7 @@
 * 破坏性更改 🚨
 * 开发技巧 ✅
 
-## 在推特上关注 FastAPI 
+## 在推特上关注 FastAPI
 
 <a href="https://twitter.com/fastapi" class="external-link" target="_blank">在 **Twitter** 上关注 @fastapi</a> 获取 **FastAPI** 的最新消息。🐦
 
 !!! tip "提示"
 
     如有问题,请在 <a href="https://github.com/tiangolo/fastapi/issues/new/choose" class="external-link" target="_blank">GitHub Issues</a> 里提问,在这里更容易得到 [FastAPI 专家](fastapi-people.md#experts){.internal-link target=_blank}的帮助。
-    
+
     聊天室仅供闲聊。
 
 我们之前还使用过 <a href="https://gitter.im/tiangolo/fastapi" class="external-link" target="_blank">Gitter chat</a>,但它不支持频道等高级功能,聊天也比较麻烦,所以现在推荐使用 Discord。
@@ -146,4 +146,3 @@ GitHub Issues 里提供了模板,指引您提出正确的问题,有利于获
 ---
 
 谢谢!🚀
-
index a1c010a0c06944a7b42759a15d924f5d81e47158..9f0134f683c9ef1b75055ff6ef57e5ca5983f92f 100644 (file)
@@ -83,7 +83,7 @@
 {!../../../docs_src/bigger_applications/app/routers/users.py!}
 ```
 
-### 使用 `APIRouter` 的*路径操作* 
+### 使用 `APIRouter` 的*路径操作*
 
 然后你可以使用它来声明*路径操作*。
 
@@ -334,7 +334,7 @@ from app.routers import items, users
     ```Python
     from .routers import items, users
     ```
-    
+
     第二个版本是「绝对导入」:
 
     ```Python
index 9deac646f3ec66e64ccc08c3e2d575cc460d8a61..7649ee6feafed56f6b6ed778b422c18b88a55ec0 100644 (file)
@@ -228,7 +228,7 @@ images: List[Image]
     但是 Pydantic 具有自动转换数据的功能。
 
     这意味着,即使你的 API 客户端只能将字符串作为键发送,只要这些字符串内容仅包含整数,Pydantic 就会对其进行转换并校验。
-    
+
     然后你接收的名为 `weights` 的 `dict` 实际上将具有 `int` 类型的键和 `float` 类型的值。
 
 ## 总结
index 176bb174e44d78cdaf27468e5aebf253b0fa73f2..43f20f8fcbd9cd3ca4440ce6dd7bd0a84ead446c 100644 (file)
 !!! Note "笔记"
 
     `PATCH` 没有 `PUT` 知名,也怎么不常用。
-    
+
     很多人甚至只用 `PUT` 实现部分更新。
-    
+
     **FastAPI** 对此没有任何限制,可以**随意**互换使用这两种操作。
-    
+
     但本指南也会分别介绍这两种操作各自的用途。
 
 ### 使用 Pydantic 的 `exclude_unset` 参数
@@ -95,7 +95,7 @@
 !!! note "笔记"
 
     注意,输入模型仍需验证。
-    
+
     因此,如果希望接收的部分更新数据可以省略其他所有属性,则要把模型中所有的属性标记为可选(使用默认值或 `None`)。
-    
+
     为了区分用于**更新**所有可选值的模型与用于**创建**包含必选值的模型,请参照[更多模型](extra-models.md){.internal-link target=_blank} 一节中的思路。
index e36e33c4fb0f5cb74e86c98e8cbc478482580c42..61ea371e5453e860ab791d09f2ea3bd8dcd01428 100644 (file)
 !!! tip "提示"
 
     有些编辑器会检查代码中没使用过的函数参数,并显示错误提示。
-    
+
     在*路径操作装饰器*中使用 `dependencies` 参数,可以确保在执行依赖项的同时,避免编辑器显示错误提示。
-    
+
     使用路径装饰器依赖项还可以避免开发新人误会代码中包含无用的未使用参数。
 
 !!! info "说明"
 
     本例中,使用的是自定义响应头 `X-Key` 和 `X-Token`。
-    
+
     但实际开发中,尤其是在实现安全措施时,最好使用 FastAPI 内置的[安全工具](../security/index.md){.internal-link target=_blank}(详见下一章)。
 
 ## 依赖项错误和返回值
index 5c367ff09ee4a780864b5836df2c7bd9030179b0..3f7afa32cd1b3479ca261abfb06e38ba1e728af8 100644 (file)
@@ -15,4 +15,3 @@
 ## 为一组路径操作定义依赖项
 
 稍后,[大型应用 - 多文件](../../tutorial/bigger-applications.md){.internal-link target=_blank}一章中会介绍如何使用多个文件创建大型应用程序,在这一章中,您将了解到如何为一组*路径操作*声明单个 `dependencies` 参数。
-
index 82e9f536d1c72ca98684b269b732a673ad499616..626fa15521b35584e71edda75f2d02e524dc843c 100644 (file)
@@ -101,7 +101,7 @@ common_parameters --> read_users
 !!! check "检查"
 
     注意,无需创建专门的类,并将之传递给 **FastAPI** 以进行「注册」或执行类似的操作。
-    
+
     只要把它传递给 `Depends`,**FastAPI** 就知道该如何执行后续操作。
 
 ## 要不要使用 `async`?
@@ -209,4 +209,4 @@ paying_user --> pro_items
 
 在声明需求时,所有这些依赖项还会把参数、验证等功能添加至路径操作。
 
-**FastAPI** 负责把上述内容全部添加到 OpenAPI 概图,并显示在交互文档中。
\ No newline at end of file
+**FastAPI** 负责把上述内容全部添加到 OpenAPI 概图,并显示在交互文档中。
index 76d3e9f44469b241dcbb617cb10e947a37e926ba..2963189b87926021249b635aeb50526afa360201 100644 (file)
@@ -44,7 +44,7 @@ FastAPI 支持创建含**子依赖项**的依赖项。
 !!! info "信息"
 
     注意,这里在*路径操作函数*中只声明了一个依赖项,即 `query_or_cookie_extractor` 。
-    
+
     但 **FastAPI** 必须先处理 `query_extractor`,以便在调用 `query_or_cookie_extractor` 时使用 `query_extractor` 返回的结果。
 
 ```mermaid
@@ -82,7 +82,7 @@ async def needy_dependency(fresh_value: str = Depends(get_value, use_cache=False
 !!! tip "提示"
 
     这些简单的例子现在看上去虽然没有什么实用价值,
-    
+
     但在**安全**一章中,您会了解到这些例子的用途,
-    
-    以及这些例子所能节省的代码量。
\ No newline at end of file
+
+    以及这些例子所能节省的代码量。
index 27aa5fc14becd1db01cb41b0a89404ee717f5dd7..ac3e076545f4827af95d6829a110b94838e9f3dd 100644 (file)
@@ -22,7 +22,7 @@
 下面是一些你可以使用的其他数据类型:
 
 * `UUID`:
-    * 一种标准的 "通用唯一标识符" ,在许多数据库和系统中用作ID。 
+    * 一种标准的 "通用唯一标识符" ,在许多数据库和系统中用作ID。
     * 在请求和响应中将以 `str` 表示。
 * `datetime.datetime`:
     * 一个 Python `datetime.datetime`.
index ab63a86501301d9122220ee910f0d2a66ef1995d..30fae99cf8fc26958c189da95d5d9b6725405d58 100644 (file)
@@ -30,7 +30,7 @@ $ uvicorn main:app --reload
     * `main`:`main.py` 文件(一个 Python「模块」)。
     * `app`:在 `main.py` 文件中通过 `app = FastAPI()` 创建的对象。
     * `--reload`:让服务器在更新代码后重新启动。仅在开发时使用该选项。
-    
+
 
 在输出中,会有一行信息像下面这样:
 
index 613a143ca8ac59d949bebeef4a6b29d1d48b41ca..9b066bc2cee65d8fc0ce5ed4fe7a17cd6c9ca39d 100644 (file)
@@ -286,4 +286,4 @@ FastAPI 支持先对异常进行某些处理,然后再使用 **FastAPI** 中
 
 虽然,本例只是输出了夸大其词的错误信息。
 
-但也足以说明,可以在处理异常之后再复用默认的异常处理器。
\ No newline at end of file
+但也足以说明,可以在处理异常之后再复用默认的异常处理器。
index ad0e08d30680b30f2f7bd6fb68fd412e7fbe3a87..f79b0e692d8cd37c37147801fbc6ae804d3ec297 100644 (file)
@@ -23,7 +23,7 @@
 !!! note "技术细节"
 
     也可以使用 `from starlette import status` 导入状态码。
-    
+
     **FastAPI** 的`fastapi.status` 和 `starlette.status` 一样,只是快捷方式。实际上,`fastapi.status` 直接继承自 Starlette。
 
 ## `tags` 参数
@@ -75,7 +75,7 @@ OpenAPI 概图会自动添加标签,供 API 文档接口使用:
 !!! check "检查"
 
     OpenAPI 规定每个*路径操作*都要有响应描述。
-    
+
     如果没有定义响应描述,**FastAPI** 则自动生成内容为 "Successful response" 的响应描述。
 
 <img src="/img/tutorial/path-operation-configuration/image03.png">
index d6c5efa03fb572e41611e46eb61ae1be6f8ac28e..8358cbad579c46bc4dd8a4b9a6d339c74b3dd054 100644 (file)
@@ -22,7 +22,7 @@
 
 !!! note
     路径参数总是必需的,因为它必须是路径的一部分。
-    
+
     所以,你应该在声明时使用 `...` 将其标记为必需参数。
 
     然而,即使你使用 `None` 声明路径参数或设置一个其他默认值也不会有任何影响,它依然会是必需参数。
index 26ece0d901e01c38708ffc128f1ae3128557b9d0..25657d93bd74a1c196d6397cd6027eeecd1600a6 100644 (file)
@@ -5,9 +5,9 @@
 !!! info "说明"
 
     因为上传文件以「表单数据」形式发送。
-    
+
     所以接收上传文件,要预先安装 <a href="https://andrew-d.github.io/python-multipart/" class="external-link" target="_blank">`python-multipart`</a>。
-    
+
     例如: `pip install python-multipart`。
 
 ## 导入 `File`
@@ -29,7 +29,7 @@
 !!! info "说明"
 
     `File` 是直接继承自 `Form` 的类。
-    
+
     注意,从 `fastapi` 导入的 `Query`、`Path`、`File` 等项,实际上是返回特定类的函数。
 
 !!! tip "提示"
@@ -109,15 +109,15 @@ contents = myfile.file.read()
 !!! note "技术细节"
 
     不包含文件时,表单数据一般用 `application/x-www-form-urlencoded`「媒体类型」编码。
-    
+
     但表单包含文件时,编码为 `multipart/form-data`。使用了 `File`,**FastAPI** 就知道要从请求体的正确位置获取文件。
-    
+
     编码和表单字段详见 <a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network">MDN</abbr> Web 文档的 <code>POST </code></a> 小节。
 
 !!! warning "警告"
 
     可在一个*路径操作*中声明多个 `File` 和 `Form` 参数,但不能同时声明要接收 JSON 的 `Body` 字段。因为此时请求体的编码是 `multipart/form-data`,不是 `application/json`。
-    
+
     这不是 **FastAPI** 的问题,而是 HTTP 协议的规定。
 
 ## 多文件上传
@@ -137,17 +137,17 @@ FastAPI 支持同时上传多个文件。
 !!! note "笔记"
 
     注意,截至 2019 年 4 月 14 日,Swagger UI 不支持在同一个表单字段中上传多个文件。详见 <a href="https://github.com/swagger-api/swagger-ui/issues/4276" class="external-link" target="_blank">#4276</a> 和 <a href="https://github.com/swagger-api/swagger-ui/issues/3641" class="external-link" target="_blank">#3641</a>.
-    
+
     不过,**FastAPI** 已通过 OpenAPI 标准与之兼容。
-    
+
     因此,只要 Swagger UI 或任何其他支持 OpenAPI 的工具支持多文件上传,都将与 **FastAPI** 兼容。
 
 !!! note "技术细节"
 
     也可以使用 `from starlette.responses import HTMLResponse`。
-    
+
     `fastapi.responses` 其实与 `starlette.responses` 相同,只是为了方便开发者调用。实际上,大多数 **FastAPI** 的响应都直接从 Starlette 调用。
 
 ## 小结
 
-本节介绍了如何用 `File` 把上传文件声明为(表单数据的)输入参数。
\ No newline at end of file
+本节介绍了如何用 `File` 把上传文件声明为(表单数据的)输入参数。
index a27ba93d5d0eb052f3a9cecf15fadc3977cb3bdf..70cd70f98650cdf6e992e492d87e32af60b57333 100644 (file)
@@ -5,7 +5,7 @@ FastAPI 支持同时使用 `File` 和 `Form` 定义文件和表单字段。
 !!! info "说明"
 
     接收上传文件或表单数据,要预先安装 <a href="https://andrew-d.github.io/python-multipart/" class="external-link" target="_blank">`python-multipart`</a>。
-    
+
     例如,`pip install python-multipart`。
 
 ## 导入 `File` 与 `Form`
@@ -29,10 +29,9 @@ FastAPI 支持同时使用 `File` 和 `Form` 定义文件和表单字段。
 !!! warning "警告"
 
     可在一个*路径操作*中声明多个 `File` 与 `Form` 参数,但不能同时声明要接收 JSON 的 `Body` 字段。因为此时请求体的编码为 `multipart/form-data`,不是 `application/json`。
-    
+
     这不是 **FastAPI** 的问题,而是 HTTP 协议的规定。
 
 ## 小结
 
 在同一个请求中接收数据和文件时,应同时使用 `File` 和 `Form`。
-
index 0840c9274ab66d5c08f9b3ccc22c85bccc063742..6436ffbcdc26e873a37e6b344688e198c4f95639 100644 (file)
@@ -5,7 +5,7 @@
 !!! info "说明"
 
     要使用表单,需预先安装 <a href="https://andrew-d.github.io/python-multipart/" class="external-link" target="_blank">`python-multipart`</a>。
-    
+
     例如,`pip install python-multipart`。
 
 ## 导入 `Form`
 !!! note "技术细节"
 
     表单数据的「媒体类型」编码一般为 `application/x-www-form-urlencoded`。
-    
+
     但包含文件的表单编码为 `multipart/form-data`。文件处理详见下节。
-    
+
     编码和表单字段详见 <a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network">MDN</abbr> Web 文档的 <code>POST</code></a>小节。
 
 !!! warning "警告"
 
     可在一个*路径操作*中声明多个 `Form` 参数,但不能同时声明要接收 JSON 的 `Body` 字段。因为此时请求体的编码是 `application/x-www-form-urlencoded`,不是 `application/json`。
-    
+
     这不是 **FastAPI** 的问题,而是 HTTP 协议的规定。
 
 ## 小结
 
-本节介绍了如何使用 `Form` 声明表单数据输入参数。
\ No newline at end of file
+本节介绍了如何使用 `Form` 声明表单数据输入参数。
index 42f8a7ce326e79b7bf05d616474bfec048e9b0b8..6482366b0cad8f8b654a2f0a3754f6a4d7a44df5 100644 (file)
@@ -31,7 +31,7 @@
 
 你可以通过传递额外信息给 `Field` 同样的方式操作`Path`, `Query`, `Body`等。
 
-比如,你可以将请求体的一个 `example` 传递给 `Body`: 
+比如,你可以将请求体的一个 `example` 传递给 `Body`:
 
 ```Python hl_lines="21-26"
 {!../../../docs_src/schema_extra_example/tutorial003.py!}
index 94f94cd440b63ab9a170b3e9051eca5ede727b1f..8f302a16c0d02b613d7191a8d92c7d3eac7c6e12 100644 (file)
@@ -98,4 +98,4 @@ FastAPI 在 `fastapi.security` 模块中为每个安全方案提供了几种工
 
 在下一章中,你将看到如何使用 **FastAPI** 所提供的这些工具为你的 API 增加安全性。
 
-而且你还将看到它如何自动地被集成到交互式文档系统中。
\ No newline at end of file
+而且你还将看到它如何自动地被集成到交互式文档系统中。
index d11895110140578ee8d93d60793bf6366a9c8ed0..82ef9b897e50a1206e3c80eebd23cd010f3052ed 100644 (file)
@@ -263,4 +263,3 @@ OAuth2 具有「作用域」的概念。
 而且你可以用相对简单的方式使用和实现安全、标准的协议,比如 OAuth2。
 
 你可以在**进阶用户指南**中了解更多关于如何使用 OAuth2 「作用域」的信息,以实现更精细的权限系统,并同样遵循这些标准。带有作用域的 OAuth2 是很多大的认证提供商使用的机制,比如 Facebook、Google、GitHub、微软、Twitter 等,授权第三方应用代表用户与他们的 API 进行交互。
-
index b23d0db05aca35ae92eb00f60a79a4b0c5371b70..5ffdf93ad371c3c5b2a6dbaa0fecbe896f677510 100644 (file)
@@ -85,6 +85,7 @@ dev = [
     "autoflake >=1.4.0,<2.0.0",
     "flake8 >=3.8.3,<4.0.0",
     "uvicorn[standard] >=0.12.0,<0.18.0",
+    "pre-commit >=2.17.0,<3.0.0",
 ]
 all = [
     "requests >=2.24.0,<3.0.0",