import logging from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import AllowAny from rest_framework.request import Request from labs.lab_manager_v2.lab_spec import get_all_labs logger = logging.getLogger(__name__) # Ref: https://feishu.feishu.cn/docx/GwBXdq7cmoZahfx8faQchcS2nXf class LarkTableMetaEndpoint(APIView): permission_classes = (AllowAny,) def get(self, request: Request) -> Response: return Response( { "schemaVersion": 1, "version": "1.0.0", "type": "data_connector", "extraData": { "disabledPeriodicSync": False, "dataSourceConfigUiUri": "https://ext.baseopendev.com/ext/data-sync-fe-demo/c70fa2864a002386423f26411f21a3c674bc2f9c/index.html", "initHeight": 300, "initWidth": 520, }, "protocol": { "type": "http", "httpProtocol": { "uris": [ {"type": "tableMeta", "uri": "/definition"}, {"type": "records", "uri": "/records"}, ] }, }, } ) class LarkTableDefinitionEndpoint(APIView): permission_classes = (AllowAny,) def post(self, request: Request) -> Response: return Response( { "code": 0, "msg": "", "data": { "tableName": "TiDB Labs List", "fields": [ { "fieldID": "lab_code", "fieldName": "lab_code", "fieldType": 1, "isPrimary": True, "description": "", }, { "fieldID": "title", "fieldName": "title", "fieldType": 1, "isPrimary": False, "description": "", }, { "fieldID": "description", "fieldName": "description", "fieldType": 1, "isPrimary": False, "description": "", }, { "fieldID": "credits", "fieldName": "credits", "fieldType": 2, "isPrimary": False, "description": "", }, { "fieldID": "credit_redeemable", "fieldName": "credit_redeemable", "fieldType": 1, "isPrimary": False, "description": "", }, { "fieldID": "employee_only", "fieldName": "employee_only", "fieldType": 1, "isPrimary": False, "description": "", }, { "fieldID": "environment", "fieldName": "environment", "fieldType": 1, "isPrimary": False, "description": "", }, { "fieldID": "estimated_duration_minutes", "fieldName": "estimated_duration_minutes", "fieldType": 2, "isPrimary": False, "description": "Estimated duration in minutes", }, { "fieldID": "level", "fieldName": "level", "fieldType": 1, "isPrimary": False, "description": "", }, { "fieldID": "category", "fieldName": "category", "fieldType": 1, "isPrimary": False, "description": "", }, ], }, } ) class LarkTableRecordsEndpoint(APIView): permission_classes = (AllowAny,) def post(self, request: Request) -> Response: records = [] for lab in get_all_labs().values(): records.append( { "primaryID": lab["lab_code"], "data": { "lab_code": lab["lab_code"], "title": lab["title_en"], "description": lab["description_en"], "employee_only": "Y" if lab["employee_only"] else "N", "credit_redeemable": "Y" if lab["credit_redeemable"] else "N", "credits": lab.get("credits", 0), "environment": ",".join(lab["tidb_environments"]), "estimated_duration_minutes": lab["estimated_duration_minutes"], "level": lab["lab_level"], "category": ",".join(lab["category_en"]), }, } ) return Response( { "code": 0, "msg": "", "data": {"nextPageToken": "xxx", "hasMore": False, "records": records}, } )