tested to work for most entities NEXT: add logs property to asset
This commit is contained in:
@@ -2,10 +2,8 @@ import requests
|
|||||||
from oauthlib.oauth2 import BackendApplicationClient
|
from oauthlib.oauth2 import BackendApplicationClient
|
||||||
from requests_oauthlib import OAuth2Session, OAuth2
|
from requests_oauthlib import OAuth2Session, OAuth2
|
||||||
import jsonapi_requests
|
import jsonapi_requests
|
||||||
from orm.log import *
|
from orm.my_meta import MyMeta
|
||||||
from orm.asset import *
|
|
||||||
from orm.quantity import *
|
|
||||||
from orm.taxonomy import *
|
|
||||||
|
|
||||||
# constants:
|
# constants:
|
||||||
root_url = 'https://farmos.wagframe.duckdns.org/'
|
root_url = 'https://farmos.wagframe.duckdns.org/'
|
||||||
@@ -14,9 +12,6 @@ token_url = root_url + 'oauth/token/'
|
|||||||
client_id = 'neofarm'
|
client_id = 'neofarm'
|
||||||
client_secret = 'Wk&%g#d8lYFUDrU7k7k%5ZS$V@hHauBq'
|
client_secret = 'Wk&%g#d8lYFUDrU7k7k%5ZS$V@hHauBq'
|
||||||
|
|
||||||
api_path_separator = '/'
|
|
||||||
api_type_spatrator = '--'
|
|
||||||
|
|
||||||
def init_api():
|
def init_api():
|
||||||
client = BackendApplicationClient(client_id=client_id)
|
client = BackendApplicationClient(client_id=client_id)
|
||||||
oauth_session = OAuth2Session(client=client)
|
oauth_session = OAuth2Session(client=client)
|
||||||
@@ -36,7 +31,9 @@ def init_api():
|
|||||||
return api
|
return api
|
||||||
|
|
||||||
api = init_api()
|
api = init_api()
|
||||||
Log.Meta.set_api(api)
|
MyMeta.set_api(api)
|
||||||
Asset.Meta.set_api(api)
|
# these have to be defined after MyMeta.api is set for the correct value to be inherited
|
||||||
Quantity.Meta.set_api(api)
|
from orm.log import *
|
||||||
Taxonomy.Meta.set_api(api)
|
from orm.asset import *
|
||||||
|
from orm.quantity import *
|
||||||
|
from orm.taxonomy import *
|
||||||
@@ -1,21 +1,20 @@
|
|||||||
import jsonapi_requests
|
import jsonapi_requests
|
||||||
|
from orm.my_meta import MyMeta
|
||||||
|
|
||||||
class Asset(jsonapi_requests.orm.ApiModel):
|
class Asset(jsonapi_requests.orm.ApiModel):
|
||||||
class Meta:
|
class Meta(MyMeta):
|
||||||
type = 'asset'
|
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')
|
name = jsonapi_requests.orm.AttributeField('name')
|
||||||
timestamp = jsonapi_requests.orm.AttributeField('timestamp')
|
timestamp = jsonapi_requests.orm.AttributeField('timestamp')
|
||||||
|
location = jsonapi_requests.orm.RelationField('location')
|
||||||
|
|
||||||
class Land(Asset):
|
class Land(Asset):
|
||||||
class Meta(Asset.Meta):
|
class Meta(Asset.Meta):
|
||||||
name = 'land'
|
name = 'land'
|
||||||
type, path = Asset.Meta.get_type_and_path(name)
|
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 Plant(Asset):
|
||||||
class Meta(Asset.Meta):
|
class Meta(Asset.Meta):
|
||||||
name = 'plant'
|
name = 'plant'
|
||||||
|
|||||||
@@ -1,18 +1,13 @@
|
|||||||
import jsonapi_requests
|
import jsonapi_requests
|
||||||
|
from orm.my_meta import MyMeta
|
||||||
|
|
||||||
class Log(jsonapi_requests.orm.ApiModel):
|
class Log(jsonapi_requests.orm.ApiModel):
|
||||||
class Meta:
|
class Meta(MyMeta):
|
||||||
type = 'log'
|
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')
|
name = jsonapi_requests.orm.AttributeField('name')
|
||||||
timestamp = jsonapi_requests.orm.AttributeField('timestamp')
|
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')
|
assets = jsonapi_requests.orm.RelationField('asset')
|
||||||
location = jsonapi_requests.orm.RelationField('location')
|
location = jsonapi_requests.orm.RelationField('location')
|
||||||
equipment = jsonapi_requests.orm.RelationField('equipment')
|
equipment = jsonapi_requests.orm.RelationField('equipment')
|
||||||
|
|||||||
10
neofarm/orm/my_meta.py
Normal file
10
neofarm/orm/my_meta.py
Normal file
@@ -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
|
||||||
@@ -1,31 +1,39 @@
|
|||||||
import jsonapi_requests
|
import jsonapi_requests
|
||||||
|
from orm.my_meta import MyMeta
|
||||||
|
|
||||||
class Quantity(jsonapi_requests.orm.ApiModel):
|
class Quantity(jsonapi_requests.orm.ApiModel):
|
||||||
class Meta:
|
class Meta(MyMeta):
|
||||||
type = 'quantity'
|
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('measure')
|
||||||
measure = jsonapi_requests.orm.AttributeField('value.decimal')
|
json_value = jsonapi_requests.orm.AttributeField('value')
|
||||||
units = jsonapi_requests.orm.RelationFieldField('units')
|
units = jsonapi_requests.orm.RelationField('units')
|
||||||
inventory_adjustment = jsonapi_requests.orm.AttributeField('inventory_adjustment')
|
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 Standard(Quantity):
|
||||||
class Meta(Quantity.Meta):
|
class Meta(Quantity.Meta):
|
||||||
name = 'standard'
|
name = 'standard'
|
||||||
type, path = Asset.Meta.get_type_and_path(name)
|
type, path = Quantity.Meta.get_type_and_path(name)
|
||||||
class Price(Quantity):
|
class Price(Quantity):
|
||||||
class Meta(Quantity.Meta):
|
class Meta(Quantity.Meta):
|
||||||
name = 'price'
|
name = 'price'
|
||||||
type, path = Asset.Meta.get_type_and_path(name)
|
type, path = Quantity.Meta.get_type_and_path(name)
|
||||||
unit_price = jsonapi_requests.orm.AttributeField('unit_price.decimal')
|
json_unit_price = jsonapi_requests.orm.AttributeField('unit_price.decimal')
|
||||||
total_price = jsonapi_requests.orm.AttributeField('total_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 Material(Quantity):
|
||||||
class Meta(Quantity.Meta):
|
class Meta(Quantity.Meta):
|
||||||
name = 'material'
|
name = 'material'
|
||||||
type, path = Asset.Meta.get_type_and_path(name)
|
type, path = Quantity.Meta.get_type_and_path(name)
|
||||||
unit_price = jsonapi_requests.orm.RelationField('material_type')
|
|
||||||
@@ -1,38 +1,37 @@
|
|||||||
import jsonapi_requests
|
import jsonapi_requests
|
||||||
|
from orm.my_meta import MyMeta
|
||||||
|
|
||||||
class Taxonomy(jsonapi_requests.orm.ApiModel):
|
class Taxonomy(jsonapi_requests.orm.ApiModel):
|
||||||
class Meta:
|
class Meta(MyMeta):
|
||||||
type = 'taxonomy_term'
|
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')
|
name = jsonapi_requests.orm.AttributeField('name')
|
||||||
|
|
||||||
class Crop(Taxonomy):
|
class Crop(Taxonomy):
|
||||||
class Meta(Taxonomy.Meta):
|
class Meta(Taxonomy.Meta):
|
||||||
name = 'crop_family'
|
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 LogCategory(Taxonomy):
|
||||||
class Meta(Taxonomy.Meta):
|
class Meta(Taxonomy.Meta):
|
||||||
name = 'log_category'
|
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 MaterialType(Taxonomy):
|
||||||
class Meta(Taxonomy.Meta):
|
class Meta(Taxonomy.Meta):
|
||||||
name = 'material_type'
|
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 PlantType(Taxonomy):
|
||||||
class Meta(Taxonomy.Meta):
|
class Meta(Taxonomy.Meta):
|
||||||
name = 'plant_type'
|
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 ProductType(Taxonomy):
|
||||||
class Meta(Taxonomy.Meta):
|
class Meta(Taxonomy.Meta):
|
||||||
name = 'product_type'
|
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 Season(Taxonomy):
|
||||||
class Meta(Taxonomy.Meta):
|
class Meta(Taxonomy.Meta):
|
||||||
name = 'season'
|
name = 'season'
|
||||||
type, path = Log.Meta.get_type_and_path(name)
|
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)
|
||||||
@@ -1,6 +1,25 @@
|
|||||||
import lib as neo
|
import lib as neo
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
result = neo.getHarvests()
|
seedings = neo.Seeding.get_list()
|
||||||
for i in result:
|
for seeding in seedings:
|
||||||
print(f"name: {i.name} plant: {i.getPlant().name}")
|
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}")
|
||||||
Reference in New Issue
Block a user