DefEssential 0.1.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. defessential-0.1.6/.github/ISSUE_TEMPLATE/01.feature.yml +37 -0
  2. defessential-0.1.6/.github/ISSUE_TEMPLATE/02.bug.yml +62 -0
  3. defessential-0.1.6/.github/ISSUE_TEMPLATE/03.fix.yml +55 -0
  4. defessential-0.1.6/.github/ISSUE_TEMPLATE/04.task.yml +38 -0
  5. defessential-0.1.6/.github/ISSUE_TEMPLATE/config.yml +1 -0
  6. defessential-0.1.6/.github/PULL_REQUEST_TEMPLATE.md +24 -0
  7. defessential-0.1.6/.github/workflows/ci.yml +471 -0
  8. defessential-0.1.6/.gitignore +56 -0
  9. defessential-0.1.6/DefEssential.egg-info/PKG-INFO +41 -0
  10. defessential-0.1.6/DefEssential.egg-info/SOURCES.txt +174 -0
  11. defessential-0.1.6/DefEssential.egg-info/dependency_links.txt +1 -0
  12. defessential-0.1.6/DefEssential.egg-info/requires.txt +7 -0
  13. defessential-0.1.6/DefEssential.egg-info/top_level.txt +1 -0
  14. defessential-0.1.6/LICENSE +674 -0
  15. defessential-0.1.6/PKG-INFO +41 -0
  16. defessential-0.1.6/README.md +7 -0
  17. defessential-0.1.6/issues/feature/2/ISSUE.md +11 -0
  18. defessential-0.1.6/issues/feature/2/README.md +182 -0
  19. defessential-0.1.6/issues/feature/2/REQUIREMENTS.md +212 -0
  20. defessential-0.1.6/issues/feature/4/IMPLEMENTS.md +51 -0
  21. defessential-0.1.6/issues/feature/4/ISSUE.md +13 -0
  22. defessential-0.1.6/issues/feature/4/PLAN.md +111 -0
  23. defessential-0.1.6/issues/feature/4/README.md +25 -0
  24. defessential-0.1.6/issues/feature/4/REQUIREMENTS.md +196 -0
  25. defessential-0.1.6/issues/feature/5/IMPLEMENTS.md +116 -0
  26. defessential-0.1.6/issues/feature/5/ISSUE.md +13 -0
  27. defessential-0.1.6/issues/feature/5/PLAN.md +128 -0
  28. defessential-0.1.6/issues/feature/5/README.md +54 -0
  29. defessential-0.1.6/issues/feature/5/REQUIREMENTS.md +182 -0
  30. defessential-0.1.6/issues/feature/6/IMPLEMENTS.md +160 -0
  31. defessential-0.1.6/issues/feature/6/ISSUE.md +14 -0
  32. defessential-0.1.6/issues/feature/6/PLAN.md +209 -0
  33. defessential-0.1.6/issues/feature/6/README.md +47 -0
  34. defessential-0.1.6/issues/feature/6/REQUIREMENTS.md +259 -0
  35. defessential-0.1.6/issues/task/8/IMPLEMENTS.md +39 -0
  36. defessential-0.1.6/issues/task/8/ISSUE.md +20 -0
  37. defessential-0.1.6/issues/task/8/PLAN.md +20 -0
  38. defessential-0.1.6/issues/task/8/README.md +7 -0
  39. defessential-0.1.6/issues/task/8/REQUIREMENTS.md +58 -0
  40. defessential-0.1.6/samples/README.md +173 -0
  41. defessential-0.1.6/samples/Sample.py +263 -0
  42. defessential-0.1.6/samples/__init__.py +1 -0
  43. defessential-0.1.6/samples/res/css/sample.css +28 -0
  44. defessential-0.1.6/samples/res/favicon.ico +0 -0
  45. defessential-0.1.6/samples/res/html/welcome.html +452 -0
  46. defessential-0.1.6/samples/res/images/sample.jpg +0 -0
  47. defessential-0.1.6/samples/res/images/sample.png +0 -0
  48. defessential-0.1.6/samples/runners/Authentication.py +293 -0
  49. defessential-0.1.6/samples/runners/ContentValidation.py +112 -0
  50. defessential-0.1.6/samples/runners/Requests.py +394 -0
  51. defessential-0.1.6/samples/runners/Streaming.py +239 -0
  52. defessential-0.1.6/samples/runners/__init__.py +1 -0
  53. defessential-0.1.6/samples/scripts/DescriptionToFile.py +36 -0
  54. defessential-0.1.6/samples/scripts/__init__.py +1 -0
  55. defessential-0.1.6/setup.cfg +4 -0
  56. defessential-0.1.6/setup.py +67 -0
  57. defessential-0.1.6/src/Adapter/Implements/Gunicorn/Server.py +134 -0
  58. defessential-0.1.6/src/Adapter/Implements/Gunicorn/Transport.py +171 -0
  59. defessential-0.1.6/src/Adapter/Implements/Gunicorn/__init__.py +5 -0
  60. defessential-0.1.6/src/Adapter/Implements/Python/Server.py +245 -0
  61. defessential-0.1.6/src/Adapter/Implements/Python/__init__.py +5 -0
  62. defessential-0.1.6/src/Adapter/Implements/Uvicorn/HTTP.py +256 -0
  63. defessential-0.1.6/src/Adapter/Implements/Uvicorn/Portal.py +65 -0
  64. defessential-0.1.6/src/Adapter/Implements/Uvicorn/Server.py +102 -0
  65. defessential-0.1.6/src/Adapter/Implements/Uvicorn/WebSocket.py +220 -0
  66. defessential-0.1.6/src/Adapter/Implements/Uvicorn/__init__.py +5 -0
  67. defessential-0.1.6/src/Adapter/Implements/__init__.py +3 -0
  68. defessential-0.1.6/src/Adapter/RequestHandler.py +70 -0
  69. defessential-0.1.6/src/Adapter/Server.py +54 -0
  70. defessential-0.1.6/src/Adapter/WSGI.py +219 -0
  71. defessential-0.1.6/src/Adapter/__init__.py +5 -0
  72. defessential-0.1.6/src/Application.py +579 -0
  73. defessential-0.1.6/src/Body.py +50 -0
  74. defessential-0.1.6/src/Content.py +18 -0
  75. defessential-0.1.6/src/Credentials.py +245 -0
  76. defessential-0.1.6/src/CrossOriginResourceSharing.py +107 -0
  77. defessential-0.1.6/src/Descriptor/DataObject.py +409 -0
  78. defessential-0.1.6/src/Descriptor/Types.py +248 -0
  79. defessential-0.1.6/src/Descriptor/Value.py +188 -0
  80. defessential-0.1.6/src/Descriptor/__init__.py +172 -0
  81. defessential-0.1.6/src/Error.py +66 -0
  82. defessential-0.1.6/src/Extension.py +184 -0
  83. defessential-0.1.6/src/Extensions/File.py +89 -0
  84. defessential-0.1.6/src/Extensions/FileSystem.py +184 -0
  85. defessential-0.1.6/src/Extensions/Metrics.py +500 -0
  86. defessential-0.1.6/src/Extensions/Ping.py +89 -0
  87. defessential-0.1.6/src/Extensions/Specifications.py +328 -0
  88. defessential-0.1.6/src/Extensions/Status.html +207 -0
  89. defessential-0.1.6/src/Extensions/Status.py +104 -0
  90. defessential-0.1.6/src/Extensions/Swagger.html +77 -0
  91. defessential-0.1.6/src/Extensions/Swagger.py +111 -0
  92. defessential-0.1.6/src/Extensions/Utils/Routes.py +42 -0
  93. defessential-0.1.6/src/Extensions/Utils/__init__.py +43 -0
  94. defessential-0.1.6/src/Extensions/__init__.py +21 -0
  95. defessential-0.1.6/src/IO/Readers/ChunkedStream.py +106 -0
  96. defessential-0.1.6/src/IO/Readers/ContentReader.py +36 -0
  97. defessential-0.1.6/src/IO/Readers/ContentReaders.py +241 -0
  98. defessential-0.1.6/src/IO/Readers/__init__.py +25 -0
  99. defessential-0.1.6/src/IO/RequestReader.py +125 -0
  100. defessential-0.1.6/src/IO/ResponseWriter.py +241 -0
  101. defessential-0.1.6/src/IO/WebSocket/WebSocket.py +282 -0
  102. defessential-0.1.6/src/IO/WebSocket/WebSocketError.py +17 -0
  103. defessential-0.1.6/src/IO/WebSocket/WebSocketFrame.py +68 -0
  104. defessential-0.1.6/src/IO/WebSocket/WebSocketFrameReader.py +98 -0
  105. defessential-0.1.6/src/IO/WebSocket/WebSocketHandshake.py +94 -0
  106. defessential-0.1.6/src/IO/WebSocket/__init__.py +13 -0
  107. defessential-0.1.6/src/IO/Writers/ChunkedStreamWriter.py +19 -0
  108. defessential-0.1.6/src/IO/Writers/ServerSentEvents.py +41 -0
  109. defessential-0.1.6/src/IO/Writers/ServerSentEventsWriter.py +67 -0
  110. defessential-0.1.6/src/IO/Writers/StreamWriter.py +57 -0
  111. defessential-0.1.6/src/IO/Writers/__init__.py +11 -0
  112. defessential-0.1.6/src/IO/__init__.py +7 -0
  113. defessential-0.1.6/src/Request.py +110 -0
  114. defessential-0.1.6/src/RequestRunner.py +261 -0
  115. defessential-0.1.6/src/Response.py +87 -0
  116. defessential-0.1.6/src/ResponseSpecification.py +23 -0
  117. defessential-0.1.6/src/Responses/ResponseFile.py +108 -0
  118. defessential-0.1.6/src/Responses/__init__.py +63 -0
  119. defessential-0.1.6/src/Route.py +55 -0
  120. defessential-0.1.6/src/Router.py +48 -0
  121. defessential-0.1.6/src/Runners/RunExtension.py +101 -0
  122. defessential-0.1.6/src/Runners/RunFactory.py +26 -0
  123. defessential-0.1.6/src/Runners/RunOptions.py +77 -0
  124. defessential-0.1.6/src/Runners/RunRequest.py +121 -0
  125. defessential-0.1.6/src/Runners/__init__.py +5 -0
  126. defessential-0.1.6/src/Startup.py +104 -0
  127. defessential-0.1.6/src/Utils/FileSystemObject/Configuration.py +15 -0
  128. defessential-0.1.6/src/Utils/FileSystemObject/Connection.py +57 -0
  129. defessential-0.1.6/src/Utils/FileSystemObject/File.py +41 -0
  130. defessential-0.1.6/src/Utils/FileSystemObject/Implements/FileSystem/Configuration.py +15 -0
  131. defessential-0.1.6/src/Utils/FileSystemObject/Implements/FileSystem/Connection.py +115 -0
  132. defessential-0.1.6/src/Utils/FileSystemObject/Implements/FileSystem/File.py +77 -0
  133. defessential-0.1.6/src/Utils/FileSystemObject/Implements/FileSystem/__init__.py +11 -0
  134. defessential-0.1.6/src/Utils/FileSystemObject/Implements/__init__.py +3 -0
  135. defessential-0.1.6/src/Utils/FileSystemObject/__init__.py +11 -0
  136. defessential-0.1.6/src/Utils/Loader.py +81 -0
  137. defessential-0.1.6/src/Utils/__init__.py +3 -0
  138. defessential-0.1.6/src/Validator/Pattern.py +36 -0
  139. defessential-0.1.6/src/Validator/Patterns/Array.py +30 -0
  140. defessential-0.1.6/src/Validator/Patterns/Common.py +92 -0
  141. defessential-0.1.6/src/Validator/Patterns/Compare.py +180 -0
  142. defessential-0.1.6/src/Validator/Patterns/Condition.py +60 -0
  143. defessential-0.1.6/src/Validator/Patterns/DataObject.py +85 -0
  144. defessential-0.1.6/src/Validator/Patterns/DateTime.py +111 -0
  145. defessential-0.1.6/src/Validator/Patterns/Number.py +43 -0
  146. defessential-0.1.6/src/Validator/Patterns/Object.py +150 -0
  147. defessential-0.1.6/src/Validator/Patterns/Size.py +110 -0
  148. defessential-0.1.6/src/Validator/Patterns/String.py +85 -0
  149. defessential-0.1.6/src/Validator/Patterns/Type.py +350 -0
  150. defessential-0.1.6/src/Validator/Patterns/__init__.py +137 -0
  151. defessential-0.1.6/src/Validator/Validate.py +29 -0
  152. defessential-0.1.6/src/Validator/Validator.py +30 -0
  153. defessential-0.1.6/src/Validator/__init__.py +11 -0
  154. defessential-0.1.6/src/Validators.py +255 -0
  155. defessential-0.1.6/src/__init__.py +83 -0
  156. defessential-0.1.6/tests/test_adapters.py +849 -0
  157. defessential-0.1.6/tests/test_application_hooks.py +375 -0
  158. defessential-0.1.6/tests/test_builtin_factories.py +625 -0
  159. defessential-0.1.6/tests/test_content.py +250 -0
  160. defessential-0.1.6/tests/test_core.py +538 -0
  161. defessential-0.1.6/tests/test_exports.py +95 -0
  162. defessential-0.1.6/tests/test_extension_hooks.py +801 -0
  163. defessential-0.1.6/tests/test_extensions.py +729 -0
  164. defessential-0.1.6/tests/test_features.py +409 -0
  165. defessential-0.1.6/tests/test_files.py +250 -0
  166. defessential-0.1.6/tests/test_independence.py +111 -0
  167. defessential-0.1.6/tests/test_loading.py +61 -0
  168. defessential-0.1.6/tests/test_request_runner_hooks.py +1035 -0
  169. defessential-0.1.6/tests/test_samples.py +686 -0
  170. defessential-0.1.6/tests/test_server.py +266 -0
  171. defessential-0.1.6/tests/test_sse.py +178 -0
  172. defessential-0.1.6/tests/test_startup.py +285 -0
  173. defessential-0.1.6/tests/test_transport_conformance.py +504 -0
  174. defessential-0.1.6/tests/test_uvicorn_transport.py +90 -0
  175. defessential-0.1.6/tests/test_websocket.py +512 -0
  176. defessential-0.1.6/tests/test_writers.py +910 -0
@@ -0,0 +1,37 @@
1
+ name: 기능 제안
2
+ description: 추가하거나 개선할 기능을 제안합니다.
3
+ labels:
4
+ - feature
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: >
9
+ 해결하려는 문제와 제안하는 사용 경험을 중심으로 작성해 주세요.
10
+ - type: textarea
11
+ id: problem
12
+ attributes:
13
+ label: 해결하려는 문제
14
+ description: 현재 어떤 불편이나 제약이 있는지 설명해 주세요.
15
+ validations:
16
+ required: true
17
+ - type: textarea
18
+ id: proposal
19
+ attributes:
20
+ label: 제안하는 해결 방법
21
+ description: 원하는 기능과 기대하는 동작을 설명해 주세요.
22
+ validations:
23
+ required: true
24
+ - type: textarea
25
+ id: alternatives
26
+ attributes:
27
+ label: 고려한 대안
28
+ description: 고려한 다른 방법이나 우회 방법이 있다면 적어 주세요.
29
+ validations:
30
+ required: false
31
+ - type: textarea
32
+ id: additional
33
+ attributes:
34
+ label: 추가 정보
35
+ description: 예제, 참고 자료 등 제안의 맥락을 이해하는 데 도움이 되는 정보를 적어 주세요.
36
+ validations:
37
+ required: false
@@ -0,0 +1,62 @@
1
+ name: 버그/오류 제보
2
+ description: 예상과 다르게 동작하거나 오류가 발생하는 문제를 제보합니다.
3
+ labels:
4
+ - bug
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: >
9
+ 재현 가능한 버그를 제보해 주세요. 로그나 설정을 첨부할 때 토큰, 비밀번호,
10
+ 개인정보 등 민감한 정보는 반드시 삭제해 주세요.
11
+ - type: input
12
+ id: version
13
+ attributes:
14
+ label: 버전
15
+ description: 사용 중인 버전 또는 커밋을 입력해 주세요.
16
+ placeholder: 예) 0.1.0
17
+ validations:
18
+ required: true
19
+ - type: textarea
20
+ id: expected
21
+ attributes:
22
+ label: 기대한 동작
23
+ description: 어떤 결과를 기대했는지 설명해 주세요.
24
+ validations:
25
+ required: true
26
+ - type: textarea
27
+ id: actual
28
+ attributes:
29
+ label: 실제 동작
30
+ description: 실제로 발생한 결과를 설명해 주세요. 오류가 표시되면 메시지도 포함해 주세요.
31
+ validations:
32
+ required: true
33
+ - type: textarea
34
+ id: reproduction
35
+ attributes:
36
+ label: 재현 방법
37
+ description: 문제를 재현하는 단계나 최소 코드 예제를 작성해 주세요.
38
+ placeholder: |
39
+ 1. 다음 설정으로 Application과 HTTP 서버를 시작합니다.
40
+ 2. 특정 HTTP 요청을 보냅니다.
41
+ 3. 오류가 발생합니다.
42
+ validations:
43
+ required: true
44
+ - type: textarea
45
+ id: environment
46
+ attributes:
47
+ label: 실행 환경
48
+ description: Python 버전, 운영체제, HTTP 클라이언트 및 서버 실행 방법을 입력해 주세요.
49
+ placeholder: |
50
+ - Python:
51
+ - 운영체제:
52
+ - HTTP 클라이언트:
53
+ - 서버 실행 방법:
54
+ validations:
55
+ required: true
56
+ - type: textarea
57
+ id: additional
58
+ attributes:
59
+ label: 추가 정보
60
+ description: 관련 로그나 스크린샷 등 문제 파악에 도움이 되는 정보를 적어 주세요.
61
+ validations:
62
+ required: false
@@ -0,0 +1,55 @@
1
+ name: 변경 제안
2
+ description: 일반 변경이나 핫픽스의 목적과 범위를 정리합니다.
3
+ labels:
4
+ - fix
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: >
9
+ 일반 변경이나 긴급 수정이 필요한 핫픽스를 제안할 때 사용해 주세요.
10
+ 재현 가능한 기존 결함은 버그/오류 제보 양식을 이용해 주세요.
11
+ - type: dropdown
12
+ id: change_type
13
+ attributes:
14
+ label: 변경 유형
15
+ description: 제안하는 변경의 성격을 선택해 주세요.
16
+ options:
17
+ - 일반 변경
18
+ - 핫픽스
19
+ validations:
20
+ required: true
21
+ - type: textarea
22
+ id: purpose
23
+ attributes:
24
+ label: 변경 목적
25
+ description: 왜 이 변경이 필요한지, 해결하려는 불편이나 상황을 설명해 주세요.
26
+ validations:
27
+ required: true
28
+ - type: textarea
29
+ id: proposed_changes
30
+ attributes:
31
+ label: 제안하는 변경 내용
32
+ description: 무엇을 어떻게 바꾸면 좋을지 적어 주세요.
33
+ validations:
34
+ required: true
35
+ - type: textarea
36
+ id: scope
37
+ attributes:
38
+ label: 영향 범위
39
+ description: 영향을 받는 기능, 사용자, 호환성 또는 설정을 알고 있다면 적어 주세요.
40
+ validations:
41
+ required: false
42
+ - type: textarea
43
+ id: hotfix_context
44
+ attributes:
45
+ label: 긴급 수정 정보
46
+ description: 핫픽스인 경우 긴급한 이유, 영향받는 버전 및 임시 대응 방법을 적어 주세요.
47
+ validations:
48
+ required: false
49
+ - type: textarea
50
+ id: acceptance_criteria
51
+ attributes:
52
+ label: 완료 기준
53
+ description: 변경이 완료되었다고 판단할 수 있는 조건이나 검증 방법을 적어 주세요.
54
+ validations:
55
+ required: false
@@ -0,0 +1,38 @@
1
+ name: 작업 제안
2
+ description: 리소스 변경, 문서화 등 소스 코드 변경이 아닌 작업을 정리합니다.
3
+ labels:
4
+ - task
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: >
9
+ 리소스 변경, 문서 작성·정리 등 소스 코드를 변경하지 않는 작업에 사용해 주세요.
10
+ 기능 추가, 버그 제보 또는 소스 코드 변경은 해당 이슈 양식을 이용해 주세요.
11
+ - type: textarea
12
+ id: purpose
13
+ attributes:
14
+ label: 작업 목적
15
+ description: 이 작업이 필요한 이유와 기대하는 효과를 설명해 주세요.
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: scope
20
+ attributes:
21
+ label: 작업 내용 및 대상
22
+ description: 수행할 작업과 대상 리소스, 문서 또는 경로를 적어 주세요.
23
+ validations:
24
+ required: true
25
+ - type: textarea
26
+ id: acceptance_criteria
27
+ attributes:
28
+ label: 완료 기준
29
+ description: 작업이 완료되었다고 판단할 수 있는 결과물이나 확인 방법을 적어 주세요.
30
+ validations:
31
+ required: true
32
+ - type: textarea
33
+ id: additional
34
+ attributes:
35
+ label: 관련 자료 및 주의사항
36
+ description: 참고 링크, 관련 이슈, 사전 준비나 주의사항이 있다면 적어 주세요.
37
+ validations:
38
+ required: false
@@ -0,0 +1 @@
1
+ blank_issues_enabled: false
@@ -0,0 +1,24 @@
1
+ ## 변경 내용
2
+
3
+ <!-- 무엇을 왜 변경했는지 간단히 요약해 주세요. -->
4
+
5
+ ## 변경 유형
6
+
7
+ - [ ] 버그 수정 및 일반 변경, 핫픽스 처리
8
+ - [ ] 기능 추가
9
+ - [ ] 호환성에 영향을 주는 변경
10
+ - [ ] 문서 또는 예제 변경
11
+ - [ ] 기타
12
+
13
+ ## 검증
14
+
15
+ <!-- 실행한 테스트와 결과를 작성해 주세요. 테스트를 실행하지 않았다면 사유를 적어 주세요. -->
16
+
17
+ - [ ] 관련 테스트를 실행했습니다.
18
+ - [ ] 문서와 예제를 확인했습니다.
19
+
20
+ ## 확인 사항
21
+
22
+ - [ ] 변경 범위가 요청 사항에 한정되어 있습니다.
23
+ - [ ] 공개 API나 기존 동작에 영향을 주는 경우 변경 내용과 마이그레이션 방법을 설명했습니다.
24
+ - [ ] 민감 정보나 불필요한 디버깅 코드를 포함하지 않았습니다.