import jsonapi_requests import neofarm.orm.log as Log from . my_meta import MyMeta class Asset(jsonapi_requests.orm.ApiModel): class Meta(MyMeta): type = 'asset' name = jsonapi_requests.orm.AttributeField('name') timestamp = jsonapi_requests.orm.AttributeField('timestamp') location = jsonapi_requests.orm.RelationField('location') def get_logs_of_type(self, type): if not issubclass(type, Log.Log): raise ValueError("type specified is not a type of log use for example: get_logs_of_type(Log.Harvest)") logs = type.get_list() related = [] for log in logs: for asset in log.assets: if asset.id == self.id: related.append(log) break; return related class Land(Asset): class Meta(Asset.Meta): name = 'land' type, path = Asset.Meta.get_type_and_path(name) json_geometry = jsonapi_requests.orm.AttributeField('intrinsic_geometry') class Plant(Asset): class Meta(Asset.Meta): name = 'plant' type, path = Asset.Meta.get_type_and_path(name) crop = jsonapi_requests.orm.RelationField('plant_type') season = jsonapi_requests.orm.RelationField('season') class Equipment(Asset): class Meta(Asset.Meta): name = 'equipment' type, path = Asset.Meta.get_type_and_path(name) class Material(Asset): class Meta(Asset.Meta): name = 'material' type, path = Asset.Meta.get_type_and_path(name) crop = jsonapi_requests.orm.RelationField('material_type') class Seed(Asset): class Meta(Asset.Meta): name = 'seed' type, path = Asset.Meta.get_type_and_path(name) crop = jsonapi_requests.orm.RelationField('plant_type') season = jsonapi_requests.orm.RelationField('season') class Product(Asset): class Meta(Asset.Meta): name = 'product' type, path = Asset.Meta.get_type_and_path(name) # do not rename to type as that will end in infinite recursion product_type = jsonapi_requests.orm.RelationField('product_type')