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)
|
||||
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):
|
||||
"""
|
||||
Get a farmOS URL. This is a convenience wrapper around
|
||||
|
|
|
|||
|
|
@ -34,6 +34,35 @@ class FarmOSHandler(GenericHandler):
|
|||
: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):
|
||||
"""
|
||||
Returns a new farmOS API client.
|
||||
|
|
|
|||
|
|
@ -32,12 +32,31 @@ class WuttaFarmMenuHandler(base.MenuHandler):
|
|||
"""
|
||||
|
||||
def make_menus(self, request, **kwargs):
|
||||
return [
|
||||
self.make_asset_menu(request),
|
||||
self.make_log_menu(request),
|
||||
self.make_farmos_menu(request),
|
||||
self.make_admin_menu(request, include_people=True),
|
||||
]
|
||||
enum = self.app.enum
|
||||
mode = self.app.get_farmos_integration_mode()
|
||||
|
||||
if mode == enum.FARMOS_INTEGRATION_MODE_WRAPPER:
|
||||
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):
|
||||
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
|
||||
app = config.get_app()
|
||||
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):
|
||||
wutta_config = config.registry.settings.get("wutta_config")
|
||||
app = wutta_config.get_app()
|
||||
enum = app.enum
|
||||
mode = app.get_farmos_integration_mode()
|
||||
|
||||
# wuttaweb core
|
||||
essential.defaults(
|
||||
|
|
@ -42,20 +46,22 @@ def includeme(config):
|
|||
)
|
||||
|
||||
# native table views
|
||||
config.include("wuttafarm.web.views.units")
|
||||
config.include("wuttafarm.web.views.quantities")
|
||||
config.include("wuttafarm.web.views.asset_types")
|
||||
config.include("wuttafarm.web.views.assets")
|
||||
config.include("wuttafarm.web.views.land")
|
||||
config.include("wuttafarm.web.views.structures")
|
||||
config.include("wuttafarm.web.views.animals")
|
||||
config.include("wuttafarm.web.views.groups")
|
||||
config.include("wuttafarm.web.views.plants")
|
||||
config.include("wuttafarm.web.views.logs")
|
||||
config.include("wuttafarm.web.views.logs_activity")
|
||||
config.include("wuttafarm.web.views.logs_harvest")
|
||||
config.include("wuttafarm.web.views.logs_medical")
|
||||
config.include("wuttafarm.web.views.logs_observation")
|
||||
if mode != enum.FARMOS_INTEGRATION_MODE_WRAPPER:
|
||||
config.include("wuttafarm.web.views.units")
|
||||
config.include("wuttafarm.web.views.quantities")
|
||||
config.include("wuttafarm.web.views.asset_types")
|
||||
config.include("wuttafarm.web.views.assets")
|
||||
config.include("wuttafarm.web.views.land")
|
||||
config.include("wuttafarm.web.views.structures")
|
||||
config.include("wuttafarm.web.views.animals")
|
||||
config.include("wuttafarm.web.views.groups")
|
||||
config.include("wuttafarm.web.views.plants")
|
||||
config.include("wuttafarm.web.views.logs")
|
||||
config.include("wuttafarm.web.views.logs_activity")
|
||||
config.include("wuttafarm.web.views.logs_harvest")
|
||||
config.include("wuttafarm.web.views.logs_medical")
|
||||
config.include("wuttafarm.web.views.logs_observation")
|
||||
|
||||
# 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": 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