MCPcopy Create free account
hub / github.com/Dispatcharr/Dispatcharr / post

Method post

apps/epg/api_views.py:1211–1323  ·  view source on GitHub ↗
(self, request, format=None)

Source from the content-addressed store, hash-verified

1209 responses={200: ProgramDataSerializer(many=True)},
1210 )
1211 def post(self, request, format=None):
1212 # Get IDs from request body
1213 channel_uuids = request.data.get('channel_uuids', None)
1214 epg_data_ids = request.data.get('epg_data_ids', None)
1215
1216 # Validate that at most one type of ID is provided
1217 if channel_uuids is not None and epg_data_ids is not None:
1218 return Response(
1219 {"error": "Provide either channel_uuids or epg_data_ids, not both"},
1220 status=status.HTTP_400_BAD_REQUEST
1221 )
1222
1223 # Get current time
1224 now = timezone.now()
1225
1226 # If epg_data_ids are provided, query directly by EPG data
1227 if epg_data_ids is not None:
1228 if not isinstance(epg_data_ids, list):
1229 return Response(
1230 {"error": "epg_data_ids must be an array of integers or null"},
1231 status=status.HTTP_400_BAD_REQUEST
1232 )
1233
1234 try:
1235 epg_data_ids = [int(eid) for eid in epg_data_ids]
1236 except (ValueError, TypeError):
1237 return Response(
1238 {"error": "epg_data_ids must contain valid integers"},
1239 status=status.HTTP_400_BAD_REQUEST
1240 )
1241
1242 # Limit to 50 IDs per request
1243 epg_data_ids = epg_data_ids[:50]
1244
1245 epg_data_entries = EPGData.objects.select_related('epg_source').filter(
1246 id__in=epg_data_ids
1247 )
1248
1249 # Batch-fetch current programs for all requested EPG entries in one query
1250 db_programs = ProgramData.objects.filter(
1251 epg__in=epg_data_entries, start_time__lte=now, end_time__gt=now
1252 ).select_related('epg')
1253 # Map epg_data id -> first matching program
1254 programs_by_epg = {}
1255 for prog in db_programs:
1256 if prog.epg_id not in programs_by_epg:
1257 programs_by_epg[prog.epg_id] = prog
1258
1259 current_programs = []
1260 for epg_data in epg_data_entries:
1261 # Check batch-fetched DB results first
1262 program = programs_by_epg.get(epg_data.id)
1263
1264 if program:
1265 program_data = ProgramDataSerializer(program).data
1266 program_data['epg_data_id'] = epg_data.id
1267 current_programs.append(program_data)
1268 continue

Callers

nothing calls this directly

Calls 4

getMethod · 0.45
filterMethod · 0.45

Tested by

no test coverage detected