feat: include/exclude certain views, menus based on integration mode
refs: #3
This commit is contained in:
parent
1f254ca775
commit
87101d6b04
5 changed files with 235 additions and 23 deletions
|
|
@ -51,6 +51,30 @@ class WuttaFarmAppHandler(base.AppHandler):
|
||||||
self.handlers["farmos"] = factory(self.config)
|
self.handlers["farmos"] = factory(self.config)
|
||||||
return self.handlers["farmos"]
|
return self.handlers["farmos"]
|
||||||
|
|
||||||
|
def get_farmos_integration_mode(self):
|
||||||
|
"""
|
||||||
|
Returns the integration mode for farmOS, i.e. to control the
|
||||||
|
app's behavior regarding that.
|
||||||
|
"""
|
||||||
|
handler = self.get_farmos_handler()
|
||||||
|
return handler.get_farmos_integration_mode()
|
||||||
|
|
||||||
|
def is_farmos_mirror(self):
|
||||||
|
"""
|
||||||
|
Returns ``True`` if the app is configured in "mirror"
|
||||||
|
integration mode with regard to farmOS.
|
||||||
|
"""
|
||||||
|
handler = self.get_farmos_handler()
|
||||||
|
return handler.is_farmos_mirror()
|
||||||
|
|
||||||
|
def is_farmos_wrapper(self):
|
||||||
|
"""
|
||||||
|
Returns ``True`` if the app is configured in "wrapper"
|
||||||
|
integration mode with regard to farmOS.
|
||||||
|
"""
|
||||||
|
handler = self.get_farmos_handler()
|
||||||
|
return handler.is_farmos_wrapper()
|
||||||
|
|
||||||
def get_farmos_url(self, *args, **kwargs):
|
def get_farmos_url(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Get a farmOS URL. This is a convenience wrapper around
|
Get a farmOS URL. This is a convenience wrapper around
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,35 @@ class FarmOSHandler(GenericHandler):
|
||||||
:term:`handler`.
|
:term:`handler`.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def get_farmos_integration_mode(self):
|
||||||
|
"""
|
||||||
|
Returns the integration mode for farmOS, i.e. to control the
|
||||||
|
app's behavior regarding that.
|
||||||
|
"""
|
||||||
|
enum = self.app.enum
|
||||||
|
return self.config.get(
|
||||||
|
f"{self.app.appname}.farmos_integration_mode",
|
||||||
|
default=enum.FARMOS_INTEGRATION_MODE_WRAPPER,
|
||||||
|
)
|
||||||
|
|
||||||
|
def is_farmos_mirror(self):
|
||||||
|
"""
|
||||||
|
Returns ``True`` if the app is configured in "mirror"
|
||||||
|
integration mode with regard to farmOS.
|
||||||
|
"""
|
||||||
|
enum = self.app.enum
|
||||||
|
mode = self.get_farmos_integration_mode()
|
||||||
|
return mode == enum.FARMOS_INTEGRATION_MODE_MIRROR
|
||||||
|
|
||||||
|
def is_farmos_wrapper(self):
|
||||||
|
"""
|
||||||
|
Returns ``True`` if the app is configured in "wrapper"
|
||||||
|
integration mode with regard to farmOS.
|
||||||
|
"""
|
||||||
|
enum = self.app.enum
|
||||||
|
mode = self.get_farmos_integration_mode()
|
||||||
|
return mode == enum.FARMOS_INTEGRATION_MODE_WRAPPER
|
||||||
|
|
||||||
def get_farmos_client(self, hostname=None, **kwargs):
|
def get_farmos_client(self, hostname=None, **kwargs):
|
||||||
"""
|
"""
|
||||||
Returns a new farmOS API client.
|
Returns a new farmOS API client.
|
||||||
|
|
|
||||||
|
|
@ -32,12 +32,31 @@ class WuttaFarmMenuHandler(base.MenuHandler):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def make_menus(self, request, **kwargs):
|
def make_menus(self, request, **kwargs):
|
||||||
return [
|
enum = self.app.enum
|
||||||
self.make_asset_menu(request),
|
mode = self.app.get_farmos_integration_mode()
|
||||||
self.make_log_menu(request),
|
|
||||||
self.make_farmos_menu(request),
|
if mode == enum.FARMOS_INTEGRATION_MODE_WRAPPER:
|
||||||
self.make_admin_menu(request, include_people=True),
|
return [
|
||||||
]
|
self.make_farmos_asset_menu(request),
|
||||||
|
self.make_farmos_log_menu(request),
|
||||||
|
self.make_farmos_other_menu(request),
|
||||||
|
self.make_admin_menu(request, include_people=True),
|
||||||
|
]
|
||||||
|
|
||||||
|
elif mode == enum.FARMOS_INTEGRATION_MODE_MIRROR:
|
||||||
|
return [
|
||||||
|
self.make_asset_menu(request),
|
||||||
|
self.make_log_menu(request),
|
||||||
|
self.make_farmos_full_menu(request),
|
||||||
|
self.make_admin_menu(request, include_people=True),
|
||||||
|
]
|
||||||
|
|
||||||
|
else: # FARMOS_INTEGRATION_MODE_NONE
|
||||||
|
return [
|
||||||
|
self.make_asset_menu(request),
|
||||||
|
self.make_log_menu(request),
|
||||||
|
self.make_admin_menu(request, include_people=True),
|
||||||
|
]
|
||||||
|
|
||||||
def make_asset_menu(self, request):
|
def make_asset_menu(self, request):
|
||||||
return {
|
return {
|
||||||
|
|
@ -168,7 +187,7 @@ class WuttaFarmMenuHandler(base.MenuHandler):
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
def make_farmos_menu(self, request):
|
def make_farmos_full_menu(self, request):
|
||||||
config = request.wutta_config
|
config = request.wutta_config
|
||||||
app = config.get_app()
|
app = config.get_app()
|
||||||
return {
|
return {
|
||||||
|
|
@ -282,3 +301,137 @@ class WuttaFarmMenuHandler(base.MenuHandler):
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def make_farmos_asset_menu(self, request):
|
||||||
|
config = request.wutta_config
|
||||||
|
app = config.get_app()
|
||||||
|
return {
|
||||||
|
"title": "Assets",
|
||||||
|
"type": "menu",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"title": "Animal",
|
||||||
|
"route": "farmos_animals",
|
||||||
|
"perm": "farmos_animals.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Group",
|
||||||
|
"route": "farmos_groups",
|
||||||
|
"perm": "farmos_groups.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Land",
|
||||||
|
"route": "farmos_land_assets",
|
||||||
|
"perm": "farmos_land_assets.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Plant",
|
||||||
|
"route": "farmos_asset_plant",
|
||||||
|
"perm": "farmos_asset_plant.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Structure",
|
||||||
|
"route": "farmos_structures",
|
||||||
|
"perm": "farmos_structures.list",
|
||||||
|
},
|
||||||
|
{"type": "sep"},
|
||||||
|
{
|
||||||
|
"title": "Animal Types",
|
||||||
|
"route": "farmos_animal_types",
|
||||||
|
"perm": "farmos_animal_types.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Land Types",
|
||||||
|
"route": "farmos_land_types",
|
||||||
|
"perm": "farmos_land_types.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Plant Types",
|
||||||
|
"route": "farmos_plant_types",
|
||||||
|
"perm": "farmos_plant_types.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Structure Types",
|
||||||
|
"route": "farmos_structure_types",
|
||||||
|
"perm": "farmos_structure_types.list",
|
||||||
|
},
|
||||||
|
{"type": "sep"},
|
||||||
|
{
|
||||||
|
"title": "Asset Types",
|
||||||
|
"route": "farmos_asset_types",
|
||||||
|
"perm": "farmos_asset_types.list",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
def make_farmos_log_menu(self, request):
|
||||||
|
config = request.wutta_config
|
||||||
|
app = config.get_app()
|
||||||
|
return {
|
||||||
|
"title": "Logs",
|
||||||
|
"type": "menu",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"title": "Activity",
|
||||||
|
"route": "farmos_logs_activity",
|
||||||
|
"perm": "farmos_logs_activity.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Harvest",
|
||||||
|
"route": "farmos_logs_harvest",
|
||||||
|
"perm": "farmos_logs_harvest.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Medical",
|
||||||
|
"route": "farmos_logs_medical",
|
||||||
|
"perm": "farmos_logs_medical.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Observation",
|
||||||
|
"route": "farmos_logs_observation",
|
||||||
|
"perm": "farmos_logs_observation.list",
|
||||||
|
},
|
||||||
|
{"type": "sep"},
|
||||||
|
{
|
||||||
|
"title": "Log Types",
|
||||||
|
"route": "farmos_log_types",
|
||||||
|
"perm": "farmos_log_types.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Quantity Types",
|
||||||
|
"route": "farmos_quantity_types",
|
||||||
|
"perm": "farmos_quantity_types.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Standard Quantities",
|
||||||
|
"route": "farmos_quantities_standard",
|
||||||
|
"perm": "farmos_quantities_standard.list",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Units",
|
||||||
|
"route": "farmos_units",
|
||||||
|
"perm": "farmos_units.list",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
def make_farmos_other_menu(self, request):
|
||||||
|
config = request.wutta_config
|
||||||
|
app = config.get_app()
|
||||||
|
return {
|
||||||
|
"title": "farmOS",
|
||||||
|
"type": "menu",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"title": "Go to farmOS",
|
||||||
|
"url": app.get_farmos_url(),
|
||||||
|
"target": "_blank",
|
||||||
|
},
|
||||||
|
{"type": "sep"},
|
||||||
|
{
|
||||||
|
"title": "Users",
|
||||||
|
"route": "farmos_users",
|
||||||
|
"perm": "farmos_users.list",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,10 @@ from .master import WuttaFarmMasterView
|
||||||
|
|
||||||
|
|
||||||
def includeme(config):
|
def includeme(config):
|
||||||
|
wutta_config = config.registry.settings.get("wutta_config")
|
||||||
|
app = wutta_config.get_app()
|
||||||
|
enum = app.enum
|
||||||
|
mode = app.get_farmos_integration_mode()
|
||||||
|
|
||||||
# wuttaweb core
|
# wuttaweb core
|
||||||
essential.defaults(
|
essential.defaults(
|
||||||
|
|
@ -42,20 +46,22 @@ def includeme(config):
|
||||||
)
|
)
|
||||||
|
|
||||||
# native table views
|
# native table views
|
||||||
config.include("wuttafarm.web.views.units")
|
if mode != enum.FARMOS_INTEGRATION_MODE_WRAPPER:
|
||||||
config.include("wuttafarm.web.views.quantities")
|
config.include("wuttafarm.web.views.units")
|
||||||
config.include("wuttafarm.web.views.asset_types")
|
config.include("wuttafarm.web.views.quantities")
|
||||||
config.include("wuttafarm.web.views.assets")
|
config.include("wuttafarm.web.views.asset_types")
|
||||||
config.include("wuttafarm.web.views.land")
|
config.include("wuttafarm.web.views.assets")
|
||||||
config.include("wuttafarm.web.views.structures")
|
config.include("wuttafarm.web.views.land")
|
||||||
config.include("wuttafarm.web.views.animals")
|
config.include("wuttafarm.web.views.structures")
|
||||||
config.include("wuttafarm.web.views.groups")
|
config.include("wuttafarm.web.views.animals")
|
||||||
config.include("wuttafarm.web.views.plants")
|
config.include("wuttafarm.web.views.groups")
|
||||||
config.include("wuttafarm.web.views.logs")
|
config.include("wuttafarm.web.views.plants")
|
||||||
config.include("wuttafarm.web.views.logs_activity")
|
config.include("wuttafarm.web.views.logs")
|
||||||
config.include("wuttafarm.web.views.logs_harvest")
|
config.include("wuttafarm.web.views.logs_activity")
|
||||||
config.include("wuttafarm.web.views.logs_medical")
|
config.include("wuttafarm.web.views.logs_harvest")
|
||||||
config.include("wuttafarm.web.views.logs_observation")
|
config.include("wuttafarm.web.views.logs_medical")
|
||||||
|
config.include("wuttafarm.web.views.logs_observation")
|
||||||
|
|
||||||
# views for farmOS
|
# views for farmOS
|
||||||
config.include("wuttafarm.web.views.farmos")
|
if mode != enum.FARMOS_INTEGRATION_MODE_NONE:
|
||||||
|
config.include("wuttafarm.web.views.farmos")
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ class AppInfoView(base.AppInfoView):
|
||||||
{"name": "farmos.url.base"},
|
{"name": "farmos.url.base"},
|
||||||
{
|
{
|
||||||
"name": f"{self.app.appname}.farmos_integration_mode",
|
"name": f"{self.app.appname}.farmos_integration_mode",
|
||||||
"default": "wrapper",
|
"default": self.app.get_farmos_integration_mode(),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue