예제 #1
0
class SectionSerializer(PbNestedSerializer):
    id = jsonschema.Field(schema_type=str, display_none=True)
    duration = jsonschema.Field(
        schema_type=int,
        display_none=True,
        description='Duration of the section (seconds)')
    co2_emission = AmountSerializer(display_none=True)
    transfer_type = EnumField(attr='transfer_type', pb_type=TransferType)
    departure_date_time = DateTimeField(
        attr='begin_date_time',
        description='Departure date and time of the section')
    arrival_date_time = DateTimeField(
        attr='end_date_time',
        description='Arrival date and time of the section')
    base_departure_date_time = DateTimeField(
        attr='base_begin_date_time',
        description='Base-schedule departure date and time of the section')
    base_arrival_date_time = DateTimeField(
        attr='base_end_date_time',
        description='Base-schedule arrival date and time of the section')
    data_freshness = EnumField(attr="realtime_level",
                               pb_type=RTLevel,
                               display_none=False)
    to = jsonschema.MethodField(schema_type=PlaceSerializer(),
                                attr='destination')

    def get_to(self, obj):
        if obj.HasField(str('type')):
            enum = obj.DESCRIPTOR.fields_by_name[
                'type'].enum_type.values_by_number
            ret_value = enum[getattr(obj, 'type')].name
            if ret_value == 'WAITING':
                return None
        return PlaceSerializer(obj.destination).data

    _from = jsonschema.MethodField(schema_type=PlaceSerializer(),
                                   attr='origin',
                                   label='from')

    def get__from(self, obj):
        if obj.HasField(str('type')):
            enum = obj.DESCRIPTOR.fields_by_name[
                'type'].enum_type.values_by_number
            ret_value = enum[getattr(obj, 'type')].name
            if ret_value == 'WAITING':
                return None
        return PlaceSerializer(obj.origin).data

    additional_informations = EnumListField(
        attr='additional_informations',
        pb_type=SectionAdditionalInformationType)
    geojson = SectionGeoJsonField(
        display_none=False, description='GeoJSON of the shape of the section')
    mode = NestedEnumField(attr='street_network.mode',
                           pb_type=StreetNetworkMode)
    type = SectionTypeEnum(attr='type', pb_type=SectionType)

    display_informations = VJDisplayInformationSerializer(
        attr='pt_display_informations', display_none=False)

    links = jsonschema.MethodField(display_none=True,
                                   schema_type=LinkSchema(many=True))

    def get_links(self, obj):
        response = []
        if obj.HasField(str("uris")):
            for type_, value in obj.uris.ListFields():
                response.append({"type": type_.name, "id": value})
        if obj.HasField(str('pt_display_informations')):
            response.extend(base.make_notes(obj.pt_display_informations.notes))
        if obj.HasField(str('ridesharing_information')):
            response.extend([{
                "type": "ridesharing_ad",
                "rel": l.key,
                "href": l.href,
                "internal": False
            } for l in obj.ridesharing_information.links])

        return response

    stop_date_times = StopDateTimeSerializer(many=True)
    path = PathSerializer(attr="street_network.path_items",
                          many=True,
                          display_none=False)
    ridesharing_informations = RidesharingInformationSerializer(
        attr='ridesharing_information', display_none=False)
    ridesharing_journeys = jsonschema.MethodField(
        schema_type=lambda: JourneySerializer(display_none=False, many=True))

    def get_ridesharing_journeys(self, obj):
        if not hasattr(obj,
                       'ridesharing_journeys') or not obj.ridesharing_journeys:
            return None
        return JourneySerializer(obj.ridesharing_journeys,
                                 display_none=False,
                                 many=True).data

    cycle_lane_length = PbIntField(display_none=False)
예제 #2
0
class SeatsDescriptionSerializer(PbNestedSerializer):
    total = PbIntField(display_none=False)
    available = PbIntField(display_none=False)