Skip to content

Commit

Permalink
Handle share edge cases: no user, no expiration
Browse files Browse the repository at this point in the history
  • Loading branch information
pjbedard committed Sep 4, 2024
1 parent 4588ee9 commit a395800
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 14 deletions.
4 changes: 3 additions & 1 deletion apis/paios/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1185,10 +1185,12 @@ components:
resource_id:
$ref: '#/components/schemas/uuid4'
user_id:
$ref: '#/components/schemas/uuid4'
type: string
nullable: true
expiration_dt:
type: string
format: date-time
nullable: true
is_revoked:
type: boolean
required:
Expand Down
22 changes: 14 additions & 8 deletions backend/api/SharesView.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,28 @@ async def get(self, id: str):
return JSONResponse(share.model_dump(), status_code=200)

async def post(self, body: dict):
print("expiration_dt: {}".format(body['expiration_dt']))
expiration_dt = datetime.fromisoformat(body['expiration_dt']).astimezone(tz=timezone.utc)
print("converted expiration_dt: {}".format(expiration_dt))
expiration_dt = None
if 'expiration_dt' in body and body['expiration_dt'] is not None:
expiration_dt = datetime.fromisoformat(body['expiration_dt']).astimezone(tz=timezone.utc)
user_id = None
if 'user_id' in body and body['user_id']:
user_id = body['user_id']
new_share = await self.slm.create_share(resource_id=body['resource_id'],
user_id=body['user_id'],
user_id=user_id,
expiration_dt=expiration_dt,
is_revoked=False)
return JSONResponse(new_share.model_dump(), status_code=201, headers={'Location': f'{api_base_url}/shares/{new_share.id}'})

async def put(self, id: str, body: dict):
print("expiration_dt: {}".format(body['expiration_dt']))
expiration_dt = datetime.fromisoformat(body['expiration_dt']).astimezone(tz=timezone.utc)
print("converted expiration_dt: {}".format(expiration_dt))
expiration_dt = None
if 'expiration_dt' in body and body['expiration_dt'] is not None:
expiration_dt = datetime.fromisoformat(body['expiration_dt']).astimezone(tz=timezone.utc)
user_id = None
if 'user_id' in body and body['user_id']:
user_id = body['user_id']
updated_share = await self.slm.update_share(id,
resource_id=body['resource_id'],
user_id=body['user_id'],
user_id=user_id,
expiration_dt=expiration_dt,
is_revoked=body['is_revoked'])
if updated_share is None:
Expand Down
2 changes: 0 additions & 2 deletions backend/managers/SharesManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,6 @@ async def retrieve_shares(self, offset: int = 0, limit: int = 100, sort_by: Opti
async with db_session_context() as session:
query = select(Share)

print("filters: {}".format(filters))

if filters:
for key, value in filters.items():
if isinstance(value, list):
Expand Down
14 changes: 11 additions & 3 deletions backend/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,17 @@ class ShareBaseSchema(BaseModel):
expiration_dt: Optional[datetime] = None
is_revoked: Optional[bool] = False

@field_serializer('expiration_dt')
def serialize_dt(self, dt: datetime, _info):
return dt.strftime('%Y-%m-%dT%H:%M:%SZ')
@field_serializer('user_id')
def serialize_user_id(self, user_id: str, _info):
if user_id:
return user_id
else:
return ""

@field_serializer('expiration_dt', when_used='unless-none')
def serialize_expiration_dt(self, dt: datetime, _info):
if dt:
return dt.strftime('%Y-%m-%dT%H:%M:%SZ')


class ShareCreateSchema(ShareBaseSchema):
Expand Down

0 comments on commit a395800

Please sign in to comment.