diff --git a/neofarm/lib.py b/neofarm/lib.py index bf6e08d..999d683 100644 --- a/neofarm/lib.py +++ b/neofarm/lib.py @@ -2,10 +2,8 @@ import requests from oauthlib.oauth2 import BackendApplicationClient from requests_oauthlib import OAuth2Session, OAuth2 import jsonapi_requests -from orm.log import * -from orm.asset import * -from orm.quantity import * -from orm.taxonomy import * +from orm.my_meta import MyMeta + # constants: root_url = 'https://farmos.wagframe.duckdns.org/' @@ -14,9 +12,6 @@ token_url = root_url + 'oauth/token/' client_id = 'neofarm' client_secret = 'Wk&%g#d8lYFUDrU7k7k%5ZS$V@hHauBq' -api_path_separator = '/' -api_type_spatrator = '--' - def init_api(): client = BackendApplicationClient(client_id=client_id) oauth_session = OAuth2Session(client=client) @@ -36,7 +31,9 @@ def init_api(): return api api = init_api() -Log.Meta.set_api(api) -Asset.Meta.set_api(api) -Quantity.Meta.set_api(api) -Taxonomy.Meta.set_api(api) \ No newline at end of file +MyMeta.set_api(api) +# these have to be defined after MyMeta.api is set for the correct value to be inherited +from orm.log import * +from orm.asset import * +from orm.quantity import * +from orm.taxonomy import * \ No newline at end of file diff --git a/neofarm/orm/asset.py b/neofarm/orm/asset.py index 56fcdea..0af0281 100644 --- a/neofarm/orm/asset.py +++ b/neofarm/orm/asset.py @@ -1,21 +1,20 @@ import jsonapi_requests +from orm.my_meta import MyMeta class Asset(jsonapi_requests.orm.ApiModel): - class Meta: + class Meta(MyMeta): type = 'asset' - api = api - @classmethod - def get_type_and_path(cls, name): - return (f"{cls.type}{api_type_spatrator}{name}", f"{cls.path}{api_path_separator}{name}") - + name = jsonapi_requests.orm.AttributeField('name') timestamp = jsonapi_requests.orm.AttributeField('timestamp') + location = jsonapi_requests.orm.RelationField('location') class Land(Asset): class Meta(Asset.Meta): name = 'land' type, path = Asset.Meta.get_type_and_path(name) - geometry = jsonapi_requests.orm.AttributeField('intrinsic_geometry') + json_geometry = jsonapi_requests.orm.AttributeField('intrinsic_geometry') + class Plant(Asset): class Meta(Asset.Meta): name = 'plant' diff --git a/neofarm/orm/log.py b/neofarm/orm/log.py index c817d2f..c4f31e0 100644 --- a/neofarm/orm/log.py +++ b/neofarm/orm/log.py @@ -1,18 +1,13 @@ import jsonapi_requests +from orm.my_meta import MyMeta class Log(jsonapi_requests.orm.ApiModel): - class Meta: + class Meta(MyMeta): type = 'log' - @classmethod - def get_type_and_path(cls, name): - return (f"{cls.type}{api_type_spatrator}{name}", f"{cls.path}{api_path_separator}{name}") - @classmethod - def set_api(cls, api): - cls.api = api name = jsonapi_requests.orm.AttributeField('name') timestamp = jsonapi_requests.orm.AttributeField('timestamp') - isMovement = jsonapi_requests.orm.AttributeField('isMovement') + isMovement = jsonapi_requests.orm.AttributeField('is_movement') assets = jsonapi_requests.orm.RelationField('asset') location = jsonapi_requests.orm.RelationField('location') equipment = jsonapi_requests.orm.RelationField('equipment') diff --git a/neofarm/orm/my_meta.py b/neofarm/orm/my_meta.py new file mode 100644 index 0000000..6183ce7 --- /dev/null +++ b/neofarm/orm/my_meta.py @@ -0,0 +1,10 @@ +api_path_separator = '/' +api_type_separator = '--' + +class MyMeta: + @classmethod + def get_type_and_path(cls, name): + return (f"{cls.type}{api_type_separator}{name}", f"{cls.type}{api_path_separator}{name}") + @classmethod + def set_api(cls, api): + cls.api = api \ No newline at end of file diff --git a/neofarm/orm/quantity.py b/neofarm/orm/quantity.py index 065ec37..74b4277 100644 --- a/neofarm/orm/quantity.py +++ b/neofarm/orm/quantity.py @@ -1,31 +1,39 @@ import jsonapi_requests +from orm.my_meta import MyMeta class Quantity(jsonapi_requests.orm.ApiModel): - class Meta: + class Meta(MyMeta): type = 'quantity' - api = api - @classmethod - def get_type_and_path(cls, name): - return (f"{cls.type}{api_type_spatrator}{name}", f"{cls.path}{api_path_separator}{name}") - + measure = jsonapi_requests.orm.AttributeField('measure') - measure = jsonapi_requests.orm.AttributeField('value.decimal') - units = jsonapi_requests.orm.RelationFieldField('units') + json_value = jsonapi_requests.orm.AttributeField('value') + units = jsonapi_requests.orm.RelationField('units') inventory_adjustment = jsonapi_requests.orm.AttributeField('inventory_adjustment') - inventory_asset = jsonapi_requests.orm.RelationFieldField('inventory_asset') + inventory_asset = jsonapi_requests.orm.RelationField('inventory_asset') + + @property + def value(self): + return self.json_value['decimal'] class Standard(Quantity): class Meta(Quantity.Meta): name = 'standard' - type, path = Asset.Meta.get_type_and_path(name) + type, path = Quantity.Meta.get_type_and_path(name) class Price(Quantity): class Meta(Quantity.Meta): name = 'price' - type, path = Asset.Meta.get_type_and_path(name) - unit_price = jsonapi_requests.orm.AttributeField('unit_price.decimal') - total_price = jsonapi_requests.orm.AttributeField('total_price.decimal') + type, path = Quantity.Meta.get_type_and_path(name) + json_unit_price = jsonapi_requests.orm.AttributeField('unit_price.decimal') + json_total_price = jsonapi_requests.orm.AttributeField('total_price.decimal') + + @property + def unit_price(self): + return self.json_unit_price['decimal'] + @property + def total_price(self): + return self.json_total_price['decimal'] + class Material(Quantity): class Meta(Quantity.Meta): name = 'material' - type, path = Asset.Meta.get_type_and_path(name) - unit_price = jsonapi_requests.orm.RelationField('material_type') \ No newline at end of file + type, path = Quantity.Meta.get_type_and_path(name) \ No newline at end of file diff --git a/neofarm/orm/taxonomy.py b/neofarm/orm/taxonomy.py index 8f87cb3..0f650f7 100644 --- a/neofarm/orm/taxonomy.py +++ b/neofarm/orm/taxonomy.py @@ -1,38 +1,37 @@ import jsonapi_requests +from orm.my_meta import MyMeta class Taxonomy(jsonapi_requests.orm.ApiModel): - class Meta: + class Meta(MyMeta): type = 'taxonomy_term' - @classmethod - def get_type_and_path(cls, name): - return (f"{cls.type}{api_type_spatrator}{name}", f"{cls.path}{api_path_separator}{name}") - @classmethod - def set_api(cls, api): - cls.api = api name = jsonapi_requests.orm.AttributeField('name') class Crop(Taxonomy): class Meta(Taxonomy.Meta): name = 'crop_family' - type, path = Log.Meta.get_type_and_path(name) + type, path = Taxonomy.Meta.get_type_and_path(name) class LogCategory(Taxonomy): class Meta(Taxonomy.Meta): name = 'log_category' - type, path = Log.Meta.get_type_and_path(name) + type, path = Taxonomy.Meta.get_type_and_path(name) class MaterialType(Taxonomy): class Meta(Taxonomy.Meta): name = 'material_type' - type, path = Log.Meta.get_type_and_path(name) + type, path = Taxonomy.Meta.get_type_and_path(name) class PlantType(Taxonomy): class Meta(Taxonomy.Meta): name = 'plant_type' - type, path = Log.Meta.get_type_and_path(name) + type, path = Taxonomy.Meta.get_type_and_path(name) class ProductType(Taxonomy): class Meta(Taxonomy.Meta): name = 'product_type' - type, path = Log.Meta.get_type_and_path(name) + type, path = Taxonomy.Meta.get_type_and_path(name) class Season(Taxonomy): class Meta(Taxonomy.Meta): name = 'season' - type, path = Log.Meta.get_type_and_path(name) \ No newline at end of file + type, path = Taxonomy.Meta.get_type_and_path(name) +class Unit(Taxonomy): + class Meta(Taxonomy.Meta): + name = 'unit' + type, path = Taxonomy.Meta.get_type_and_path(name) \ No newline at end of file diff --git a/neofarm/test.py b/neofarm/test.py index 14d8d8d..99bdc9d 100644 --- a/neofarm/test.py +++ b/neofarm/test.py @@ -1,6 +1,25 @@ import lib as neo if __name__ == "__main__": - result = neo.getHarvests() - for i in result: - print(f"name: {i.name} plant: {i.getPlant().name}") \ No newline at end of file + seedings = neo.Seeding.get_list() + for seeding in seedings: + plant = seeding.getPlant() + equipment = seeding.equipment[0] + quantity = seeding.quantities[0] + print(f"name: {seeding.name}") + print(f"timestamp: {seeding.timestamp}") + print(f"plant name: {plant.name}") + print(f"plant crop: {plant.crop[0].name}") + print(f"plant loc: {plant.location.name}") + print(f"equipment: {equipment.name}") + print(f"isMovement: {seeding.isMovement}") + print(f"Q1 type: {quantity.type}") + print(f"Q1 measure: {quantity.measure}") + print(f"Q1 value: {quantity.value}") + print(f"Q1 units: {quantity.units.name}") + print(f"Q1 inv adj: {quantity.inventory_adjustment}") + print(f"Q1 inv ass: {quantity.inventory_asset.name}") + print(f"Q2 type: {quantity.type}") + print(f"Q2 measure: {quantity.measure}") + print(f"Q2 value: {quantity.value}") + print(f"Q2 units: {quantity.units.name}") \ No newline at end of file