stackport 0.2.1__tar.gz → 0.2.3__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 (101) hide show
  1. {stackport-0.2.1/stackport.egg-info → stackport-0.2.3}/PKG-INFO +5 -5
  2. {stackport-0.2.1 → stackport-0.2.3}/README.md +4 -4
  3. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/dynamodb.py +1 -7
  4. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/s3.py +1 -28
  5. stackport-0.2.3/backend/routes/sqs.py +575 -0
  6. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/tags.py +1 -15
  7. stackport-0.2.3/backend/schemas/__init__.py +11 -0
  8. stackport-0.2.3/backend/schemas/dynamodb.py +10 -0
  9. stackport-0.2.3/backend/schemas/s3.py +30 -0
  10. stackport-0.2.3/backend/schemas/sqs.py +80 -0
  11. stackport-0.2.3/backend/schemas/tags.py +17 -0
  12. {stackport-0.2.1 → stackport-0.2.3}/pyproject.toml +1 -1
  13. {stackport-0.2.1 → stackport-0.2.3/stackport.egg-info}/PKG-INFO +5 -5
  14. {stackport-0.2.1 → stackport-0.2.3}/stackport.egg-info/SOURCES.txt +9 -4
  15. stackport-0.2.3/tests/test_sqs_routes.py +776 -0
  16. stackport-0.2.3/ui/dist/assets/index-B2xjVeE-.js +609 -0
  17. stackport-0.2.3/ui/dist/assets/index-D_vb_J84.css +1 -0
  18. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/index.html +2 -2
  19. stackport-0.2.1/backend/routes/sqs.py +0 -308
  20. stackport-0.2.1/tests/test_sqs_routes.py +0 -290
  21. stackport-0.2.1/ui/dist/assets/index-BNpVm9Z9.js +0 -568
  22. stackport-0.2.1/ui/dist/assets/index-CgkBNKzX.css +0 -1
  23. {stackport-0.2.1 → stackport-0.2.3}/LICENSE +0 -0
  24. {stackport-0.2.1 → stackport-0.2.3}/MANIFEST.in +0 -0
  25. {stackport-0.2.1 → stackport-0.2.3}/backend/__init__.py +0 -0
  26. {stackport-0.2.1 → stackport-0.2.3}/backend/aws_client.py +0 -0
  27. {stackport-0.2.1 → stackport-0.2.3}/backend/cache.py +0 -0
  28. {stackport-0.2.1 → stackport-0.2.3}/backend/cli.py +0 -0
  29. {stackport-0.2.1 → stackport-0.2.3}/backend/config.py +0 -0
  30. {stackport-0.2.1 → stackport-0.2.3}/backend/main.py +0 -0
  31. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/__init__.py +0 -0
  32. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/common.py +0 -0
  33. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/ec2.py +0 -0
  34. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/endpoints.py +0 -0
  35. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/iam.py +0 -0
  36. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/lambda_svc.py +0 -0
  37. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/logs.py +0 -0
  38. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/resources.py +0 -0
  39. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/secretsmanager.py +0 -0
  40. {stackport-0.2.1 → stackport-0.2.3}/backend/routes/stats.py +0 -0
  41. {stackport-0.2.1 → stackport-0.2.3}/backend/websocket.py +0 -0
  42. {stackport-0.2.1 → stackport-0.2.3}/setup.cfg +0 -0
  43. {stackport-0.2.1 → stackport-0.2.3}/stackport.egg-info/dependency_links.txt +0 -0
  44. {stackport-0.2.1 → stackport-0.2.3}/stackport.egg-info/entry_points.txt +0 -0
  45. {stackport-0.2.1 → stackport-0.2.3}/stackport.egg-info/requires.txt +0 -0
  46. {stackport-0.2.1 → stackport-0.2.3}/stackport.egg-info/top_level.txt +0 -0
  47. {stackport-0.2.1 → stackport-0.2.3}/tests/test_cache.py +0 -0
  48. {stackport-0.2.1 → stackport-0.2.3}/tests/test_cli.py +0 -0
  49. {stackport-0.2.1 → stackport-0.2.3}/tests/test_client.py +0 -0
  50. {stackport-0.2.1 → stackport-0.2.3}/tests/test_config.py +0 -0
  51. {stackport-0.2.1 → stackport-0.2.3}/tests/test_dynamodb_routes.py +0 -0
  52. {stackport-0.2.1 → stackport-0.2.3}/tests/test_ec2_routes.py +0 -0
  53. {stackport-0.2.1 → stackport-0.2.3}/tests/test_endpoints.py +0 -0
  54. {stackport-0.2.1 → stackport-0.2.3}/tests/test_iam_routes.py +0 -0
  55. {stackport-0.2.1 → stackport-0.2.3}/tests/test_lambda_routes.py +0 -0
  56. {stackport-0.2.1 → stackport-0.2.3}/tests/test_logs_routes.py +0 -0
  57. {stackport-0.2.1 → stackport-0.2.3}/tests/test_multi_endpoint.py +0 -0
  58. {stackport-0.2.1 → stackport-0.2.3}/tests/test_readonly_middleware.py +0 -0
  59. {stackport-0.2.1 → stackport-0.2.3}/tests/test_registries.py +0 -0
  60. {stackport-0.2.1 → stackport-0.2.3}/tests/test_routes.py +0 -0
  61. {stackport-0.2.1 → stackport-0.2.3}/tests/test_s3_routes.py +0 -0
  62. {stackport-0.2.1 → stackport-0.2.3}/tests/test_s3_upload_limit_env.py +0 -0
  63. {stackport-0.2.1 → stackport-0.2.3}/tests/test_secretsmanager_routes.py +0 -0
  64. {stackport-0.2.1 → stackport-0.2.3}/tests/test_tags_routes.py +0 -0
  65. {stackport-0.2.1 → stackport-0.2.3}/tests/test_websocket.py +0 -0
  66. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/acm.svg +0 -0
  67. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/apigateway.svg +0 -0
  68. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/appsync.svg +0 -0
  69. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/athena.svg +0 -0
  70. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/cloudformation.svg +0 -0
  71. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/cloudfront.svg +0 -0
  72. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/cognito-idp.svg +0 -0
  73. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/dynamodb.svg +0 -0
  74. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/ec2.svg +0 -0
  75. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/ecr.svg +0 -0
  76. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/ecs.svg +0 -0
  77. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/elasticache.svg +0 -0
  78. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/elasticfilesystem.svg +0 -0
  79. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/elasticloadbalancing.svg +0 -0
  80. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/elasticmapreduce.svg +0 -0
  81. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/events.svg +0 -0
  82. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/firehose.svg +0 -0
  83. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/glue.svg +0 -0
  84. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/iam.svg +0 -0
  85. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/kinesis.svg +0 -0
  86. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/kms.svg +0 -0
  87. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/lambda.svg +0 -0
  88. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/logs.svg +0 -0
  89. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/monitoring.svg +0 -0
  90. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/rds.svg +0 -0
  91. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/route53.svg +0 -0
  92. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/s3.svg +0 -0
  93. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/secretsmanager.svg +0 -0
  94. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/ses.svg +0 -0
  95. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/sns.svg +0 -0
  96. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/sqs.svg +0 -0
  97. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/ssm.svg +0 -0
  98. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/stepfunctions.svg +0 -0
  99. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/aws-icons/wafv2.svg +0 -0
  100. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/favicon.png +0 -0
  101. {stackport-0.2.1 → stackport-0.2.3}/ui/dist/favicon.svg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackport
3
- Version: 0.2.1
3
+ Version: 0.2.3
4
4
  Summary: Universal AWS resource browser for local emulators
5
5
  Author: Davi Reis Vieira
6
6
  License: MIT
@@ -54,13 +54,13 @@ Dynamic: license-file
54
54
  ## Screenshots
55
55
 
56
56
  **Dashboard** — Service overview with resource counts and health status
57
- ![StackPort Dashboard](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/dashboard.jpeg)
57
+ ![StackPort Dashboard](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/dashboard.jpeg?v=1.0)
58
58
 
59
- **DynamoDB Browser** — Query and scan tables with schema visualization
60
- ![DynamoDB Resources](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/dynamo.jpeg)
59
+ **Lambda Browser** — Function list with config, aliases, versions, event sources, and invocation panel
60
+ ![Lambda Resources](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/lambda.jpeg?v=1.0)
61
61
 
62
62
  **S3 Browser** — File browser with upload, download, folder navigation, and tagging
63
- ![S3 Browser](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/s3.jpeg)
63
+ ![S3 Browser](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/s3.jpeg?v=1.0)
64
64
 
65
65
  ## Features
66
66
 
@@ -19,13 +19,13 @@
19
19
  ## Screenshots
20
20
 
21
21
  **Dashboard** — Service overview with resource counts and health status
22
- ![StackPort Dashboard](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/dashboard.jpeg)
22
+ ![StackPort Dashboard](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/dashboard.jpeg?v=1.0)
23
23
 
24
- **DynamoDB Browser** — Query and scan tables with schema visualization
25
- ![DynamoDB Resources](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/dynamo.jpeg)
24
+ **Lambda Browser** — Function list with config, aliases, versions, event sources, and invocation panel
25
+ ![Lambda Resources](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/lambda.jpeg?v=1.0)
26
26
 
27
27
  **S3 Browser** — File browser with upload, download, folder navigation, and tagging
28
- ![S3 Browser](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/s3.jpeg)
28
+ ![S3 Browser](https://raw.githubusercontent.com/DaviReisVieira/stackport/main/docs/images/s3.jpeg?v=1.0)
29
29
 
30
30
  ## Features
31
31
 
@@ -2,11 +2,11 @@ import logging
2
2
  from typing import Any
3
3
 
4
4
  from fastapi import APIRouter, Depends, Query
5
- from pydantic import BaseModel
6
5
 
7
6
  from backend.aws_client import get_client
8
7
  from backend.cache import cache
9
8
  from backend.routes.common import get_endpoint_url
9
+ from backend.schemas.dynamodb import QueryRequest
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -154,12 +154,6 @@ def scan_table(
154
154
  return {"error": str(e), "items": [], "count": 0}
155
155
 
156
156
 
157
- class QueryRequest(BaseModel):
158
- partition_key_value: str
159
- sort_key_value: str | None = None
160
- sort_key_operator: str = "=" # =, <, <=, >, >=, BETWEEN, BEGINS_WITH
161
- limit: int = 25
162
-
163
157
 
164
158
  @router.post("/tables/{name}/query")
165
159
  def query_table(name: str, request: QueryRequest, endpoint_url: str | None = Depends(get_endpoint_url)):
@@ -6,12 +6,11 @@ from typing import Annotated
6
6
  from botocore.exceptions import ClientError
7
7
  from fastapi import APIRouter, Depends, File, HTTPException, Query, UploadFile
8
8
  from fastapi.responses import StreamingResponse
9
- from pydantic import BaseModel, model_validator
10
-
11
9
  from backend.aws_client import get_client
12
10
  from backend.cache import cache
13
11
  from backend.config import AWS_REGION, S3_MAX_UPLOAD_BYTES, is_local_endpoint
14
12
  from backend.routes.common import get_endpoint_url
13
+ from backend.schemas.s3 import CreateFolderBody, DeleteBatchBody
15
14
 
16
15
  logger = logging.getLogger(__name__)
17
16
 
@@ -191,32 +190,6 @@ def list_objects(
191
190
  }
192
191
 
193
192
 
194
- class DeleteBatchBody(BaseModel):
195
- """Delete by explicit keys or by prefix (recursive). Provide exactly one."""
196
-
197
- keys: list[str] | None = None
198
- prefix: str | None = None
199
-
200
- @model_validator(mode="after")
201
- def exactly_one_mode(self):
202
- has_keys = bool(self.keys)
203
- has_prefix = bool(self.prefix and self.prefix.strip())
204
- if has_keys == has_prefix:
205
- raise ValueError('Provide exactly one of non-empty "keys" or "prefix"')
206
- return self
207
-
208
-
209
- class CreateFolderBody(BaseModel):
210
- prefix: str
211
-
212
- @model_validator(mode="after")
213
- def trailing_slash(self):
214
- if not self.prefix.endswith("/"):
215
- raise ValueError('Folder prefix must end with "/"')
216
- if ".." in self.prefix or self.prefix.startswith("/"):
217
- raise ValueError("Invalid prefix")
218
- return self
219
-
220
193
 
221
194
  def _validate_object_key(key: str) -> None:
222
195
  if ".." in key or key.startswith("/"):