diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 764a782..c8ede6d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,8 @@ on: release: types: - published + schedule: + - cron: '34 7 * * 1-5' env: MINIMUM_PYTHON_VERSION: '3.9' diff --git a/gcapi/models.py b/gcapi/models.py index 83cb2eb..3060099 100644 --- a/gcapi/models.py +++ b/gcapi/models.py @@ -1,12 +1,12 @@ # generated by datamodel-codegen: # filename: schema.json -# timestamp: 2023-04-05T15:38:14+00:00 +# timestamp: 2024-08-07T12:57:30+00:00 from __future__ import annotations from decimal import Decimal from enum import Enum -from typing import Any, Dict, List, Optional, Union +from typing import Any, Optional, Union from pydantic.dataclasses import dataclass @@ -27,7 +27,7 @@ class AlgorithmImage(BaseModel): @dataclass class Answer(BaseModel): - answer: Optional[dict[str, Any]] + answer: Optional[Any] api_url: str created: str creator: str @@ -43,7 +43,7 @@ class Answer(BaseModel): @dataclass class AnswerRequest(BaseModel): - answer: Optional[dict[str, Any]] + answer: Optional[Any] display_set: Optional[str] question: str last_edit_duration: Optional[str] @@ -65,25 +65,6 @@ class BlankEnum(Enum): field_ = "" -@dataclass -class BooleanClassificationAnnotation(BaseModel): - id: str - image: str - grader: Optional[int] - created: Optional[str] - name: str - value: bool - - -@dataclass -class BooleanClassificationAnnotationRequest(BaseModel): - image: str - grader: Optional[int] - created: Optional[str] - name: str - value: bool - - @dataclass class CategoricalOption(BaseModel): id: int @@ -115,7 +96,7 @@ class ColorSpaceEnum(Enum): @dataclass class ComponentInterfaceValuePost(BaseModel): interface: str - value: Optional[dict[str, Any]] + value: Optional[Any] file: Optional[str] image: Optional[str] pk: int @@ -124,7 +105,7 @@ class ComponentInterfaceValuePost(BaseModel): @dataclass class ComponentInterfaceValuePostRequest(BaseModel): interface: str - value: Optional[dict[str, Any]] + value: Optional[Any] file: Optional[bytes] image: Optional[str] upload_session: Optional[str] @@ -136,25 +117,7 @@ class DisplaySetPostRequest(BaseModel): reader_study: Optional[str] values: Optional[list[ComponentInterfaceValuePostRequest]] order: Optional[int] - - -@dataclass -class ETDRSGridAnnotation(BaseModel): - id: str - grader: Optional[int] - created: Optional[str] - image: str - fovea: list[float] - optic_disk: Optional[list[float]] - - -@dataclass -class ETDRSGridAnnotationRequest(BaseModel): - grader: Optional[int] - created: Optional[str] - image: str - fovea: list[float] - optic_disk: Optional[list[float]] + title: str = "" class EyeChoiceEnum(Enum): @@ -169,7 +132,7 @@ class Feedback(BaseModel): session: str screenshot: Optional[str] user_comment: str - context: Optional[dict[str, Any]] + context: Optional[Any] @dataclass @@ -177,7 +140,7 @@ class FeedbackRequest(BaseModel): session: str screenshot: Optional[bytes] user_comment: str - context: Optional[dict[str, Any]] + context: Optional[Any] class FieldOfViewEnum(Enum): @@ -204,38 +167,16 @@ class FollowRequest(BaseModel): @dataclass class HangingProtocol(BaseModel): - json_: dict[str, Any] + json_: Any + title: str + pk: str + svg_icon: str @dataclass class HangingProtocolRequest(BaseModel): - json_: dict[str, Any] - - -@dataclass -class ImageLevelAnnotationsForImage(BaseModel): - quality: Optional[str] - pathology: Optional[str] - retina_pathology: Optional[str] - oct_retina_pathology: Optional[str] - text: Optional[str] - - -@dataclass -class ImageTextAnnotation(BaseModel): - id: str - created: Optional[str] - grader: Optional[int] - image: str - text: str - - -@dataclass -class ImageTextAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: str - text: str + json_: Any + title: str class ImageTypeEnum(Enum): @@ -545,77 +486,52 @@ class NullEnum(Enum): NoneType_None = None -@dataclass -class OctRetinaImagePathologyAnnotation(BaseModel): - id: str - created: Optional[str] - grader: Optional[int] - image: str - macular: Optional[bool] - myopia: Optional[bool] - optic_disc: Optional[bool] - other: Optional[bool] - layers: Optional[bool] - - -@dataclass -class OctRetinaImagePathologyAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: str - macular: Optional[bool] - myopia: Optional[bool] - optic_disc: Optional[bool] - other: Optional[bool] - layers: Optional[bool] - - @dataclass class PaginatedAlgorithmImageList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[AlgorithmImage]] + results: list[AlgorithmImage] @dataclass class PaginatedAnswerList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Answer]] + results: list[Answer] @dataclass class PaginatedArchiveList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Archive]] + results: list[Archive] @dataclass class PaginatedFeedbackList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Feedback]] + results: list[Feedback] @dataclass class PaginatedFollowList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Follow]] + results: list[Follow] @dataclass class PaginatedNotificationList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Notification]] + results: list[Notification] @dataclass @@ -636,7 +552,7 @@ class PartRequest(BaseModel): @dataclass class PatchedAnswerRequest(BaseModel): - answer: Optional[dict[str, Any]] + answer: Optional[Any] display_set: Optional[str] question: Optional[str] last_edit_duration: Optional[str] @@ -646,15 +562,7 @@ class PatchedAnswerRequest(BaseModel): class PatchedArchiveItemPostRequest(BaseModel): archive: Optional[str] values: Optional[list[ComponentInterfaceValuePostRequest]] - - -@dataclass -class PatchedBooleanClassificationAnnotationRequest(BaseModel): - image: Optional[str] - grader: Optional[int] - created: Optional[str] - name: Optional[str] - value: Optional[bool] + title: str = "" @dataclass @@ -662,15 +570,7 @@ class PatchedDisplaySetPostRequest(BaseModel): reader_study: Optional[str] values: Optional[list[ComponentInterfaceValuePostRequest]] order: Optional[int] - - -@dataclass -class PatchedETDRSGridAnnotationRequest(BaseModel): - grader: Optional[int] - created: Optional[str] - image: Optional[str] - fovea: Optional[list[float]] - optic_disk: Optional[list[float]] + title: str = "" @dataclass @@ -678,50 +578,11 @@ class PatchedFollowRequest(BaseModel): flag: Optional[str] -@dataclass -class PatchedImageTextAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: Optional[str] - text: Optional[str] - - @dataclass class PatchedNotificationRequest(BaseModel): read: Optional[bool] -@dataclass -class PatchedOctRetinaImagePathologyAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: Optional[str] - macular: Optional[bool] - myopia: Optional[bool] - optic_disc: Optional[bool] - other: Optional[bool] - layers: Optional[bool] - - -@dataclass -class PatchedRetinaImagePathologyAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: Optional[str] - oda_present: Optional[bool] - myopia_present: Optional[bool] - other_present: Optional[bool] - rf_present: Optional[bool] - - -@dataclass -class PatchedSinglePolygonAnnotationRequest(BaseModel): - value: Optional[list[list[float]]] - annotation_set: Optional[str] - z: Optional[float] - interpolated: Optional[bool] - - @dataclass class PatchedUserUploadCompleteRequest(BaseModel): parts: Optional[list[PartRequest]] @@ -732,13 +593,6 @@ class PatchedUserUploadPresignedURLsRequest(BaseModel): part_numbers: Optional[list[int]] -class PathologyEnum(Enum): - C = "C" - A = "A" - Q = "Q" - P = "P" - - class PatientSexEnum(Enum): M = "M" F = "F" @@ -748,20 +602,27 @@ class PatientSexEnum(Enum): @dataclass class Phase(BaseModel): challenge: Challenge + title: str slug: str - title: str = "Challenge" - - -class QualityEnum(Enum): - U = "U" - F = "F" - G = "G" -class QualityReasonEnum(Enum): - BP = "BP" - CA = "CA" - PM = "PM" +@dataclass +class PublicChallenge(BaseModel): + api_url: str + url: str + slug: str + title: Optional[str] + description: Optional[str] + public: bool + status: str + logo: Optional[str] + submission_types: list[str] + start_date: Optional[str] + end_date: Optional[str] + publications: list[str] + created: str + modified: str + incentives: list[str] @dataclass @@ -789,29 +650,6 @@ class RawImageUploadSessionRequest(BaseModel): uploads: list[str] -@dataclass -class RetinaImagePathologyAnnotation(BaseModel): - id: str - created: Optional[str] - grader: Optional[int] - image: str - oda_present: bool - myopia_present: bool - other_present: bool - rf_present: Optional[bool] - - -@dataclass -class RetinaImagePathologyAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: str - oda_present: bool - myopia_present: bool - other_present: bool - rf_present: Optional[bool] - - @dataclass class Session(BaseModel): pk: str @@ -824,53 +662,6 @@ class SimpleImage(BaseModel): name: str -@dataclass -class SingleLandmarkAnnotationSerializerNoParent(BaseModel): - id: str - image: str - landmarks: list[list[float]] - - -@dataclass -class SingleLandmarkAnnotationSerializerNoParentRequest(BaseModel): - image: str - landmarks: list[list[float]] - - -@dataclass -class SinglePolygonAnnotation(BaseModel): - id: str - value: list[list[float]] - annotation_set: str - created: str - z: Optional[float] - interpolated: Optional[bool] - - -@dataclass -class SinglePolygonAnnotationRequest(BaseModel): - value: list[list[float]] - annotation_set: str - z: Optional[float] - interpolated: Optional[bool] - - -@dataclass -class SinglePolygonAnnotationSerializerNoParent(BaseModel): - id: Optional[str] - value: list[list[float]] - z: Optional[float] - interpolated: Optional[bool] - - -@dataclass -class SinglePolygonAnnotationSerializerNoParentRequest(BaseModel): - id: Optional[str] - value: list[list[float]] - z: Optional[float] - interpolated: Optional[bool] - - class StereoscopicChoiceEnum(Enum): L = "L" R = "R" @@ -878,604 +669,604 @@ class StereoscopicChoiceEnum(Enum): class TimezoneEnum(Enum): - America_Araguaina = "America/Araguaina" - Brazil_Acre = "Brazil/Acre" - Asia_Chongqing = "Asia/Chongqing" - Europe_Brussels = "Europe/Brussels" - Etc_GMT_3 = "Etc/GMT-3" - Asia_Makassar = "Asia/Makassar" + Africa_Abidjan = "Africa/Abidjan" + Africa_Accra = "Africa/Accra" Africa_Addis_Ababa = "Africa/Addis_Ababa" - Australia_ACT = "Australia/ACT" - Europe_Prague = "Europe/Prague" + Africa_Algiers = "Africa/Algiers" + Africa_Asmara = "Africa/Asmara" + Africa_Asmera = "Africa/Asmera" + Africa_Bamako = "Africa/Bamako" + Africa_Bangui = "Africa/Bangui" + Africa_Banjul = "Africa/Banjul" + Africa_Bissau = "Africa/Bissau" + Africa_Blantyre = "Africa/Blantyre" + Africa_Brazzaville = "Africa/Brazzaville" + Africa_Bujumbura = "Africa/Bujumbura" + Africa_Cairo = "Africa/Cairo" + Africa_Casablanca = "Africa/Casablanca" Africa_Ceuta = "Africa/Ceuta" - America_Manaus = "America/Manaus" - Asia_Chungking = "Asia/Chungking" - Asia_Magadan = "Asia/Magadan" - Antarctica_Davis = "Antarctica/Davis" - Egypt = "Egypt" - America_Scoresbysund = "America/Scoresbysund" - America_Argentina_Cordoba = "America/Argentina/Cordoba" - America_Argentina_ComodRivadavia = "America/Argentina/ComodRivadavia" - Asia_Damascus = "Asia/Damascus" - Etc_GMT_5 = "Etc/GMT-5" - Pacific_Majuro = "Pacific/Majuro" - Asia_Amman = "Asia/Amman" - America_Vancouver = "America/Vancouver" - America_Nipigon = "America/Nipigon" - Europe_Podgorica = "Europe/Podgorica" - America_Shiprock = "America/Shiprock" - Asia_Istanbul = "Asia/Istanbul" - Australia_Hobart = "Australia/Hobart" - Pacific_Noumea = "Pacific/Noumea" - America_Curacao = "America/Curacao" - America_St_Johns = "America/St_Johns" - America_Halifax = "America/Halifax" - EST5EDT = "EST5EDT" - America_Metlakatla = "America/Metlakatla" - America_St_Vincent = "America/St_Vincent" - Africa_Harare = "Africa/Harare" - Etc_GMT_8 = "Etc/GMT-8" - America_Argentina_Ushuaia = "America/Argentina/Ushuaia" - Etc_GMT_2 = "Etc/GMT+2" - Asia_Qatar = "Asia/Qatar" - Asia_Tbilisi = "Asia/Tbilisi" - HST = "HST" - Africa_Lusaka = "Africa/Lusaka" + Africa_Conakry = "Africa/Conakry" + Africa_Dakar = "Africa/Dakar" + Africa_Dar_es_Salaam = "Africa/Dar_es_Salaam" + Africa_Djibouti = "Africa/Djibouti" Africa_Douala = "Africa/Douala" - Australia_Adelaide = "Australia/Adelaide" - America_Tegucigalpa = "America/Tegucigalpa" - Australia_Lord_Howe = "Australia/Lord_Howe" - America_Phoenix = "America/Phoenix" - America_Regina = "America/Regina" - Australia_North = "Australia/North" - Pacific_Galapagos = "Pacific/Galapagos" - America_Guatemala = "America/Guatemala" - America_Recife = "America/Recife" - Atlantic_Stanley = "Atlantic/Stanley" - Brazil_DeNoronha = "Brazil/DeNoronha" - America_Merida = "America/Merida" - Hongkong = "Hongkong" - Asia_Oral = "Asia/Oral" - Etc_GMT_5_1 = "Etc/GMT+5" - America_Argentina_Jujuy = "America/Argentina/Jujuy" - Pacific_Enderbury = "Pacific/Enderbury" - Etc_GMT_9 = "Etc/GMT+9" - Asia_Chita = "Asia/Chita" - Europe_Helsinki = "Europe/Helsinki" - America_Louisville = "America/Louisville" - America_Lower_Princes = "America/Lower_Princes" - America_New_York = "America/New_York" - America_Indiana_Knox = "America/Indiana/Knox" - Europe_Vilnius = "Europe/Vilnius" - America_Danmarkshavn = "America/Danmarkshavn" - US_Arizona = "US/Arizona" + Africa_El_Aaiun = "Africa/El_Aaiun" + Africa_Freetown = "Africa/Freetown" + Africa_Gaborone = "Africa/Gaborone" + Africa_Harare = "Africa/Harare" + Africa_Johannesburg = "Africa/Johannesburg" + Africa_Juba = "Africa/Juba" + Africa_Kampala = "Africa/Kampala" + Africa_Khartoum = "Africa/Khartoum" + Africa_Kigali = "Africa/Kigali" + Africa_Kinshasa = "Africa/Kinshasa" + Africa_Lagos = "Africa/Lagos" + Africa_Libreville = "Africa/Libreville" Africa_Lome = "Africa/Lome" - MST7MDT = "MST7MDT" - America_St_Kitts = "America/St_Kitts" + Africa_Luanda = "Africa/Luanda" + Africa_Lubumbashi = "Africa/Lubumbashi" + Africa_Lusaka = "Africa/Lusaka" + Africa_Malabo = "Africa/Malabo" + Africa_Maputo = "Africa/Maputo" + Africa_Maseru = "Africa/Maseru" + Africa_Mbabane = "Africa/Mbabane" + Africa_Mogadishu = "Africa/Mogadishu" + Africa_Monrovia = "Africa/Monrovia" + Africa_Nairobi = "Africa/Nairobi" + Africa_Ndjamena = "Africa/Ndjamena" + Africa_Niamey = "Africa/Niamey" + Africa_Nouakchott = "Africa/Nouakchott" + Africa_Ouagadougou = "Africa/Ouagadougou" + Africa_Porto_Novo = "Africa/Porto-Novo" + Africa_Sao_Tome = "Africa/Sao_Tome" + Africa_Timbuktu = "Africa/Timbuktu" + Africa_Tripoli = "Africa/Tripoli" + Africa_Tunis = "Africa/Tunis" + Africa_Windhoek = "Africa/Windhoek" + America_Adak = "America/Adak" + America_Anchorage = "America/Anchorage" + America_Anguilla = "America/Anguilla" + America_Antigua = "America/Antigua" + America_Araguaina = "America/Araguaina" America_Argentina_Buenos_Aires = "America/Argentina/Buenos_Aires" - Pacific_Pitcairn = "Pacific/Pitcairn" - Europe_Stockholm = "Europe/Stockholm" - Asia_Taipei = "Asia/Taipei" - Africa_Kigali = "Africa/Kigali" - Europe_Kirov = "Europe/Kirov" - Africa_Djibouti = "Africa/Djibouti" - Pacific_Gambier = "Pacific/Gambier" - America_North_Dakota_Beulah = "America/North_Dakota/Beulah" - Etc_GMT_13 = "Etc/GMT-13" - America_Managua = "America/Managua" - Asia_Ulan_Bator = "Asia/Ulan_Bator" - Europe_Samara = "Europe/Samara" - Asia_Baghdad = "Asia/Baghdad" - America_Buenos_Aires = "America/Buenos_Aires" - America_Puerto_Rico = "America/Puerto_Rico" - America_Indiana_Indianapolis = "America/Indiana/Indianapolis" - Pacific_Niue = "Pacific/Niue" - America_Bahia = "America/Bahia" - Canada_Mountain = "Canada/Mountain" - GB_Eire = "GB-Eire" America_Argentina_Catamarca = "America/Argentina/Catamarca" - America_Belem = "America/Belem" - US_Indiana_Starke = "US/Indiana-Starke" - America_Grenada = "America/Grenada" - Europe_Moscow = "Europe/Moscow" - Asia_Dili = "Asia/Dili" - Asia_Ashkhabad = "Asia/Ashkhabad" - Canada_Yukon = "Canada/Yukon" - Asia_Yekaterinburg = "Asia/Yekaterinburg" - US_Alaska = "US/Alaska" - Brazil_East = "Brazil/East" - America_Inuvik = "America/Inuvik" - Australia_Queensland = "Australia/Queensland" - Australia_Brisbane = "Australia/Brisbane" - America_Mexico_City = "America/Mexico_City" - Asia_Atyrau = "Asia/Atyrau" - America_Kentucky_Louisville = "America/Kentucky/Louisville" - Australia_Eucla = "Australia/Eucla" - Etc_GMT_11 = "Etc/GMT-11" - America_Cayenne = "America/Cayenne" - Europe_Mariehamn = "Europe/Mariehamn" - Etc_GMT_8_1 = "Etc/GMT+8" - Asia_Calcutta = "Asia/Calcutta" - Asia_Hebron = "Asia/Hebron" - Etc_GMT_12 = "Etc/GMT+12" - GB = "GB" - Europe_London = "Europe/London" - Etc_GMT_10 = "Etc/GMT-10" - Pacific_Wallis = "Pacific/Wallis" - Asia_Tel_Aviv = "Asia/Tel_Aviv" - Turkey = "Turkey" - Australia_Currie = "Australia/Currie" - Europe_Tiraspol = "Europe/Tiraspol" - Europe_Rome = "Europe/Rome" - America_Resolute = "America/Resolute" + America_Argentina_ComodRivadavia = "America/Argentina/ComodRivadavia" + America_Argentina_Cordoba = "America/Argentina/Cordoba" + America_Argentina_Jujuy = "America/Argentina/Jujuy" + America_Argentina_La_Rioja = "America/Argentina/La_Rioja" + America_Argentina_Mendoza = "America/Argentina/Mendoza" + America_Argentina_Rio_Gallegos = "America/Argentina/Rio_Gallegos" + America_Argentina_Salta = "America/Argentina/Salta" + America_Argentina_San_Juan = "America/Argentina/San_Juan" + America_Argentina_San_Luis = "America/Argentina/San_Luis" + America_Argentina_Tucuman = "America/Argentina/Tucuman" + America_Argentina_Ushuaia = "America/Argentina/Ushuaia" + America_Aruba = "America/Aruba" + America_Asuncion = "America/Asuncion" + America_Atikokan = "America/Atikokan" + America_Atka = "America/Atka" + America_Bahia = "America/Bahia" America_Bahia_Banderas = "America/Bahia_Banderas" - America_Noronha = "America/Noronha" - Europe_Ulyanovsk = "Europe/Ulyanovsk" - WET = "WET" - America_Dawson_Creek = "America/Dawson_Creek" - Asia_Dushanbe = "Asia/Dushanbe" - Europe_Berlin = "Europe/Berlin" - Asia_Phnom_Penh = "Asia/Phnom_Penh" - Europe_Monaco = "Europe/Monaco" - Iceland = "Iceland" - Asia_Colombo = "Asia/Colombo" - America_Maceio = "America/Maceio" + America_Barbados = "America/Barbados" + America_Belem = "America/Belem" + America_Belize = "America/Belize" + America_Blanc_Sablon = "America/Blanc-Sablon" America_Boa_Vista = "America/Boa_Vista" - Antarctica_DumontDUrville = "Antarctica/DumontDUrville" - America_Goose_Bay = "America/Goose_Bay" - Chile_Continental = "Chile/Continental" - Europe_Andorra = "Europe/Andorra" - America_Hermosillo = "America/Hermosillo" - Asia_Kolkata = "Asia/Kolkata" - Universal = "Universal" - Europe_Isle_of_Man = "Europe/Isle_of_Man" - Australia_LHI = "Australia/LHI" + America_Bogota = "America/Bogota" + America_Boise = "America/Boise" + America_Buenos_Aires = "America/Buenos_Aires" + America_Cambridge_Bay = "America/Cambridge_Bay" + America_Campo_Grande = "America/Campo_Grande" + America_Cancun = "America/Cancun" + America_Caracas = "America/Caracas" + America_Catamarca = "America/Catamarca" + America_Cayenne = "America/Cayenne" America_Cayman = "America/Cayman" - Asia_Dhaka = "Asia/Dhaka" - Asia_Tomsk = "Asia/Tomsk" - America_Guayaquil = "America/Guayaquil" - America_Miquelon = "America/Miquelon" - Africa_Nairobi = "Africa/Nairobi" - Canada_Atlantic = "Canada/Atlantic" - Asia_Baku = "Asia/Baku" - America_Whitehorse = "America/Whitehorse" - Etc_GMT_1 = "Etc/GMT-1" - Australia_Yancowinna = "Australia/Yancowinna" - Africa_Asmera = "Africa/Asmera" + America_Chicago = "America/Chicago" + America_Chihuahua = "America/Chihuahua" + America_Ciudad_Juarez = "America/Ciudad_Juarez" + America_Coral_Harbour = "America/Coral_Harbour" + America_Cordoba = "America/Cordoba" + America_Costa_Rica = "America/Costa_Rica" + America_Creston = "America/Creston" + America_Cuiaba = "America/Cuiaba" + America_Curacao = "America/Curacao" + America_Danmarkshavn = "America/Danmarkshavn" + America_Dawson = "America/Dawson" + America_Dawson_Creek = "America/Dawson_Creek" + America_Denver = "America/Denver" America_Detroit = "America/Detroit" - Asia_Omsk = "Asia/Omsk" - Africa_Malabo = "Africa/Malabo" - America_Belize = "America/Belize" - America_Porto_Velho = "America/Porto_Velho" - Europe_Volgograd = "Europe/Volgograd" - Asia_Kathmandu = "Asia/Kathmandu" - Indian_Mauritius = "Indian/Mauritius" - Asia_Kamchatka = "Asia/Kamchatka" - America_Argentina_Salta = "America/Argentina/Salta" - America_La_Paz = "America/La_Paz" - Africa_Mbabane = "Africa/Mbabane" - Europe_Paris = "Europe/Paris" - Indian_Antananarivo = "Indian/Antananarivo" - Singapore = "Singapore" - Atlantic_Reykjavik = "Atlantic/Reykjavik" - US_Michigan = "US/Michigan" - Pacific_Bougainville = "Pacific/Bougainville" - Pacific_Wake = "Pacific/Wake" - Asia_Tehran = "Asia/Tehran" - Antarctica_Mawson = "Antarctica/Mawson" - Europe_Astrakhan = "Europe/Astrakhan" - Europe_Bucharest = "Europe/Bucharest" - Africa_Cairo = "Africa/Cairo" - Antarctica_Casey = "Antarctica/Casey" - Africa_Johannesburg = "Africa/Johannesburg" - US_Hawaii = "US/Hawaii" - Libya = "Libya" - Pacific_Kwajalein = "Pacific/Kwajalein" - MET = "MET" - Canada_Pacific = "Canada/Pacific" - Australia_Lindeman = "Australia/Lindeman" - Asia_Sakhalin = "Asia/Sakhalin" - Etc_GMT_7 = "Etc/GMT-7" - Atlantic_Canary = "Atlantic/Canary" - Pacific_Tahiti = "Pacific/Tahiti" - Etc_GMT_4 = "Etc/GMT-4" - America_Nuuk = "America/Nuuk" - Australia_NSW = "Australia/NSW" + America_Dominica = "America/Dominica" + America_Edmonton = "America/Edmonton" + America_Eirunepe = "America/Eirunepe" + America_El_Salvador = "America/El_Salvador" + America_Ensenada = "America/Ensenada" + America_Fort_Nelson = "America/Fort_Nelson" + America_Fort_Wayne = "America/Fort_Wayne" + America_Fortaleza = "America/Fortaleza" + America_Glace_Bay = "America/Glace_Bay" + America_Godthab = "America/Godthab" + America_Goose_Bay = "America/Goose_Bay" + America_Grand_Turk = "America/Grand_Turk" + America_Grenada = "America/Grenada" + America_Guadeloupe = "America/Guadeloupe" + America_Guatemala = "America/Guatemala" + America_Guayaquil = "America/Guayaquil" + America_Guyana = "America/Guyana" + America_Halifax = "America/Halifax" + America_Havana = "America/Havana" + America_Hermosillo = "America/Hermosillo" + America_Indiana_Indianapolis = "America/Indiana/Indianapolis" + America_Indiana_Knox = "America/Indiana/Knox" + America_Indiana_Marengo = "America/Indiana/Marengo" + America_Indiana_Petersburg = "America/Indiana/Petersburg" + America_Indiana_Tell_City = "America/Indiana/Tell_City" + America_Indiana_Vevay = "America/Indiana/Vevay" + America_Indiana_Vincennes = "America/Indiana/Vincennes" + America_Indiana_Winamac = "America/Indiana/Winamac" + America_Indianapolis = "America/Indianapolis" + America_Inuvik = "America/Inuvik" + America_Iqaluit = "America/Iqaluit" + America_Jamaica = "America/Jamaica" + America_Jujuy = "America/Jujuy" + America_Juneau = "America/Juneau" + America_Kentucky_Louisville = "America/Kentucky/Louisville" + America_Kentucky_Monticello = "America/Kentucky/Monticello" America_Knox_IN = "America/Knox_IN" - Asia_Muscat = "Asia/Muscat" - Africa_Banjul = "Africa/Banjul" - Africa_Juba = "Africa/Juba" + America_Kralendijk = "America/Kralendijk" + America_La_Paz = "America/La_Paz" + America_Lima = "America/Lima" + America_Los_Angeles = "America/Los_Angeles" + America_Louisville = "America/Louisville" + America_Lower_Princes = "America/Lower_Princes" + America_Maceio = "America/Maceio" + America_Managua = "America/Managua" + America_Manaus = "America/Manaus" + America_Marigot = "America/Marigot" + America_Martinique = "America/Martinique" + America_Matamoros = "America/Matamoros" + America_Mazatlan = "America/Mazatlan" + America_Mendoza = "America/Mendoza" + America_Menominee = "America/Menominee" + America_Merida = "America/Merida" + America_Metlakatla = "America/Metlakatla" + America_Mexico_City = "America/Mexico_City" + America_Miquelon = "America/Miquelon" + America_Moncton = "America/Moncton" + America_Monterrey = "America/Monterrey" + America_Montevideo = "America/Montevideo" + America_Montreal = "America/Montreal" + America_Montserrat = "America/Montserrat" + America_Nassau = "America/Nassau" + America_New_York = "America/New_York" + America_Nipigon = "America/Nipigon" + America_Nome = "America/Nome" + America_Noronha = "America/Noronha" + America_North_Dakota_Beulah = "America/North_Dakota/Beulah" America_North_Dakota_Center = "America/North_Dakota/Center" - America_Argentina_La_Rioja = "America/Argentina/La_Rioja" - America_Kentucky_Monticello = "America/Kentucky/Monticello" - Africa_Abidjan = "Africa/Abidjan" - Asia_Macau = "Asia/Macau" - Pacific_Pohnpei = "Pacific/Pohnpei" - America_Eirunepe = "America/Eirunepe" - America_Blanc_Sablon = "America/Blanc-Sablon" + America_North_Dakota_New_Salem = "America/North_Dakota/New_Salem" + America_Nuuk = "America/Nuuk" + America_Ojinaga = "America/Ojinaga" + America_Panama = "America/Panama" + America_Pangnirtung = "America/Pangnirtung" + America_Paramaribo = "America/Paramaribo" + America_Phoenix = "America/Phoenix" America_Port_au_Prince = "America/Port-au-Prince" - Australia_South = "Australia/South" - Factory = "Factory" - Pacific_Truk = "Pacific/Truk" - Etc_GMT_2_1 = "Etc/GMT-2" - Asia_Yakutsk = "Asia/Yakutsk" - Africa_Blantyre = "Africa/Blantyre" - Etc_GMT_12_1 = "Etc/GMT-12" - Asia_Qostanay = "Asia/Qostanay" + America_Port_of_Spain = "America/Port_of_Spain" + America_Porto_Acre = "America/Porto_Acre" + America_Porto_Velho = "America/Porto_Velho" + America_Puerto_Rico = "America/Puerto_Rico" + America_Punta_Arenas = "America/Punta_Arenas" + America_Rainy_River = "America/Rainy_River" + America_Rankin_Inlet = "America/Rankin_Inlet" + America_Recife = "America/Recife" + America_Regina = "America/Regina" + America_Resolute = "America/Resolute" + America_Rio_Branco = "America/Rio_Branco" + America_Rosario = "America/Rosario" + America_Santa_Isabel = "America/Santa_Isabel" + America_Santarem = "America/Santarem" + America_Santiago = "America/Santiago" + America_Santo_Domingo = "America/Santo_Domingo" + America_Sao_Paulo = "America/Sao_Paulo" + America_Scoresbysund = "America/Scoresbysund" + America_Shiprock = "America/Shiprock" + America_Sitka = "America/Sitka" + America_St_Barthelemy = "America/St_Barthelemy" + America_St_Johns = "America/St_Johns" + America_St_Kitts = "America/St_Kitts" + America_St_Lucia = "America/St_Lucia" + America_St_Thomas = "America/St_Thomas" + America_St_Vincent = "America/St_Vincent" + America_Swift_Current = "America/Swift_Current" + America_Tegucigalpa = "America/Tegucigalpa" + America_Thule = "America/Thule" + America_Thunder_Bay = "America/Thunder_Bay" + America_Tijuana = "America/Tijuana" + America_Toronto = "America/Toronto" + America_Tortola = "America/Tortola" + America_Vancouver = "America/Vancouver" + America_Virgin = "America/Virgin" + America_Whitehorse = "America/Whitehorse" + America_Winnipeg = "America/Winnipeg" + America_Yakutat = "America/Yakutat" + America_Yellowknife = "America/Yellowknife" + Antarctica_Casey = "Antarctica/Casey" + Antarctica_Davis = "Antarctica/Davis" + Antarctica_DumontDUrville = "Antarctica/DumontDUrville" + Antarctica_Macquarie = "Antarctica/Macquarie" + Antarctica_Mawson = "Antarctica/Mawson" + Antarctica_McMurdo = "Antarctica/McMurdo" + Antarctica_Palmer = "Antarctica/Palmer" + Antarctica_Rothera = "Antarctica/Rothera" + Antarctica_South_Pole = "Antarctica/South_Pole" + Antarctica_Syowa = "Antarctica/Syowa" + Antarctica_Troll = "Antarctica/Troll" + Antarctica_Vostok = "Antarctica/Vostok" + Arctic_Longyearbyen = "Arctic/Longyearbyen" + Asia_Aden = "Asia/Aden" + Asia_Almaty = "Asia/Almaty" + Asia_Amman = "Asia/Amman" + Asia_Anadyr = "Asia/Anadyr" + Asia_Aqtau = "Asia/Aqtau" + Asia_Aqtobe = "Asia/Aqtobe" + Asia_Ashgabat = "Asia/Ashgabat" + Asia_Ashkhabad = "Asia/Ashkhabad" + Asia_Atyrau = "Asia/Atyrau" + Asia_Baghdad = "Asia/Baghdad" + Asia_Bahrain = "Asia/Bahrain" + Asia_Baku = "Asia/Baku" + Asia_Bangkok = "Asia/Bangkok" Asia_Barnaul = "Asia/Barnaul" - Europe_Zaporozhye = "Europe/Zaporozhye" - America_Argentina_Tucuman = "America/Argentina/Tucuman" - US_Mountain = "US/Mountain" - Europe_Budapest = "Europe/Budapest" - Pacific_Ponape = "Pacific/Ponape" - America_Martinique = "America/Martinique" - Pacific_Yap = "Pacific/Yap" - Africa_Maseru = "Africa/Maseru" - Pacific_Tongatapu = "Pacific/Tongatapu" - Asia_Thimbu = "Asia/Thimbu" - Europe_Chisinau = "Europe/Chisinau" - Asia_Kuala_Lumpur = "Asia/Kuala_Lumpur" - US_East_Indiana = "US/East-Indiana" - Asia_Yerevan = "Asia/Yerevan" - NZ_CHAT = "NZ-CHAT" - Asia_Hovd = "Asia/Hovd" - America_Atka = "America/Atka" - Indian_Christmas = "Indian/Christmas" - America_Indianapolis = "America/Indianapolis" + Asia_Beirut = "Asia/Beirut" Asia_Bishkek = "Asia/Bishkek" - Australia_Broken_Hill = "Australia/Broken_Hill" - Japan = "Japan" - W_SU = "W-SU" - Pacific_Kosrae = "Pacific/Kosrae" - Asia_Tokyo = "Asia/Tokyo" - GMT = "GMT" + Asia_Brunei = "Asia/Brunei" + Asia_Calcutta = "Asia/Calcutta" + Asia_Chita = "Asia/Chita" + Asia_Choibalsan = "Asia/Choibalsan" + Asia_Chongqing = "Asia/Chongqing" + Asia_Chungking = "Asia/Chungking" + Asia_Colombo = "Asia/Colombo" + Asia_Dacca = "Asia/Dacca" + Asia_Damascus = "Asia/Damascus" + Asia_Dhaka = "Asia/Dhaka" + Asia_Dili = "Asia/Dili" + Asia_Dubai = "Asia/Dubai" + Asia_Dushanbe = "Asia/Dushanbe" + Asia_Famagusta = "Asia/Famagusta" Asia_Gaza = "Asia/Gaza" - America_Indiana_Vincennes = "America/Indiana/Vincennes" - America_Atikokan = "America/Atikokan" - Africa_Sao_Tome = "Africa/Sao_Tome" - Asia_Yangon = "Asia/Yangon" - ROC = "ROC" - Europe_Sarajevo = "Europe/Sarajevo" - Africa_Khartoum = "Africa/Khartoum" - Arctic_Longyearbyen = "Arctic/Longyearbyen" - CET = "CET" - Etc_GMT_7_1 = "Etc/GMT+7" - America_Coral_Harbour = "America/Coral_Harbour" - America_Winnipeg = "America/Winnipeg" - America_Rio_Branco = "America/Rio_Branco" - Africa_Kinshasa = "Africa/Kinshasa" - America_Antigua = "America/Antigua" - Pacific_Apia = "Pacific/Apia" - America_Bogota = "America/Bogota" - Australia_Victoria = "Australia/Victoria" - Europe_Skopje = "Europe/Skopje" - Africa_Ndjamena = "Africa/Ndjamena" - Atlantic_Bermuda = "Atlantic/Bermuda" - ROK = "ROK" - Pacific_Chatham = "Pacific/Chatham" - Africa_Tunis = "Africa/Tunis" - Etc_Universal = "Etc/Universal" - America_St_Lucia = "America/St_Lucia" - Indian_Maldives = "Indian/Maldives" - Pacific_Midway = "Pacific/Midway" - Pacific_Norfolk = "Pacific/Norfolk" - America_Asuncion = "America/Asuncion" - America_Fort_Wayne = "America/Fort_Wayne" - Africa_Monrovia = "Africa/Monrovia" - US_Aleutian = "US/Aleutian" - Pacific_Johnston = "Pacific/Johnston" - Asia_Jakarta = "Asia/Jakarta" - Asia_Ust_Nera = "Asia/Ust-Nera" - Europe_Vaduz = "Europe/Vaduz" + Asia_Harbin = "Asia/Harbin" + Asia_Hebron = "Asia/Hebron" + Asia_Ho_Chi_Minh = "Asia/Ho_Chi_Minh" Asia_Hong_Kong = "Asia/Hong_Kong" + Asia_Hovd = "Asia/Hovd" + Asia_Irkutsk = "Asia/Irkutsk" + Asia_Istanbul = "Asia/Istanbul" + Asia_Jakarta = "Asia/Jakarta" + Asia_Jayapura = "Asia/Jayapura" + Asia_Jerusalem = "Asia/Jerusalem" + Asia_Kabul = "Asia/Kabul" + Asia_Kamchatka = "Asia/Kamchatka" + Asia_Karachi = "Asia/Karachi" + Asia_Kashgar = "Asia/Kashgar" + Asia_Kathmandu = "Asia/Kathmandu" + Asia_Katmandu = "Asia/Katmandu" + Asia_Khandyga = "Asia/Khandyga" + Asia_Kolkata = "Asia/Kolkata" + Asia_Krasnoyarsk = "Asia/Krasnoyarsk" + Asia_Kuala_Lumpur = "Asia/Kuala_Lumpur" + Asia_Kuching = "Asia/Kuching" + Asia_Kuwait = "Asia/Kuwait" + Asia_Macao = "Asia/Macao" + Asia_Macau = "Asia/Macau" + Asia_Magadan = "Asia/Magadan" + Asia_Makassar = "Asia/Makassar" + Asia_Manila = "Asia/Manila" + Asia_Muscat = "Asia/Muscat" + Asia_Nicosia = "Asia/Nicosia" + Asia_Novokuznetsk = "Asia/Novokuznetsk" + Asia_Novosibirsk = "Asia/Novosibirsk" + Asia_Omsk = "Asia/Omsk" + Asia_Oral = "Asia/Oral" + Asia_Phnom_Penh = "Asia/Phnom_Penh" + Asia_Pontianak = "Asia/Pontianak" + Asia_Pyongyang = "Asia/Pyongyang" + Asia_Qatar = "Asia/Qatar" + Asia_Qostanay = "Asia/Qostanay" + Asia_Qyzylorda = "Asia/Qyzylorda" + Asia_Rangoon = "Asia/Rangoon" Asia_Riyadh = "Asia/Riyadh" - Africa_Timbuktu = "Africa/Timbuktu" - America_Cancun = "America/Cancun" - MST = "MST" - America_Dominica = "America/Dominica" + Asia_Saigon = "Asia/Saigon" + Asia_Sakhalin = "Asia/Sakhalin" Asia_Samarkand = "Asia/Samarkand" - America_Barbados = "America/Barbados" - NZ = "NZ" - Asia_Qyzylorda = "Asia/Qyzylorda" - America_Denver = "America/Denver" - America_Catamarca = "America/Catamarca" + Asia_Seoul = "Asia/Seoul" + Asia_Shanghai = "Asia/Shanghai" + Asia_Singapore = "Asia/Singapore" + Asia_Srednekolymsk = "Asia/Srednekolymsk" + Asia_Taipei = "Asia/Taipei" + Asia_Tashkent = "Asia/Tashkent" + Asia_Tbilisi = "Asia/Tbilisi" + Asia_Tehran = "Asia/Tehran" + Asia_Tel_Aviv = "Asia/Tel_Aviv" + Asia_Thimbu = "Asia/Thimbu" + Asia_Thimphu = "Asia/Thimphu" + Asia_Tokyo = "Asia/Tokyo" + Asia_Tomsk = "Asia/Tomsk" + Asia_Ujung_Pandang = "Asia/Ujung_Pandang" + Asia_Ulaanbaatar = "Asia/Ulaanbaatar" + Asia_Ulan_Bator = "Asia/Ulan_Bator" + Asia_Urumqi = "Asia/Urumqi" + Asia_Ust_Nera = "Asia/Ust-Nera" Asia_Vientiane = "Asia/Vientiane" - Indian_Reunion = "Indian/Reunion" + Asia_Vladivostok = "Asia/Vladivostok" + Asia_Yakutsk = "Asia/Yakutsk" + Asia_Yangon = "Asia/Yangon" + Asia_Yekaterinburg = "Asia/Yekaterinburg" + Asia_Yerevan = "Asia/Yerevan" Atlantic_Azores = "Atlantic/Azores" - Mexico_BajaSur = "Mexico/BajaSur" - Mexico_General = "Mexico/General" - Europe_Busingen = "Europe/Busingen" - GMT_0 = "GMT+0" - Asia_Kashgar = "Asia/Kashgar" - Pacific_Fiji = "Pacific/Fiji" - Asia_Novokuznetsk = "Asia/Novokuznetsk" - Africa_Maputo = "Africa/Maputo" - America_Iqaluit = "America/Iqaluit" - America_Creston = "America/Creston" - Indian_Kerguelen = "Indian/Kerguelen" - America_Montevideo = "America/Montevideo" - Pacific_Fakaofo = "Pacific/Fakaofo" - Atlantic_Faroe = "Atlantic/Faroe" - Asia_Almaty = "Asia/Almaty" - America_Chihuahua = "America/Chihuahua" - Indian_Mahe = "Indian/Mahe" - Etc_GMT = "Etc/GMT" - Asia_Famagusta = "Asia/Famagusta" - America_Thunder_Bay = "America/Thunder_Bay" - America_Los_Angeles = "America/Los_Angeles" + Atlantic_Bermuda = "Atlantic/Bermuda" + Atlantic_Canary = "Atlantic/Canary" Atlantic_Cape_Verde = "Atlantic/Cape_Verde" - Asia_Jayapura = "Asia/Jayapura" - Asia_Khandyga = "Asia/Khandyga" - America_Fort_Nelson = "America/Fort_Nelson" - Asia_Singapore = "Asia/Singapore" - Asia_Tashkent = "Asia/Tashkent" + Atlantic_Faeroe = "Atlantic/Faeroe" + Atlantic_Faroe = "Atlantic/Faroe" + Atlantic_Jan_Mayen = "Atlantic/Jan_Mayen" + Atlantic_Madeira = "Atlantic/Madeira" + Atlantic_Reykjavik = "Atlantic/Reykjavik" + Atlantic_South_Georgia = "Atlantic/South_Georgia" + Atlantic_St_Helena = "Atlantic/St_Helena" + Atlantic_Stanley = "Atlantic/Stanley" + Australia_ACT = "Australia/ACT" + Australia_Adelaide = "Australia/Adelaide" + Australia_Brisbane = "Australia/Brisbane" + Australia_Broken_Hill = "Australia/Broken_Hill" Australia_Canberra = "Australia/Canberra" + Australia_Currie = "Australia/Currie" + Australia_Darwin = "Australia/Darwin" + Australia_Eucla = "Australia/Eucla" + Australia_Hobart = "Australia/Hobart" + Australia_LHI = "Australia/LHI" + Australia_Lindeman = "Australia/Lindeman" + Australia_Lord_Howe = "Australia/Lord_Howe" + Australia_Melbourne = "Australia/Melbourne" + Australia_NSW = "Australia/NSW" + Australia_North = "Australia/North" + Australia_Perth = "Australia/Perth" + Australia_Queensland = "Australia/Queensland" + Australia_South = "Australia/South" + Australia_Sydney = "Australia/Sydney" + Australia_Tasmania = "Australia/Tasmania" + Australia_Victoria = "Australia/Victoria" + Australia_West = "Australia/West" + Australia_Yancowinna = "Australia/Yancowinna" + Brazil_Acre = "Brazil/Acre" + Brazil_DeNoronha = "Brazil/DeNoronha" + Brazil_East = "Brazil/East" + Brazil_West = "Brazil/West" + CET = "CET" + CST6CDT = "CST6CDT" + Canada_Atlantic = "Canada/Atlantic" + Canada_Central = "Canada/Central" + Canada_Eastern = "Canada/Eastern" + Canada_Mountain = "Canada/Mountain" + Canada_Newfoundland = "Canada/Newfoundland" + Canada_Pacific = "Canada/Pacific" + Canada_Saskatchewan = "Canada/Saskatchewan" + Canada_Yukon = "Canada/Yukon" + Chile_Continental = "Chile/Continental" + Chile_EasterIsland = "Chile/EasterIsland" + Cuba = "Cuba" + EET = "EET" + EST = "EST" + EST5EDT = "EST5EDT" + Egypt = "Egypt" + Eire = "Eire" + Etc_GMT = "Etc/GMT" + Etc_GMT_0 = "Etc/GMT+0" + Etc_GMT_1 = "Etc/GMT+1" + Etc_GMT_10 = "Etc/GMT+10" + Etc_GMT_11 = "Etc/GMT+11" + Etc_GMT_12 = "Etc/GMT+12" + Etc_GMT_2 = "Etc/GMT+2" + Etc_GMT_3 = "Etc/GMT+3" + Etc_GMT_4 = "Etc/GMT+4" + Etc_GMT_5 = "Etc/GMT+5" Etc_GMT_6 = "Etc/GMT+6" - Asia_Kuwait = "Asia/Kuwait" - Asia_Kuching = "Asia/Kuching" - Antarctica_Troll = "Antarctica/Troll" - America_Ensenada = "America/Ensenada" - Etc_Zulu = "Etc/Zulu" - Africa_Bangui = "Africa/Bangui" - Etc_GMT_0 = "Etc/GMT-0" - Africa_Algiers = "Africa/Algiers" + Etc_GMT_7 = "Etc/GMT+7" + Etc_GMT_8 = "Etc/GMT+8" + Etc_GMT_9 = "Etc/GMT+9" + Etc_GMT_0_1 = "Etc/GMT-0" + Etc_GMT_1_1 = "Etc/GMT-1" + Etc_GMT_10_1 = "Etc/GMT-10" + Etc_GMT_11_1 = "Etc/GMT-11" + Etc_GMT_12_1 = "Etc/GMT-12" + Etc_GMT_13 = "Etc/GMT-13" Etc_GMT_14 = "Etc/GMT-14" - America_Rainy_River = "America/Rainy_River" - Europe_Madrid = "Europe/Madrid" - Asia_Saigon = "Asia/Saigon" - Zulu = "Zulu" - Asia_Bangkok = "Asia/Bangkok" - Asia_Nicosia = "Asia/Nicosia" - Africa_Lubumbashi = "Africa/Lubumbashi" - Indian_Chagos = "Indian/Chagos" - Africa_Conakry = "Africa/Conakry" - Europe_Amsterdam = "Europe/Amsterdam" - Europe_Ljubljana = "Europe/Ljubljana" - localtime = "localtime" - Etc_UCT = "Etc/UCT" - Africa_El_Aaiun = "Africa/El_Aaiun" - America_Glace_Bay = "America/Glace_Bay" - America_El_Salvador = "America/El_Salvador" - CST6CDT = "CST6CDT" - Pacific_Marquesas = "Pacific/Marquesas" - Pacific_Guadalcanal = "Pacific/Guadalcanal" + Etc_GMT_2_1 = "Etc/GMT-2" + Etc_GMT_3_1 = "Etc/GMT-3" + Etc_GMT_4_1 = "Etc/GMT-4" + Etc_GMT_5_1 = "Etc/GMT-5" + Etc_GMT_6_1 = "Etc/GMT-6" + Etc_GMT_7_1 = "Etc/GMT-7" + Etc_GMT_8_1 = "Etc/GMT-8" + Etc_GMT_9_1 = "Etc/GMT-9" Etc_GMT0 = "Etc/GMT0" - Asia_Ulaanbaatar = "Asia/Ulaanbaatar" - Atlantic_South_Georgia = "Atlantic/South_Georgia" - Pacific_Nauru = "Pacific/Nauru" - America_Indiana_Petersburg = "America/Indiana/Petersburg" - Jamaica = "Jamaica" - America_Argentina_San_Luis = "America/Argentina/San_Luis" - Africa_Libreville = "Africa/Libreville" - EET = "EET" - Asia_Harbin = "Asia/Harbin" - Europe_Zurich = "Europe/Zurich" - America_Edmonton = "America/Edmonton" - Africa_Niamey = "Africa/Niamey" - Europe_Luxembourg = "Europe/Luxembourg" - Europe_Vienna = "Europe/Vienna" - America_Aruba = "America/Aruba" - Europe_Vatican = "Europe/Vatican" - America_Argentina_Rio_Gallegos = "America/Argentina/Rio_Gallegos" - Atlantic_Faeroe = "Atlantic/Faeroe" - Africa_Tripoli = "Africa/Tripoli" - Asia_Novosibirsk = "Asia/Novosibirsk" - US_Pacific = "US/Pacific" - Europe_Lisbon = "Europe/Lisbon" - Asia_Ujung_Pandang = "Asia/Ujung_Pandang" - US_Samoa = "US/Samoa" - Europe_Guernsey = "Europe/Guernsey" - Asia_Ashgabat = "Asia/Ashgabat" - America_Campo_Grande = "America/Campo_Grande" - Europe_Gibraltar = "Europe/Gibraltar" - America_Sao_Paulo = "America/Sao_Paulo" - America_Marigot = "America/Marigot" + Etc_Greenwich = "Etc/Greenwich" + Etc_UCT = "Etc/UCT" Etc_UTC = "Etc/UTC" - Pacific_Samoa = "Pacific/Samoa" - Europe_Riga = "Europe/Riga" + Etc_Universal = "Etc/Universal" + Etc_Zulu = "Etc/Zulu" + Europe_Amsterdam = "Europe/Amsterdam" + Europe_Andorra = "Europe/Andorra" + Europe_Astrakhan = "Europe/Astrakhan" + Europe_Athens = "Europe/Athens" + Europe_Belfast = "Europe/Belfast" Europe_Belgrade = "Europe/Belgrade" - America_Adak = "America/Adak" - Africa_Mogadishu = "Africa/Mogadishu" - America_Costa_Rica = "America/Costa_Rica" - EST = "EST" - Australia_Sydney = "Australia/Sydney" - Etc_GMT_3_1 = "Etc/GMT+3" - Asia_Aqtau = "Asia/Aqtau" - Canada_Central = "Canada/Central" - Europe_Tirane = "Europe/Tirane" - Asia_Dubai = "Asia/Dubai" - America_Juneau = "America/Juneau" - Pacific_Palau = "Pacific/Palau" - Asia_Thimphu = "Asia/Thimphu" - America_Kralendijk = "America/Kralendijk" - Europe_Oslo = "Europe/Oslo" - America_Havana = "America/Havana" - Etc_GMT_1_1 = "Etc/GMT+1" - Antarctica_Vostok = "Antarctica/Vostok" - Europe_Saratov = "Europe/Saratov" - Asia_Jerusalem = "Asia/Jerusalem" + Europe_Berlin = "Europe/Berlin" + Europe_Bratislava = "Europe/Bratislava" + Europe_Brussels = "Europe/Brussels" + Europe_Bucharest = "Europe/Bucharest" + Europe_Budapest = "Europe/Budapest" + Europe_Busingen = "Europe/Busingen" + Europe_Chisinau = "Europe/Chisinau" + Europe_Copenhagen = "Europe/Copenhagen" Europe_Dublin = "Europe/Dublin" - Antarctica_South_Pole = "Antarctica/South_Pole" - Asia_Beirut = "Asia/Beirut" - Indian_Comoro = "Indian/Comoro" + Europe_Gibraltar = "Europe/Gibraltar" + Europe_Guernsey = "Europe/Guernsey" + Europe_Helsinki = "Europe/Helsinki" + Europe_Isle_of_Man = "Europe/Isle_of_Man" Europe_Istanbul = "Europe/Istanbul" - Asia_Krasnoyarsk = "Asia/Krasnoyarsk" - Pacific_Kanton = "Pacific/Kanton" - America_Thule = "America/Thule" - Indian_Cocos = "Indian/Cocos" - Asia_Srednekolymsk = "Asia/Srednekolymsk" - America_Jamaica = "America/Jamaica" - America_Panama = "America/Panama" - America_Port_of_Spain = "America/Port_of_Spain" - America_Anchorage = "America/Anchorage" - Africa_Lagos = "Africa/Lagos" - America_Fortaleza = "America/Fortaleza" - Pacific_Chuuk = "Pacific/Chuuk" - America_Indiana_Vevay = "America/Indiana/Vevay" - Cuba = "Cuba" - Pacific_Rarotonga = "Pacific/Rarotonga" - Etc_GMT_0_1 = "Etc/GMT+0" - US_Central = "US/Central" - Europe_Athens = "Europe/Athens" - Europe_Tallinn = "Europe/Tallinn" - Antarctica_Palmer = "Antarctica/Palmer" - Australia_Perth = "Australia/Perth" - Africa_Gaborone = "Africa/Gaborone" - Asia_Anadyr = "Asia/Anadyr" - Pacific_Kiritimati = "Pacific/Kiritimati" Europe_Jersey = "Europe/Jersey" + Europe_Kaliningrad = "Europe/Kaliningrad" + Europe_Kiev = "Europe/Kiev" + Europe_Kirov = "Europe/Kirov" Europe_Kyiv = "Europe/Kyiv" - Asia_Katmandu = "Asia/Katmandu" - Brazil_West = "Brazil/West" - Africa_Accra = "Africa/Accra" + Europe_Lisbon = "Europe/Lisbon" + Europe_Ljubljana = "Europe/Ljubljana" + Europe_London = "Europe/London" + Europe_Luxembourg = "Europe/Luxembourg" + Europe_Madrid = "Europe/Madrid" + Europe_Malta = "Europe/Malta" + Europe_Mariehamn = "Europe/Mariehamn" + Europe_Minsk = "Europe/Minsk" + Europe_Monaco = "Europe/Monaco" + Europe_Moscow = "Europe/Moscow" + Europe_Nicosia = "Europe/Nicosia" + Europe_Oslo = "Europe/Oslo" + Europe_Paris = "Europe/Paris" + Europe_Podgorica = "Europe/Podgorica" + Europe_Prague = "Europe/Prague" + Europe_Riga = "Europe/Riga" + Europe_Rome = "Europe/Rome" + Europe_Samara = "Europe/Samara" + Europe_San_Marino = "Europe/San_Marino" + Europe_Sarajevo = "Europe/Sarajevo" + Europe_Saratov = "Europe/Saratov" Europe_Simferopol = "Europe/Simferopol" - Canada_Saskatchewan = "Canada/Saskatchewan" - Africa_Kampala = "Africa/Kampala" - Canada_Eastern = "Canada/Eastern" - Africa_Casablanca = "Africa/Casablanca" - UTC = "UTC" - America_Indiana_Winamac = "America/Indiana/Winamac" - America_Toronto = "America/Toronto" - America_Chicago = "America/Chicago" - Etc_GMT_9_1 = "Etc/GMT-9" - Africa_Dakar = "Africa/Dakar" - Asia_Manila = "Asia/Manila" - Indian_Mayotte = "Indian/Mayotte" - Asia_Brunei = "Asia/Brunei" - Pacific_Tarawa = "Pacific/Tarawa" - Pacific_Saipan = "Pacific/Saipan" - America_Montserrat = "America/Montserrat" - America_North_Dakota_New_Salem = "America/North_Dakota/New_Salem" - Asia_Bahrain = "Asia/Bahrain" - Asia_Karachi = "Asia/Karachi" - Atlantic_St_Helena = "Atlantic/St_Helena" - Africa_Bissau = "Africa/Bissau" - Etc_GMT_11_1 = "Etc/GMT+11" - Pacific_Efate = "Pacific/Efate" - Atlantic_Madeira = "Atlantic/Madeira" - America_Paramaribo = "America/Paramaribo" + Europe_Skopje = "Europe/Skopje" Europe_Sofia = "Europe/Sofia" - America_Anguilla = "America/Anguilla" - America_Monterrey = "America/Monterrey" - Pacific_Guam = "Pacific/Guam" - GMT_0_1 = "GMT-0" - Europe_Kaliningrad = "Europe/Kaliningrad" - America_Menominee = "America/Menominee" - Europe_Nicosia = "Europe/Nicosia" - Africa_Porto_Novo = "Africa/Porto-Novo" - Australia_Tasmania = "Australia/Tasmania" - Africa_Windhoek = "Africa/Windhoek" + Europe_Stockholm = "Europe/Stockholm" + Europe_Tallinn = "Europe/Tallinn" + Europe_Tirane = "Europe/Tirane" + Europe_Tiraspol = "Europe/Tiraspol" + Europe_Ulyanovsk = "Europe/Ulyanovsk" + Europe_Uzhgorod = "Europe/Uzhgorod" + Europe_Vaduz = "Europe/Vaduz" + Europe_Vatican = "Europe/Vatican" + Europe_Vienna = "Europe/Vienna" + Europe_Vilnius = "Europe/Vilnius" + Europe_Volgograd = "Europe/Volgograd" Europe_Warsaw = "Europe/Warsaw" - America_Santa_Isabel = "America/Santa_Isabel" - Africa_Bujumbura = "Africa/Bujumbura" - America_Santarem = "America/Santarem" - Pacific_Easter = "Pacific/Easter" - Pacific_Honolulu = "Pacific/Honolulu" - America_Nassau = "America/Nassau" - Asia_Irkutsk = "Asia/Irkutsk" - America_Santo_Domingo = "America/Santo_Domingo" - America_Caracas = "America/Caracas" - Asia_Pyongyang = "Asia/Pyongyang" - America_Yellowknife = "America/Yellowknife" - America_Nome = "America/Nome" - Africa_Bamako = "Africa/Bamako" - Asia_Kabul = "Asia/Kabul" - Portugal = "Portugal" - America_Ojinaga = "America/Ojinaga" - Etc_GMT_10_1 = "Etc/GMT+10" + Europe_Zagreb = "Europe/Zagreb" + Europe_Zaporozhye = "Europe/Zaporozhye" + Europe_Zurich = "Europe/Zurich" + Factory = "Factory" + GB = "GB" + GB_Eire = "GB-Eire" + GMT = "GMT" + GMT_0 = "GMT+0" + GMT_0_1 = "GMT-0" + GMT0 = "GMT0" + Greenwich = "Greenwich" + HST = "HST" + Hongkong = "Hongkong" + Iceland = "Iceland" + Indian_Antananarivo = "Indian/Antananarivo" + Indian_Chagos = "Indian/Chagos" + Indian_Christmas = "Indian/Christmas" + Indian_Cocos = "Indian/Cocos" + Indian_Comoro = "Indian/Comoro" + Indian_Kerguelen = "Indian/Kerguelen" + Indian_Mahe = "Indian/Mahe" + Indian_Maldives = "Indian/Maldives" + Indian_Mauritius = "Indian/Mauritius" + Indian_Mayotte = "Indian/Mayotte" + Indian_Reunion = "Indian/Reunion" + Iran = "Iran" + Israel = "Israel" + Jamaica = "Jamaica" + Japan = "Japan" + Kwajalein = "Kwajalein" + Libya = "Libya" + MET = "MET" + MST = "MST" + MST7MDT = "MST7MDT" + Mexico_BajaNorte = "Mexico/BajaNorte" + Mexico_BajaSur = "Mexico/BajaSur" + Mexico_General = "Mexico/General" + NZ = "NZ" + NZ_CHAT = "NZ-CHAT" + Navajo = "Navajo" PRC = "PRC" - America_Virgin = "America/Virgin" - Antarctica_Syowa = "Antarctica/Syowa" - US_Eastern = "US/Eastern" - Asia_Urumqi = "Asia/Urumqi" - America_Boise = "America/Boise" - America_Dawson = "America/Dawson" - America_Grand_Turk = "America/Grand_Turk" - America_Montreal = "America/Montreal" - America_St_Barthelemy = "America/St_Barthelemy" - America_Cordoba = "America/Cordoba" - America_Punta_Arenas = "America/Punta_Arenas" - America_Mazatlan = "America/Mazatlan" - GMT0 = "GMT0" - America_Cuiaba = "America/Cuiaba" - Europe_Copenhagen = "Europe/Copenhagen" - Europe_San_Marino = "Europe/San_Marino" - Africa_Freetown = "Africa/Freetown" - Australia_Melbourne = "Australia/Melbourne" - America_St_Thomas = "America/St_Thomas" - America_Matamoros = "America/Matamoros" - Etc_GMT_6_1 = "Etc/GMT-6" - Asia_Pontianak = "Asia/Pontianak" - America_Guadeloupe = "America/Guadeloupe" - Asia_Seoul = "Asia/Seoul" - America_Indiana_Marengo = "America/Indiana/Marengo" - Chile_EasterIsland = "Chile/EasterIsland" - Atlantic_Jan_Mayen = "Atlantic/Jan_Mayen" - Europe_Uzhgorod = "Europe/Uzhgorod" - America_Swift_Current = "America/Swift_Current" - Africa_Dar_es_Salaam = "Africa/Dar_es_Salaam" PST8PDT = "PST8PDT" - Africa_Nouakchott = "Africa/Nouakchott" - Asia_Ho_Chi_Minh = "Asia/Ho_Chi_Minh" - Antarctica_McMurdo = "Antarctica/McMurdo" - Asia_Choibalsan = "Asia/Choibalsan" + Pacific_Apia = "Pacific/Apia" Pacific_Auckland = "Pacific/Auckland" - Mexico_BajaNorte = "Mexico/BajaNorte" - Asia_Vladivostok = "Asia/Vladivostok" - Europe_Bratislava = "Europe/Bratislava" - America_Sitka = "America/Sitka" - America_Rankin_Inlet = "America/Rankin_Inlet" - America_Jujuy = "America/Jujuy" - America_Tijuana = "America/Tijuana" - Africa_Luanda = "Africa/Luanda" - Europe_Zagreb = "Europe/Zagreb" - Asia_Macao = "Asia/Macao" - Australia_West = "Australia/West" - Africa_Ouagadougou = "Africa/Ouagadougou" - Poland = "Poland" - Asia_Shanghai = "Asia/Shanghai" - Kwajalein = "Kwajalein" - Australia_Darwin = "Australia/Darwin" - America_Ciudad_Juarez = "America/Ciudad_Juarez" - America_Porto_Acre = "America/Porto_Acre" - Africa_Brazzaville = "Africa/Brazzaville" - Africa_Asmara = "Africa/Asmara" - Eire = "Eire" - Europe_Belfast = "Europe/Belfast" - Israel = "Israel" - America_Argentina_San_Juan = "America/Argentina/San_Juan" - Asia_Aden = "Asia/Aden" - America_Guyana = "America/Guyana" - Europe_Kiev = "Europe/Kiev" - America_Yakutat = "America/Yakutat" - America_Argentina_Mendoza = "America/Argentina/Mendoza" - Antarctica_Rothera = "Antarctica/Rothera" - Asia_Aqtobe = "Asia/Aqtobe" - Pacific_Port_Moresby = "Pacific/Port_Moresby" - America_Indiana_Tell_City = "America/Indiana/Tell_City" - Europe_Minsk = "Europe/Minsk" - Europe_Malta = "Europe/Malta" - Asia_Rangoon = "Asia/Rangoon" - Antarctica_Macquarie = "Antarctica/Macquarie" - Etc_GMT_4_1 = "Etc/GMT+4" - America_Cambridge_Bay = "America/Cambridge_Bay" + Pacific_Bougainville = "Pacific/Bougainville" + Pacific_Chatham = "Pacific/Chatham" + Pacific_Chuuk = "Pacific/Chuuk" + Pacific_Easter = "Pacific/Easter" + Pacific_Efate = "Pacific/Efate" + Pacific_Enderbury = "Pacific/Enderbury" + Pacific_Fakaofo = "Pacific/Fakaofo" + Pacific_Fiji = "Pacific/Fiji" + Pacific_Funafuti = "Pacific/Funafuti" + Pacific_Galapagos = "Pacific/Galapagos" + Pacific_Gambier = "Pacific/Gambier" + Pacific_Guadalcanal = "Pacific/Guadalcanal" + Pacific_Guam = "Pacific/Guam" + Pacific_Honolulu = "Pacific/Honolulu" + Pacific_Johnston = "Pacific/Johnston" + Pacific_Kanton = "Pacific/Kanton" + Pacific_Kiritimati = "Pacific/Kiritimati" + Pacific_Kosrae = "Pacific/Kosrae" + Pacific_Kwajalein = "Pacific/Kwajalein" + Pacific_Majuro = "Pacific/Majuro" + Pacific_Marquesas = "Pacific/Marquesas" + Pacific_Midway = "Pacific/Midway" + Pacific_Nauru = "Pacific/Nauru" + Pacific_Niue = "Pacific/Niue" + Pacific_Norfolk = "Pacific/Norfolk" + Pacific_Noumea = "Pacific/Noumea" Pacific_Pago_Pago = "Pacific/Pago_Pago" - America_Pangnirtung = "America/Pangnirtung" - America_Rosario = "America/Rosario" - Canada_Newfoundland = "Canada/Newfoundland" - America_Godthab = "America/Godthab" - Navajo = "Navajo" + Pacific_Palau = "Pacific/Palau" + Pacific_Pitcairn = "Pacific/Pitcairn" + Pacific_Pohnpei = "Pacific/Pohnpei" + Pacific_Ponape = "Pacific/Ponape" + Pacific_Port_Moresby = "Pacific/Port_Moresby" + Pacific_Rarotonga = "Pacific/Rarotonga" + Pacific_Saipan = "Pacific/Saipan" + Pacific_Samoa = "Pacific/Samoa" + Pacific_Tahiti = "Pacific/Tahiti" + Pacific_Tarawa = "Pacific/Tarawa" + Pacific_Tongatapu = "Pacific/Tongatapu" + Pacific_Truk = "Pacific/Truk" + Pacific_Wake = "Pacific/Wake" + Pacific_Wallis = "Pacific/Wallis" + Pacific_Yap = "Pacific/Yap" + Poland = "Poland" + Portugal = "Portugal" + ROC = "ROC" + ROK = "ROK" + Singapore = "Singapore" + Turkey = "Turkey" UCT = "UCT" - Greenwich = "Greenwich" - America_Lima = "America/Lima" - America_Tortola = "America/Tortola" - Pacific_Funafuti = "Pacific/Funafuti" - Etc_Greenwich = "Etc/Greenwich" - America_Santiago = "America/Santiago" - America_Mendoza = "America/Mendoza" - Asia_Dacca = "Asia/Dacca" - Iran = "Iran" - America_Moncton = "America/Moncton" + US_Alaska = "US/Alaska" + US_Aleutian = "US/Aleutian" + US_Arizona = "US/Arizona" + US_Central = "US/Central" + US_East_Indiana = "US/East-Indiana" + US_Eastern = "US/Eastern" + US_Hawaii = "US/Hawaii" + US_Indiana_Starke = "US/Indiana-Starke" + US_Michigan = "US/Michigan" + US_Mountain = "US/Mountain" + US_Pacific = "US/Pacific" + US_Samoa = "US/Samoa" + UTC = "UTC" + Universal = "Universal" + W_SU = "W-SU" + WET = "WET" + Zulu = "Zulu" + localtime = "localtime" @dataclass @@ -1600,11 +1391,14 @@ class WorkstationConfig(BaseModel): default_overlay_lut: LookUpTable default_overlay_interpolation: str default_image_interpolation: str - overlay_segments: Optional[dict[str, Any]] - key_bindings: Optional[dict[str, Any]] + default_limit_view_area_to_image_volume: Optional[bool] + ghosting_slice_depth: Optional[int] + overlay_segments: Optional[Any] + key_bindings: Optional[Any] default_zoom_scale: float default_brush_size: Optional[Decimal] default_annotation_color: Optional[str] + default_annotation_line_width: Optional[int] show_image_info_plugin: Optional[bool] show_display_plugin: Optional[bool] show_image_switcher_plugin: Optional[bool] @@ -1629,6 +1423,7 @@ class WorkstationConfig(BaseModel): link_windowing: Optional[bool] link_inverting: Optional[bool] link_flipping: Optional[bool] + point_bounding_box_size_mm: float @dataclass @@ -1636,13 +1431,16 @@ class ArchiveItemPost(BaseModel): pk: str values: list[ComponentInterfaceValuePost] hanging_protocol: Optional[HangingProtocol] - view_content: dict[str, Any] + optional_hanging_protocols: list[HangingProtocol] + view_content: Any + title: str = "" @dataclass class ArchiveItemPostRequest(BaseModel): archive: str values: list[ComponentInterfaceValuePostRequest] + title: str = "" @dataclass @@ -1652,17 +1450,17 @@ class ComponentInterface(BaseModel): slug: str kind: str pk: int - default_value: Optional[dict[str, Any]] + default_value: Optional[Any] super_kind: str relative_path: str - overlay_segments: Optional[dict[str, Any]] + overlay_segments: Optional[Any] look_up_table: Optional[LookUpTable] @dataclass class ComponentInterfaceValue(BaseModel): interface: ComponentInterface - value: Optional[dict[str, Any]] + value: Optional[Any] file: Optional[str] image: Optional[SimpleImage] pk: int @@ -1676,15 +1474,17 @@ class DisplaySetPost(BaseModel): order: Optional[int] api_url: str hanging_protocol: Optional[HangingProtocol] - view_content: dict[str, Any] + optional_hanging_protocols: list[HangingProtocol] + view_content: Any description: str index: Optional[int] + title: str = "" @dataclass class HyperlinkedComponentInterfaceValue(BaseModel): interface: ComponentInterface - value: Optional[dict[str, Any]] + value: Optional[Any] file: Optional[str] image: Optional[str] pk: int @@ -1693,6 +1493,7 @@ class HyperlinkedComponentInterfaceValue(BaseModel): @dataclass class HyperlinkedJob(BaseModel): pk: str + url: str api_url: str algorithm_image: str inputs: list[HyperlinkedComponentInterfaceValue] @@ -1702,7 +1503,9 @@ class HyperlinkedJob(BaseModel): started_at: Optional[str] completed_at: Optional[str] hanging_protocol: Optional[HangingProtocol] - view_content: dict[str, Any] + optional_hanging_protocols: list[HangingProtocol] + view_content: Any + algorithm: str @dataclass @@ -1714,174 +1517,67 @@ class ImageFile(BaseModel): @dataclass -class ImagePathologyAnnotation(BaseModel): - id: str - created: Optional[str] - grader: Optional[int] - image: str - pathology: PathologyEnum - - -@dataclass -class ImagePathologyAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: str - pathology: PathologyEnum - - -@dataclass -class ImageQualityAnnotation(BaseModel): - id: str - created: Optional[str] - grader: Optional[int] - image: str - quality: QualityEnum - quality_reason: Optional[Union[QualityReasonEnum, BlankEnum, NullEnum]] - - -@dataclass -class ImageQualityAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: str - quality: QualityEnum - quality_reason: Optional[Union[QualityReasonEnum, BlankEnum, NullEnum]] - - -@dataclass -class LandmarkAnnotationSet(BaseModel): - id: str - grader: Optional[int] - created: Optional[str] - singlelandmarkannotation_set: list[ - SingleLandmarkAnnotationSerializerNoParent - ] - - -@dataclass -class LandmarkAnnotationSetRequest(BaseModel): - grader: Optional[int] - created: Optional[str] - singlelandmarkannotation_set: list[ - SingleLandmarkAnnotationSerializerNoParentRequest - ] - - -@dataclass -class NestedPolygonAnnotationSet(BaseModel): - id: str - image: str - grader: Optional[int] - created: Optional[str] - name: str - singlepolygonannotation_set: list[ - SinglePolygonAnnotationSerializerNoParent - ] - - -@dataclass -class NestedPolygonAnnotationSetRequest(BaseModel): - image: str - grader: Optional[int] - created: Optional[str] - name: str - singlepolygonannotation_set: list[ - SinglePolygonAnnotationSerializerNoParentRequest - ] +class PaginatedComponentInterfaceList(BaseModel): + count: int + next: Optional[str] + previous: Optional[str] + results: list[ComponentInterface] @dataclass -class PaginatedComponentInterfaceList(BaseModel): - count: Optional[int] +class PaginatedHyperlinkedJobList(BaseModel): + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[ComponentInterface]] + results: list[HyperlinkedJob] @dataclass -class PaginatedHyperlinkedJobList(BaseModel): - count: Optional[int] +class PaginatedPublicChallengeList(BaseModel): + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[HyperlinkedJob]] + results: list[PublicChallenge] @dataclass class PaginatedRawImageUploadSessionList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[RawImageUploadSession]] + results: list[RawImageUploadSession] @dataclass class PaginatedSessionList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Session]] + results: list[Session] @dataclass class PaginatedUserUploadList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[UserUpload]] + results: list[UserUpload] @dataclass class PaginatedWorkstationConfigList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[WorkstationConfig]] + results: list[WorkstationConfig] @dataclass class PaginatedWorkstationList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Workstation]] - - -@dataclass -class PatchedImagePathologyAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: Optional[str] - pathology: Optional[PathologyEnum] - - -@dataclass -class PatchedImageQualityAnnotationRequest(BaseModel): - created: Optional[str] - grader: Optional[int] - image: Optional[str] - quality: Optional[QualityEnum] - quality_reason: Optional[Union[QualityReasonEnum, BlankEnum, NullEnum]] - - -@dataclass -class PatchedLandmarkAnnotationSetRequest(BaseModel): - grader: Optional[int] - created: Optional[str] - singlelandmarkannotation_set: Optional[ - list[SingleLandmarkAnnotationSerializerNoParentRequest] - ] - - -@dataclass -class PatchedNestedPolygonAnnotationSetRequest(BaseModel): - image: Optional[str] - grader: Optional[int] - created: Optional[str] - name: Optional[str] - singlepolygonannotation_set: Optional[ - list[SinglePolygonAnnotationSerializerNoParentRequest] - ] + results: list[Workstation] @dataclass @@ -1891,18 +1587,24 @@ class Question(BaseModel): form_direction: str help_text: Optional[str] image_port: str + default_annotation_color: Optional[str] pk: str question_text: str reader_study: str required: Optional[bool] options: list[CategoricalOption] interface: Optional[ComponentInterface] - overlay_segments: Optional[dict[str, Any]] + overlay_segments: Optional[Any] look_up_table: Optional[LookUpTable] widget: str answer_min_value: Optional[int] answer_max_value: Optional[int] answer_step_size: Optional[Decimal] + answer_min_length: Optional[int] + answer_max_length: Optional[int] + answer_match_pattern: Optional[str] + empty_answer_confirmation: Optional[bool] + empty_answer_confirmation_label: Optional[str] @dataclass @@ -1917,6 +1619,7 @@ class ReaderStudy(BaseModel): questions: list[Question] title: str is_educational: Optional[bool] + instant_verification: Optional[bool] has_ground_truth: bool allow_answer_modification: Optional[bool] allow_case_navigation: Optional[bool] @@ -1924,42 +1627,6 @@ class ReaderStudy(BaseModel): roll_over_answers_for_n_cases: Optional[int] -@dataclass -class RetinaImage(BaseModel): - pk: str - name: str - files: list[ImageFile] - width: int - height: int - depth: Optional[int] - color_space: ColorSpaceEnum - modality: Optional[ImagingModality] - eye_choice: Optional[EyeChoiceEnum] - stereoscopic_choice: Optional[ - Union[StereoscopicChoiceEnum, BlankEnum, NullEnum] - ] - field_of_view: Optional[Union[FieldOfViewEnum, BlankEnum, NullEnum]] - shape_without_color: list[int] - shape: list[int] - voxel_width_mm: Optional[float] - voxel_height_mm: Optional[float] - voxel_depth_mm: Optional[float] - api_url: str - patient_id: Optional[str] - patient_name: Optional[str] - patient_birth_date: Optional[str] - patient_age: Optional[str] - patient_sex: Optional[Union[PatientSexEnum, BlankEnum]] - study_date: Optional[str] - study_instance_uid: Optional[str] - series_instance_uid: Optional[str] - study_description: Optional[str] - series_description: Optional[str] - window_center: Optional[float] - window_width: Optional[float] - landmark_annotations: list[str] - - @dataclass class Submission(BaseModel): pk: str @@ -1967,7 +1634,7 @@ class Submission(BaseModel): created: str creator: User comment: Optional[str] - predictions_file: str + predictions_file: Optional[str] supplementary_file: Optional[str] supplementary_url: Optional[str] algorithm_image: str @@ -1998,7 +1665,9 @@ class ArchiveItem(BaseModel): archive: str values: list[HyperlinkedComponentInterfaceValue] hanging_protocol: Optional[HangingProtocol] - view_content: dict[str, Any] + optional_hanging_protocols: list[HangingProtocol] + view_content: Any + title: str = "" @dataclass @@ -2009,9 +1678,11 @@ class DisplaySet(BaseModel): order: Optional[int] api_url: str hanging_protocol: Optional[HangingProtocol] - view_content: dict[str, Any] + optional_hanging_protocols: list[HangingProtocol] + view_content: Any description: str index: Optional[int] + title: str = "" @dataclass @@ -2024,7 +1695,7 @@ class Evaluation(BaseModel): outputs: list[ComponentInterfaceValue] rank: Optional[int] rank_score: Optional[float] - rank_per_metric: Optional[dict[str, Any]] + rank_per_metric: Optional[Any] status: str title: str @@ -2062,67 +1733,60 @@ class HyperlinkedImage(BaseModel): series_description: Optional[str] window_center: Optional[float] window_width: Optional[float] + segments: Optional[Any] @dataclass class PaginatedAlgorithmList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Algorithm]] + results: list[Algorithm] @dataclass class PaginatedArchiveItemList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[ArchiveItem]] + results: list[ArchiveItem] @dataclass class PaginatedDisplaySetList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[DisplaySet]] + results: list[DisplaySet] @dataclass class PaginatedEvaluationList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Evaluation]] + results: list[Evaluation] @dataclass class PaginatedHyperlinkedImageList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[HyperlinkedImage]] + results: list[HyperlinkedImage] @dataclass class PaginatedQuestionList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[Question]] + results: list[Question] @dataclass class PaginatedReaderStudyList(BaseModel): - count: Optional[int] - next: Optional[str] - previous: Optional[str] - results: Optional[list[ReaderStudy]] - - -@dataclass -class PaginatedRetinaImageList(BaseModel): - count: Optional[int] + count: int next: Optional[str] previous: Optional[str] - results: Optional[list[RetinaImage]] + results: list[ReaderStudy] diff --git a/generate_models.py b/generate_models.py index b9f60de..20cb2f4 100644 --- a/generate_models.py +++ b/generate_models.py @@ -3,7 +3,12 @@ from tempfile import TemporaryDirectory import httpx -from datamodel_code_generator import DataModelType, PythonVersion, generate +from datamodel_code_generator import ( + DataModelType, + InputFileType, + PythonVersion, + generate, +) def main() -> int: @@ -29,12 +34,13 @@ def main() -> int: strip_default_none=True, strict_nullable=True, output_model_type=DataModelType.DataclassesDataclass, - target_python_version=PythonVersion.PY_38, + target_python_version=PythonVersion.PY_39, + input_file_type=InputFileType.OpenAPI, ) with open(Path(__file__).parent / "gcapi" / "models.py", "w") as f: text = output.read_text() - to_replace = "from dataclasses import dataclass, field" + to_replace = "from dataclasses import dataclass" if to_replace not in text: raise ValueError( "Could not insert dataclass import for pydantic" diff --git a/pyproject.toml b/pyproject.toml index 1412387..36e5ccc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ classifiers = [ gcapi = "gcapi.cli:main" [tool.poetry.dependencies] -python = ">=3.9,<4.0" +python = "^3.9" httpx = "~0.23.0" Click = ">=6.0" pydantic = "*" @@ -25,8 +25,7 @@ pytest = "*" pytest-randomly = "*" pytest-cov = "*" pyyaml = "*" -datamodel-code-generator = "^0.17.1" -mypy = "^1.1.1" +datamodel-code-generator = "*" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/tests/conftest.py b/tests/conftest.py index 41c847e..b04de20 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -86,7 +86,7 @@ def local_grand_challenge() -> Generator[str, None, None]: "-v", f"{(Path(tmp_path) / 'scripts').absolute()}:/app/scripts:ro", "--rm", - "celery_worker_evaluation", + "celery_worker", "bash", "-c", ( @@ -109,7 +109,6 @@ def local_grand_challenge() -> Generator[str, None, None]: "-d", "http", "celery_worker", - "celery_worker_evaluation", ], cwd=tmp_path, stderr=STDOUT, @@ -177,12 +176,11 @@ def rewrite_docker_compose(content: bytes) -> bytes: "command" ] = "gunicorn -b 0.0.0.0 -k uvicorn.workers.UvicornWorker config.asgi:application" - for service in ["celery_worker", "celery_worker_evaluation"]: - # Strip watchfiles command from celery - # as this is not included in the base container - command = spec["services"][service]["command"] - command = command.replace('watchfiles --filter python "', "") - command = command.replace('" /app', "") - spec["services"][service]["command"] = command + # Strip watchfiles command from celery + # as this is not included in the base container + command = spec["services"]["celery_worker"]["command"] + command = command.replace('watchfiles --filter python "', "") + command = command.replace('" /app', "") + spec["services"]["celery_worker"]["command"] = command return yaml.safe_dump(spec).encode("utf-8") diff --git a/tests/scripts/create_test_fixtures.py b/tests/scripts/create_test_fixtures.py index f61f9f9..3462db9 100644 --- a/tests/scripts/create_test_fixtures.py +++ b/tests/scripts/create_test_fixtures.py @@ -191,7 +191,10 @@ def _create_demo_challenge(users): submission.save() e = Evaluation.objects.create( - submission=submission, method=method, status=Evaluation.SUCCESS + submission=submission, + method=method, + status=Evaluation.SUCCESS, + time_limit=300, ) def create_result(evaluation, result: dict):