Skip to content

Commit a1bff03

Browse files
committed
apply PR feedback
1 parent 0506106 commit a1bff03

File tree

5 files changed

+76
-25
lines changed

5 files changed

+76
-25
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""
2+
Revision ID: v1_6_2
3+
Revises: v1_5_7a
4+
Create Date: 2025-05-13
5+
6+
"""
7+
from alembic import op
8+
import sqlalchemy as sa
9+
10+
revision = 'v1_6_2'
11+
down_revision = 'v1_5_7a'
12+
branch_labels = None
13+
depends_on = None
14+
15+
16+
def upgrade():
17+
op.add_column('transform_result', sa.Column('created_at', sa.DateTime(), nullable=True))
18+
op.execute('UPDATE transform_result SET created_at = CURRENT_TIMESTAMP')
19+
op.alter_column('transform_result', 'created_at', nullable=False)
20+
21+
op.create_index('ix_transform_result_created_at', 'transform_result', ['created_at'])
22+
23+
24+
def downgrade():
25+
op.drop_index('ix_transform_result_created_at', table_name='transform_result')
26+
27+
op.drop_column('transform_result', 'created_at')

servicex_app/servicex_app/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@ class TransformationResult(db.Model):
356356
total_events = db.Column(db.BigInteger, nullable=True)
357357
total_bytes = db.Column(db.BigInteger, nullable=True)
358358
avg_rate = db.Column(db.Float, nullable=True)
359+
created_at = db.Column(DateTime, default=func.now())
359360

360361
__table_args__ = (
361362
db.UniqueConstraint('file_id', 'request_id', name='uix_file_request'),
@@ -376,7 +377,8 @@ def to_json(cls, x):
376377
'transform_time': x.transform_time,
377378
'total-events': x.total_events,
378379
'total-bytes': x.total_bytes,
379-
'avg-rate': x.avg_rate
380+
'avg-rate': x.avg_rate,
381+
'created_at': x.created_at.isoformat() if x.created_at else None,
380382
}
381383

382384
def save_to_db(self):

servicex_app/servicex_app/resources/internal/get_transformation_results.py

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import logging
2+
import datetime
3+
4+
from flask_restful import reqparse
5+
6+
from servicex_app.decorators import auth_required
7+
from servicex_app.models import TransformationResult
8+
from servicex_app.resources.servicex_resource import ServiceXResource
9+
10+
logger = logging.getLogger(__name__)
11+
12+
13+
class TransformationResults(ServiceXResource):
14+
@auth_required
15+
def get(self, request_id):
16+
if not request_id:
17+
return {"message": "Missing required transformation request_id"}, 400
18+
19+
parser = reqparse.RequestParser()
20+
parser.add_argument(
21+
'cutoff',
22+
type=str,
23+
required=False,
24+
location='args'
25+
)
26+
27+
args = parser.parse_args()
28+
29+
transform_result_query = TransformationResult.query.filter_by(request_id=request_id)
30+
31+
cutoff_str = args.get('cutoff')
32+
if cutoff_str:
33+
try:
34+
cutoff = datetime.datetime.fromisoformat(cutoff_str)
35+
except AttributeError as exc:
36+
return {"message": f"Cutoff value {cutoff_str} is not an ISO 8601 compliant datetime"}, 400
37+
transform_result_query = transform_result_query.filter(TransformationResult.created_at > cutoff)
38+
39+
results = [transformation_result.to_json(transformation_result) for transformation_result in transform_result_query]
40+
41+
return {
42+
"results": results
43+
}

servicex_app/servicex_app/routes.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@ def add_routes(api, transformer_manager, rabbit_mq_adaptor,
4444
from servicex_app.resources.internal.fileset_complete import FilesetComplete
4545
from servicex_app.resources.internal.transform_status import TransformationStatusInternal
4646
from servicex_app.resources.internal.transformer_file_complete import TransformerFileComplete
47-
from servicex_app.resources.internal.get_transformation_results import GetTransformationResults
4847

4948
from servicex_app.resources.transformation.submit import SubmitTransformationRequest
5049
from servicex_app.resources.transformation.status import TransformationStatus
5150
from servicex_app.resources.transformation.cancel import CancelTransform
5251
from servicex_app.resources.transformation.get_all import AllTransformationRequests
5352
from servicex_app.resources.transformation.get_one import TransformationRequest
5453
from servicex_app.resources.transformation.deployment import DeploymentStatus
54+
from servicex_app.resources.transformation.results import TransformationResults
5555

5656
from servicex_app.resources.users.all_users import AllUsers
5757
from servicex_app.resources.users.token_refresh import TokenRefresh
@@ -140,6 +140,8 @@ def add_routes(api, transformer_manager, rabbit_mq_adaptor,
140140
api.add_resource(AllTransformationRequests, prefix)
141141
prefix += "/<string:request_id>"
142142
api.add_resource(TransformationRequest, prefix)
143+
api.add_resource(TransformationResults, prefix + '/results')
144+
143145

144146
DeleteTransform.make_api(object_store)
145147
api.add_resource(DeleteTransform, prefix)
@@ -170,5 +172,3 @@ def add_routes(api, transformer_manager, rabbit_mq_adaptor,
170172

171173
DataLifecycleOps.make_api(object_store)
172174
api.add_resource(DataLifecycleOps, '/servicex/internal/data-lifecycle')
173-
174-
api.add_resource(GetTransformationResults, '/servicex/internal/transformation/<string:request_id>/results')

0 commit comments

Comments
 (0)