Coverage for middle_layer/allocate/domain_layer/services/serialize_timebins_to_csv_service.py: 91.67%

12 statements  

« prev     ^ index     » next       coverage.py v7.10.5, created at 2026-03-09 06:13 +0000

1# Copyright 2024 Associated Universities, Inc. 

2# 

3# This file is part of Telescope Time Allocation Tools (TTAT). 

4# 

5# TTAT is free software: you can redistribute it and/or modify 

6# it under the terms of the GNU General Public License as published by 

7# the Free Software Foundation, either version 3 of the License, or 

8# any later version. 

9# 

10# TTAT is distributed in the hope that it will be useful, 

11# but WITHOUT ANY WARRANTY; without even the implied warranty of 

12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

13# GNU General Public License for more details. 

14# 

15# You should have received a copy of the GNU General Public License 

16# along with TTAT. If not, see <https://www.gnu.org/licenses/>. 

17"""Serialize Proposal Summaries as CSV to be exported""" 

18 

19import csv 

20from io import StringIO 

21from typing import List 

22 

23 

24def serialize_timebins_to_csv(timebins: List) -> str: 

25 """Serialize pressure data (timebins) into a string of CSV rows with a header at the top, 

26 for export as a CSV file 

27 

28 :param timebins: timebin information to convert to CSV 

29 :return: String with all of the timebin, represented as CSV 

30 """ 

31 headers = { 

32 "availableTimeModelId", 

33 "allocationVersionId", 

34 "availableTimeModelVersionId", 

35 "availableTimeModelName", 

36 "availableTimeModelStartDate", 

37 "availableTimeModelEndDate", 

38 "timeBins", 

39 "osdIds", 

40 } 

41 

42 if not timebins: 

43 raise ValueError("No timebins to serialize.") 

44 

45 csv_file = StringIO() 

46 csvwriter = csv.DictWriter(csv_file, headers) 

47 csvwriter.writeheader() 

48 csvwriter.writerows([row for row in timebins]) 

49 return csv_file.getvalue()