def createDraft(userId, targetKey, factory=None):
    """Create a new draft for the given user id and target, indicated by
        a string key (normally a string representation for an uuid, but may be
        more complex). Returns the new draft.

        The ``factory`` parameter can be used to pass a custom factory to
        create the draft object. It should be callable that takes two
        arguments: userId and soruceKey. The factory may set the ``__name__``
        attribute on the returned draft. This will be used, but may have a
        numeric suffix appended to ensure uniqueness.

        If ``factory`` is omitted, a basic, annotatable ``IDraft`` object will
        be created.
        """
