I am kinda new to python and trying to create a DTO that minimizes the amount of properties exposed from my api. I use an Azure table storage to get records and then loop over it to create a smaller object omiting properties. Though somewhere in the process I get: "TypeError: 'AbbreviatedPackage' object is not iterable"
In my main I have the follwing call:
@app.get("/list/")
def process_results(request: Request, x_api_key: str = Depends(X_API_KEY)):
packageClient = QueryClient(az_connection_string, "appstoredev")
results = packageClient.query_packages_storage("PartitionKey eq 'app'")
return results
The query_packages_storage()
def query_packages_storage(self, filter_query):
from azure.data.tables import TableClient
table_client = TableClient.from_connection_string(conn_str=self.connection_string, table_name=self.table_name)
entities = table_client.query_entities(filter_query)
json_entities = []
for entity in entities:
print(entity['ImageUrl'])
filtered_entity = AbbreviatedPackage(
entity['ImageUrl'],
entity['PackageName'],
entity['DisplayName'],
entity['Summary']
)
json_entities.append(filtered_entity)
return json.dumps(json_entities)
AbbreviatedPackage class
class AbbreviatedPackage():
def __init__(self, image_url, package_name, display_name, summary):
self.imageUrl = image_url
self.packageName = package_name
self.displayName = display_name
self.summary = summary
When I debug the json_entitiesobject gets filled properly

Any help would be much sppreciated. Cheers
** Edit
I get the errors while being in the loop

INFO: 127.0.0.1:60027 - "GET /list/ HTTP/1.1" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 373, in run_asgi
result = await app(self.scope, self.receive, self.send)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 75, in __call__
return await self.app(scope, receive, send)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\fastapi\applications.py", line 208, in __call__
await super().__call__(scope, receive, send)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\applications.py", line 112, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\middleware\errors.py", line 181, in __call__
raise exc
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\middleware\errors.py", line 159, in __call__
await self.app(scope, receive, _send)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\middleware\cors.py", line 84, in __call__
await self.app(scope, receive, send)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\exceptions.py", line 82, in __call__
raise exc
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\exceptions.py", line 71, in __call__
await self.app(scope, receive, sender)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\routing.py", line 656, in __call__
await route.handle(scope, receive, send)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\routing.py", line 259, in handle
await self.app(scope, receive, send)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\routing.py", line 61, in app
response = await func(request)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\fastapi\routing.py", line 226, in app
raw_response = await run_endpoint_function(
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\fastapi\routing.py", line 161, in run_endpoint_function
return await run_in_threadpool(dependant.call, **values)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\starlette\concurrency.py", line 39, in run_in_threadpool
return await anyio.to_thread.run_sync(func, *args)
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\anyio\to_thread.py", line 28, in run_sync
return await get_asynclib().run_sync_in_worker_thread(func, *args, cancellable=cancellable,
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 805, in run_sync_in_worker_thread
return await future
File "C:\source\IlionxCloud\iliona-store-packages\venv\lib\site-packages\anyio\_backends\_asyncio.py", line 743, in run
result = func(*args)
File "C:/source/IlionxCloud/iliona-store-packages/store-packages/main.py", line 49, in process_results
results = packageClient.query_packages_storage("PartitionKey eq 'app'")
File "C:\source\IlionxCloud\iliona-store-packages\store-packages\client\AzureTableEntityQueryClient.py", line 39, in query_packages_storage
for entity in entities:
TypeError: 'AbbreviatedPackage' object is not iterable
AbbreviatedPackageobjects intojson.dumps, which shouldn't work by default. Hopefully my answer at least directs you to the right spot. Do please post actual code inside of backticks next time rather than images--doing it that way makes it much easier for us assisting!