def verify_developer_rights(prefixed_name):
    """
    Checks if the current user is a developer of the app or global workflow
    with the given name. If the app/global workflow exists and the user has
    developer rights to it, the function returns a named tuple representing
    the executable that was queried.
    """
    assert(prefixed_name.startswith('app-') or prefixed_name.startswith('globalworkflow-'))

    if prefixed_name.partition('-')[0] == 'app':
        exception_type = dxpy.app_builder.AppBuilderException
        describe_method = dxpy.api.app_describe
        exception_msg = \
            'An app with the given name already exists and you are not a developer of that app'
    else:
        exception_type = dxpy.workflow_builder.WorkflowBuilderException
        describe_method = dxpy.api.global_workflow_describe
        exception_msg = \
            'A global workflow with the given name already exists and you are not a developer of that workflow'

    name_already_exists = True
    is_developer = False
    version = None
    executable_id = None
    FoundExecutable = collections.namedtuple('FoundExecutable', ['name', 'version', 'id'])
    try:
        describe_output = describe_method(prefixed_name,
                                          input_params={"fields": {"isDeveloperFor": True,
                                                                   "version": True,
                                                                   "id": True}})
        is_developer = describe_output['isDeveloperFor']
        version = describe_output['version']
        executable_id = describe_output['id']
    except dxpy.exceptions.DXAPIError as e:
        if e.name == 'ResourceNotFound':
            name_already_exists = False
        elif e.name == 'PermissionDenied':
            raise exception_type(exception_msg)
        else:
            raise e

    if not name_already_exists:
        # This app/workflow doesn't exist yet so its creation will succeed
        # (or at least, not fail on the basis of the ACL).
        return FoundExecutable(name=None, version=None, id=None)

    name_without_prefix = prefixed_name.partition('-')[2]
    if not is_developer:
        raise exception_type('You are not a developer for {n}'.format(n=name_without_prefix))

    return FoundExecutable(name=name_without_prefix, version=version, id=executable_id)
def verify_developer_rights ( prefixed_name ) : assert ( prefixed_name . startswith ( 'app-' ) or prefixed_name . startswith ( 'globalworkflow-' ) ) if prefixed_name . partition ( '-' ) [ 0 ] == 'app' : exception_type = dxpy . app_builder . AppBuilderException describe_method = dxpy . api . app_describe exception_msg = 'An app with the given name already exists and you are not a developer of that app' else : exception_type = dxpy . workflow_builder . WorkflowBuilderException describe_method = dxpy . api . global_workflow_describe exception_msg = 'A global workflow with the given name already exists and you are not a developer of that workflow' name_already_exists = True is_developer = False version = None executable_id = None FoundExecutable = collections . namedtuple ( 'FoundExecutable' , [ 'name' , 'version' , 'id' ] ) try : describe_output = describe_method ( prefixed_name , input_params = { "fields" : { "isDeveloperFor" : True , "version" : True , "id" : True } } ) is_developer = describe_output [ 'isDeveloperFor' ] version = describe_output [ 'version' ] executable_id = describe_output [ 'id' ] except dxpy . exceptions . DXAPIError as e : if e . name == 'ResourceNotFound' : name_already_exists = False elif e . name == 'PermissionDenied' : raise exception_type ( exception_msg ) else : raise e if not name_already_exists : return FoundExecutable ( name = None , version = None , id = None ) name_without_prefix = prefixed_name . partition ( '-' ) [ 2 ] if not is_developer : raise exception_type ( 'You are not a developer for {n}' . format ( n = name_without_prefix ) ) return FoundExecutable ( name = name_without_prefix , version = version , id = executable_id )
Checks if the current user is a developer of the app or global workflow
    with the given name. If the app/global workflow exists and the user has
    developer rights to it, the function returns a named tuple representing
    the executable that was queried.