class CurrentMoversBaseSchema(ProcessSchema): uncertain_duration = SchemaNode(Float()) uncertain_time_delay = SchemaNode(Float()) data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class GridCurrentMoverSchema(CurrentMoversBaseSchema): filename = FilenameSchema( missing=drop, save=True, update=False, isdatafile=True, test_equal=False ) topology_file = FilenameSchema( missing=drop, save=True, update=False, isdatafile=True, test_equal=False ) current_scale = SchemaNode( Float(), missing=drop, save=True, update=True ) uncertain_along = SchemaNode( Float(), missing=drop, save=True, update=True ) uncertain_cross = SchemaNode( Float(), missing=drop, save=True, update=True ) extrapolate = SchemaNode( Bool(), missing=drop, save=True, update=True ) time_offset = SchemaNode( Float(), missing=drop, save=True, update=True ) is_data_on_cells = SchemaNode( Bool(), missing=drop, read_only=True ) data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class WindSchema(base_schema.ObjTypeSchema): ''' validate data after deserialize, before it is given back to pyGnome's from_dict to set _state of object ''' name = SchemaNode(String(), test_equal=False) description = SchemaNode(String()) filename = FilenameSchema(isdatafile=True, update=False, test_equal=False) #Thanks to CyTimeseries updated_at = SchemaNode(LocalDateTime()) latitude = SchemaNode(Float()) longitude = SchemaNode(Float()) source_id = SchemaNode(String()) source_type = SchemaNode(String(), validator=OneOf(wind_datasources._attr), default='undefined', missing='undefined') units = SchemaNode(String(), default='m/s') speed_uncertainty_scale = SchemaNode(Float()) timeseries = WindTimeSeriesSchema( test_equal=False ) #Because comparing datetimevalue2d arrays does not play nice extrapolation_is_allowed = SchemaNode(Boolean()) data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class PyCurrentMoverSchema(ObjTypeSchema): current = GeneralGnomeObjectSchema( acceptable_schemas=[VectorVariableSchema, GridCurrent._schema], save=True, update=True, save_reference=True) filename = FilenameSchema(missing=drop, save=True, update=False, isdatafile=True) current_scale = SchemaNode(Float(), missing=drop, save=True, update=True) extrapolation_is_allowed = SchemaNode(Bool(), missing=drop, save=True, update=True) # time_offset = SchemaNode( # Float(), missing=drop, save=True, update=True # ) on = SchemaNode(Bool(), missing=drop, save=True, update=True) active_start = SchemaNode(LocalDateTime(), missing=drop, validator=convertible_to_seconds, save=True, update=True) active_stop = SchemaNode(LocalDateTime(), missing=drop, validator=convertible_to_seconds, save=True, update=True) data_start = SchemaNode(LocalDateTime(), validator=convertible_to_seconds, read_only=True) data_stop = SchemaNode(LocalDateTime(), validator=convertible_to_seconds, read_only=True)
class CurrentCycleMoverSchema(GridCurrentMoverSchema): tide = TideSchema( missing=drop, save=True, update=True, save_reference=True ) data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class RandomMoverSchema(ProcessSchema): diffusion_coef = SchemaNode(Float(), save=True, update=True, missing=drop) uncertain_factor = SchemaNode(Float(), save=True, update=True, missing=drop) data_start = SchemaNode(LocalDateTime(), validator=convertible_to_seconds, read_only=True) data_stop = SchemaNode(LocalDateTime(), validator=convertible_to_seconds, read_only=True)
class ProcessSchema(MappingSchema): ''' base Process schema - attributes common to all movers/weatherers defined at one place ''' on = SchemaNode(Bool(), missing=drop) active_start = SchemaNode(LocalDateTime(), missing=drop, validator=convertible_to_seconds) active_stop = SchemaNode(LocalDateTime(), missing=drop, validator=convertible_to_seconds)
class TideSchema(base_schema.ObjTypeSchema): 'Tide object schema' filename = FilenameSchema( save=True, update=False, isdatafile=True, test_equal=False ) scale_factor = SchemaNode( Float(), missing=drop, save=True, update=True ) extrapolation_is_allowed = SchemaNode(Boolean(), missing=drop, read_only=True) data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class VariableSchemaBase(base_schema.ObjTypeSchema): #filename #data? units = SchemaNode(String()) time = TimeSchema(save_reference=True) grid = GridSchema(save_reference=True) data_file = FilenameSchema(isdatafile=True, test_equal=False, update=False) grid_file = FilenameSchema(isdatafile=True, test_equal=False, update=False) extrapolation_is_allowed = SchemaNode(Boolean()) data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class WindMoverSchema(WindMoversBaseSchema): """ Contains properties required by UpdateWindMover and CreateWindMover """ # 'wind' schema node added dynamically wind = GeneralGnomeObjectSchema(acceptable_schemas=[WindSchema], save=True, update=True, save_reference=True) data_start = SchemaNode(LocalDateTime(), validator=convertible_to_seconds, read_only=True) data_stop = SchemaNode(LocalDateTime(), validator=convertible_to_seconds, read_only=True)
class BaseReleaseSchema(ObjTypeSchema): release_time = SchemaNode( LocalDateTime(), validator=convertible_to_seconds, ) num_released = SchemaNode(Int(), read_only=True, test_equal=False)
class BurnSchema(WeathererSchema): area = SchemaNode(Float(), save=True, update=True) thickness = SchemaNode(Float(), save=True, update=True) area_units = SchemaNode(String(), save=True, update=True) thickness_units = SchemaNode(String(), save=True, update=True) _oilwater_thickness = SchemaNode(Float(), missing=drop, save=True, update=True) _oilwater_thick_burnrate = SchemaNode(Float(), missing=drop, save=True, update=True) _oil_vol_burnrate = SchemaNode(Float(), missing=drop, save=True, update=True) efficiency = SchemaNode(Float(), missing=None, save=True, update=True) wind = GeneralGnomeObjectSchema( acceptable_schemas=[WindSchema, VectorVariableSchema], missing=drop, save=True, update=True, save_reference=True) water = WaterSchema(missing=drop, save=True, update=True, save_reference=True) active_stop = SchemaNode(LocalDateTime(), missing=drop, validator=convertible_to_seconds, save=False, update=True)
class ComponentMoverSchema(ProcessSchema): '''static schema for ComponentMover''' filename1 = SchemaNode( String(), missing=drop, save=True, update=True, isdatafile=True, test_equal=False ) filename2 = SchemaNode( String(), missing=drop, save=True, update=True, isdatafile=True, test_equal=False ) scale_refpoint = WorldPoint( missing=drop, save=True, update=True ) pat1_angle = SchemaNode( Float(), missing=drop, save=True, update=True ) pat1_speed = SchemaNode( Float(), missing=drop, save=True, update=True ) pat1_speed_units = SchemaNode( Int(), missing=drop, save=True, update=True ) pat1_scale_to_value = SchemaNode( Float(), missing=drop, save=True, update=True ) pat2_angle = SchemaNode( Float(), missing=drop, save=True, update=True ) pat2_speed = SchemaNode( Float(), missing=drop, save=True, update=True ) pat2_speed_units = SchemaNode( Int(), missing=drop, save=True, update=True ) pat2_scale_to_value = SchemaNode( Float(), missing=drop, save=True, update=True ) scale_by = SchemaNode( Int(), missing=drop, save=True, update=True ) wind = WindSchema( missing=drop, save=True, update=True, save_reference=True ) data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class CurrentCycleMoverSchema(CurrentMoversBaseSchema): filename = FilenameSchema(missing=drop, save=True, isdatafile=True, test_equal=False, update=False) topology_file = FilenameSchema(missing=drop, save=True, isdatafile=True, test_equal=False, update=False) current_scale = SchemaNode(Float(), default=1, missing=drop, save=True, update=True) uncertain_duration = SchemaNode(Float(), default=24, missing=drop, save=True, update=True) uncertain_time_delay = SchemaNode(Float(), default=0, missing=drop, save=True, update=True) uncertain_along = SchemaNode(Float(), default=.5, missing=drop, save=True, update=True) uncertain_cross = SchemaNode(Float(), default=.25, missing=drop, save=True, update=True) tide = TideSchema(missing=drop, save=True, update=True, save_reference=True) data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class CatsMoverSchema(CurrentMoversBaseSchema): '''static schema for CatsMover''' filename = FilenameSchema(save=True, isdatafile=True, test_equal=False, update=False) scale = SchemaNode(Bool(), missing=drop, save=True, update=True) scale_refpoint = WorldPoint(missing=drop, save=True, update=True) scale_value = SchemaNode(Float(), missing=drop, save=True, update=True) # the following six could be shared with grid_current # in a currents base class down_cur_uncertain = SchemaNode(Float(), missing=drop, save=True, update=True) up_cur_uncertain = SchemaNode(Float(), missing=drop, save=True, update=True) right_cur_uncertain = SchemaNode(Float(), missing=drop, save=True, update=True) left_cur_uncertain = SchemaNode(Float(), missing=drop, save=True, update=True) uncertain_eddy_diffusion = SchemaNode(Float(), missing=drop, save=True, update=True) uncertain_eddy_v0 = SchemaNode(Float(), missing=drop, save=True, update=True) tide = TideSchema(missing=drop, save=True, update=True, save_reference=True) data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class WindTupleSchema(DefaultTupleSchema): ''' Schema for each tuple in WindTimeSeries list ''' datetime = SchemaNode(LocalDateTime(default_tzinfo=None), default=base_schema.now, validator=validators.convertible_to_seconds) mag_dir = MagnitudeDirectionTuple()
class TimeSeriesTuple(DefaultTupleSchema): 'Tide object schema' ''' Schema for each tuple in running average Time Series ''' datetime = SchemaNode(LocalDateTime(default_tzinfo=None), default=base_schema.now, validator=validators.convertible_to_seconds) uv = UVTuple()
class ContinuousReleaseSchema(ReleaseSchema): initial_elements = SchemaNode(Int(), missing=drop) start_position = WorldPoint() end_position = WorldPoint(missing=drop) _next_release_pos = WorldPointNumpy(missing=drop) end_release_time = SchemaNode(LocalDateTime(), missing=drop, validator=convertible_to_seconds) num_per_timestep = SchemaNode(Int(), missing=drop) description = 'ContinuousRelease object schema'
class PyCurrentMoverSchema(ObjTypeSchema): current = GeneralGnomeObjectSchema( save=True, update=True, save_reference=True, acceptable_schemas=[VectorVariableSchema, GridCurrent._schema]) filename = FilenameSchema(save=True, update=False, isdatafile=True, missing=drop) scale_value = SchemaNode(Float(), save=True, update=True, missing=drop) on = SchemaNode(Bool(), missing=drop, save=True, update=True) active_range = TimeRangeSchema() data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class BeachingTupleSchema(DefaultTupleSchema): ''' Schema for each tuple in TimeSeries list ''' datetime = SchemaNode(LocalDateTime(default_tzinfo=None), default=base_schema.now, validator=validators.convertible_to_seconds) amount = SchemaNode(Float(), default=0, validator=Range(min=0, min_err='amount must be ' 'greater than or equal to 0'))
class BaseReleaseSchema(ObjType): 'Base Class for Release Schemas' release_time = SchemaNode(LocalDateTime(), validator=convertible_to_seconds) name = 'release' start_time_invalid = SchemaNode(Bool(), missing=drop) def __init__(self, json_='webapi', **kwargs): if json_ == 'save': # used to create a new Release object if model is persisted mid-run self.add(SchemaNode(Int(), name='num_released')) super(BaseReleaseSchema, self).__init__(**kwargs)
class ContinuousReleaseSchema(BaseReleaseSchema): initial_elements = SchemaNode(Int(), missing=drop, save=True, update=True) start_position = WorldPoint(save=True, update=True) end_position = WorldPoint(missing=drop, save=True, update=True) _next_release_pos = WorldPointNumpy(missing=drop, save=True, read_only=True) end_release_time = SchemaNode(LocalDateTime(), missing=drop, validator=convertible_to_seconds, save=True, update=True) num_elements = SchemaNode(Int()) num_per_timestep = SchemaNode(Int(), missing=drop, save=True, update=True) description = 'ContinuousRelease object schema'
class PyWindMoverSchema(ObjTypeSchema): wind = GeneralGnomeObjectSchema( save=True, update=True, save_reference=True, acceptable_schemas=[VectorVariableSchema, GridWind._schema]) filename = FilenameSchema(save=True, update=False, isdatafile=True, missing=drop) wind_scale = SchemaNode(Float(), save=True, update=True, missing=drop) extrapolation_is_allowed = SchemaNode(Bool(), save=True, update=True, missing=drop) time_offset = SchemaNode(Float(), save=True, update=True, missing=drop) on = SchemaNode(Bool(), save=True, update=True, missing=drop) active_range = TimeRangeSchema() data_start = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds) data_stop = SchemaNode(LocalDateTime(), read_only=True, validator=convertible_to_seconds)
class PointLineReleaseSchema(ReleaseSchema): ''' Contains properties required for persistence ''' # start_position + end_position are only persisted as WorldPoint() instead # of WorldPointNumpy because setting the properties converts them to Numpy # _next_release_pos is set when loading from 'save' file and this does have # a setter that automatically converts it to Numpy array so use # WorldPointNumpy schema for it. start_position = WorldPoint() end_position = WorldPoint(missing=drop) _next_release_pos = WorldPointNumpy(missing=drop) end_release_time = SchemaNode(LocalDateTime(), missing=drop, validator=convertible_to_seconds) num_per_timestep = SchemaNode(Int(), missing=drop) description = 'PointLineRelease object schema'
class ModelSchema(MappingSchema): id = SchemaNode(String(), missing=drop) start_time = SchemaNode(LocalDateTime(), default=now, validator=validators.convertible_to_seconds) duration_days = SchemaNode(Int(), default=1, validator=Range(min=0)) duration_hours = SchemaNode(Int(), default=0, validator=Range(min=0)) uncertain = SchemaNode(Bool(), default=False) time_step = SchemaNode(Float(), default=0.1) surface_release_spills = PointSourceReleasesSchema(default=[], missing=drop) wind_movers = WindMoversSchema(default=[], missing=drop) random_movers = RandomMoversSchema(default=[], missing=drop) cats_movers = CatsMoversSchema(default=[], missing=drop) grid_current_movers = GridCurrentMoversSchema(default=[], missing=drop) winds = WindsSchema(default=[], missing=drop) map = MapSchema(missing=drop)
class WindSchema(base_schema.ObjType): ''' validate data after deserialize, before it is given back to pyGnome's from_dict to set _state of object ''' description = SchemaNode(String(), missing=drop) filename = SchemaNode(String(), missing=drop) updated_at = SchemaNode(LocalDateTime(), missing=drop) latitude = SchemaNode(Float(), missing=drop) longitude = SchemaNode(Float(), missing=drop) source_id = SchemaNode(String(), missing=drop) source_type = SchemaNode(String(), validator=OneOf( basic_types.wind_datasource._attr), default='undefined', missing='undefined') units = SchemaNode(String(), default='m/s') speed_uncertainty_scale = SchemaNode(Float(), missing=drop) timeseries = WindTimeSeriesSchema(missing=drop) name = 'wind'
class TimeRangeSchema(TupleSchema): start = SchemaNode(LocalDateTime(), validator=convertible_to_seconds) stop = SchemaNode(LocalDateTime(), validator=convertible_to_seconds)
class BaseReleaseSchema(ObjTypeSchema): release_time = SchemaNode( LocalDateTime(), validator=convertible_to_seconds, )