diff --git a/src/plone/api/content.py b/src/plone/api/content.py index dcdcbf6..745ffee 100644 --- a/src/plone/api/content.py +++ b/src/plone/api/content.py @@ -20,6 +20,8 @@ from zope.interface import providedBy import random import transaction +_marker = [] + @required_parameters('container', 'type') @at_least_one_of('id', 'title') @@ -266,19 +268,25 @@ def delete(obj=None): @required_parameters('obj') -def get_state(obj=None): +def get_state(obj=None, default=_marker): """Get the current workflow state of the object. - :param obj: [required] Object that we want to get the state for. :type obj: Content object - :returns: Object's current workflow state + :param default: Returned if no workflow is defined for the object. + :returns: Object's current workflow state, or `default`. :rtype: string :raises: - ValueError + Products.CMFCore.WorkflowCore.WorkflowException :Example: :ref:`content_get_state_example` """ workflow = portal.get_tool('portal_workflow') - return workflow.getInfoFor(obj, 'review_state') + + if default is not _marker and not workflow.getWorkflowsFor(obj): + return default + + # This still raises WorkflowException when the workflow state is broken, + # ie 'review_state' is absent + return workflow.getInfoFor(ob=obj, name='review_state') @required_parameters('obj', 'transition')