def test_E_AssertDisjoint(self):
     with self.assertRaises(AssertionError):
         phlsys_namedtuple.make_named_tuple(
             'T',
             required=['r1', 'r2'],
             defaults={'r1': 1, 'd2': 2},
             ignored=['i1', 'i2'])
     with self.assertRaises(AssertionError):
         phlsys_namedtuple.make_named_tuple(
             'T',
             required=['r1', 'r2'],
             defaults={'d1': 1, 'd2': 2},
             ignored=['r1', 'i2'])
     with self.assertRaises(AssertionError):
         phlsys_namedtuple.make_named_tuple(
             'T',
             required=['r1', 'r2'],
             defaults={'d1': 1, 'd2': 2},
             ignored=['d1', 'i2'])
     with self.assertRaises(AssertionError):
         phlsys_namedtuple.make_named_tuple(
             'T',
             required=['a', 'r2'],
             defaults={'a': 1, 'd2': 2},
             ignored=['a', 'i2'])
 def test_E_AssertDisjoint(self):
     with self.assertRaises(AssertionError):
         phlsys_namedtuple.make_named_tuple(
             'T',
             required=['r1', 'r2'],
             defaults={'r1': 1, 'd2': 2},
             ignored=['i1', 'i2'])
     with self.assertRaises(AssertionError):
         phlsys_namedtuple.make_named_tuple(
             'T',
             required=['r1', 'r2'],
             defaults={'d1': 1, 'd2': 2},
             ignored=['r1', 'i2'])
     with self.assertRaises(AssertionError):
         phlsys_namedtuple.make_named_tuple(
             'T',
             required=['r1', 'r2'],
             defaults={'d1': 1, 'd2': 2},
             ignored=['d1', 'i2'])
     with self.assertRaises(AssertionError):
         phlsys_namedtuple.make_named_tuple(
             'T',
             required=['a', 'r2'],
             defaults={'a': 1, 'd2': 2},
             ignored=['a', 'i2'])
    def test_F_IndependentFactory(self):
        factory1 = phlsys_namedtuple.make_named_tuple('T1', [], {}, [])
        phlsys_namedtuple.make_named_tuple('T2', [], {}, [])
        self.assertEqual(type(factory1()).__name__, 'T1')

        phlsys_namedtuple.make_named_tuple('T1', ['r1'], {}, [])
        factory1()
        phlsys_namedtuple.make_named_tuple('T1', [], {'d1': 1}, [])
        self.assertFalse(hasattr(factory1(), 'd1'))
    def test_F_IndependentFactory(self):
        factory1 = phlsys_namedtuple.make_named_tuple('T1', [], {}, [])
        phlsys_namedtuple.make_named_tuple('T2', [], {}, [])
        self.assertEqual(type(factory1()).__name__, 'T1')

        phlsys_namedtuple.make_named_tuple('T1', ['r1'], {}, [])
        factory1()
        phlsys_namedtuple.make_named_tuple('T1', [], {'d1': 1}, [])
        self.assertFalse(hasattr(factory1(), 'd1'))
# Public Assignments:
#   QueryResponse
#
# -----------------------------------------------------------------------------
# (this contents block is generated, edits will be lost)
# =============================================================================

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import phlsys_namedtuple

QueryResponse = phlsys_namedtuple.make_named_tuple(
    'QueryResponse',
    required=['name', 'phid'],
    defaults={},
    ignored=['dateCreated', 'members', 'dateModified', 'id', 'slugs'])


def query_some(conduit, max_items, offset):
    """Return a list of some projects from the supplied conduit.

    :conduit: supports call()
    :max_items: the maximum number of items to return
    :offset: the offset into the list of all possible items
    :returns: a list of QueryResponse

    """
    d = {
        'limit': max_items,
#
# -----------------------------------------------------------------------------
# (this contents block is generated, edits will be lost)
# =============================================================================

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import phlsys_conduit
import phlsys_namedtuple


QueryResponse = phlsys_namedtuple.make_named_tuple(
    'phlcon_user__QueryResponse',
    required=['phid', 'userName', 'realName', 'image', 'uri', 'roles'],
    defaults={},
    ignored=['currentStatus', 'currentStatusUntil', 'primaryEmail'])


class UserPhidCache(object):

    """Efficiently retrieve the PHID for specified usernames."""

    def __init__(self, conduit):
        """Construct a cache attached to the specified 'conduit'."""
        super(UserPhidCache, self).__init__()
        self._user_to_phid = {}
        self._hinted_users = set()
        self._conduit = conduit
# Enumerate some of the fields that Differential expects to be able fill out
# based on commit messages, these are accepted by create_revision and
# accept_revision
# from phabricator/.../...DefaultFieldSelector.php
class MessageFields(object):  # XXX: will derive from Enum in Python 3.4+
    title = "title"
    summary = "summary"
    test_plan = "testPlan"
    reviewer_phids = "reviewerPHIDs"
    cc_phids = "ccPHIDs"


CreateRawDiffResponse = phlsys_namedtuple.make_named_tuple(
    'CreateRawDiffResponse',
    required=['id', 'uri'],
    defaults={},
    ignored=[])


GetDiffIdResponse = phlsys_namedtuple.make_named_tuple(
    'phlcon_differential__GetDiffIdResponse',
    required=[
        'parent', 'properties', 'sourceControlSystem', 'sourceControlPath',
        'dateCreated', 'dateModified', 'lintStatus', 'bookmark', 'changes',
        'revisionID', 'sourceControlBaseRevision', 'branch',
        'projectName', 'unitStatus', 'creationMethod', 'id', 'description'],
    defaults={},
    ignored=[])

 def setUp(self):
     self.factory = phlsys_namedtuple.make_named_tuple(
         'T',
         required=['r1', 'r2'],
         defaults={'d1': 1, 'd2': 2},
         ignored=['i1', 'i2'])
# Public Assignments:
#   QueryResponse
#
# -----------------------------------------------------------------------------
# (this contents block is generated, edits will be lost)
# =============================================================================

from __future__ import absolute_import

import phlsys_conduit
import phlsys_namedtuple


QueryResponse = phlsys_namedtuple.make_named_tuple(
    'phlcon_user__QueryResponse',
    required=['phid', 'userName', 'realName', 'image', 'uri', 'roles'],
    defaults={},
    ignored=['currentStatus', 'currentStatusUntil'])


def is_no_such_error(e):
    """Return True if the supplied ConduitException is due to unknown user.

    :e: a ConduitException
    :returns: True if the supplied ConduitException is due to unknown user

    """
    errConduitCore = "ERR-CONDUIT-CORE"
    noSuchEmail = ""
    noSuchEmail += "Array for %Ls conversion is empty. "
    noSuchEmail += "Query: SELECT * FROM %s WHERE userPHID IN (%Ls) "
}

# from ManiphestTaskQuery.php
ORDERS = {
    'priority': 'order-priority',
    'created': 'order-created',
    'modified': 'order-modified',
    'title': 'order-title',
}

CreateTaskResponse = phlsys_namedtuple.make_named_tuple(
    'CreateTaskResponse',
    required=[
        'id', 'uri', 'title', 'status', 'priority', 'authorPHID', 'phid',
        'description', 'objectName', 'auxiliary', 'ccPHIDs', 'ownerPHID',
        'dateModified', 'dateCreated', 'projectPHIDs'
    ],
    defaults={
        'statusName': None,
    },
    ignored=['priorityColor', 'isClosed', 'dependsOnTaskPHIDs'])


def create_task(conduit,
                title,
                description="",
                priority=None,
                owner=None,
                ccs=None,
                projects=None):
    """Create a new Maniphest task using the supplied 'conduit'.
    'duplicate': 'status-duplicate',
}

# from ManiphestTaskQuery.php
ORDERS = {
    'priority': 'order-priority',
    'created': 'order-created',
    'modified': 'order-modified',
    'title': 'order-title',
}

CreateTaskResponse = phlsys_namedtuple.make_named_tuple(
    'CreateTaskResponse',
    required=[
        'id', 'uri', 'title', 'status', 'priority',
        'authorPHID', 'phid', 'description', 'objectName',
        'auxiliary', 'ccPHIDs', 'ownerPHID', 'dateModified',
        'dateCreated', 'projectPHIDs'
    ],
    defaults={},
    ignored=[])


def create_task(
        conduit,
        title,
        description="",
        priority=None,
        owner=None,
        ccs=None,
        projects=None):
    """Create a new Maniphest task using the supplied 'conduit'.
#
# Public Assignments:
#   QueryResponse
#
# -----------------------------------------------------------------------------
# (this contents block is generated, edits will be lost)
# =============================================================================

from __future__ import absolute_import

import phlsys_namedtuple


QueryResponse = phlsys_namedtuple.make_named_tuple(
    'QueryResponse',
    required=['name', 'phid'],
    defaults={},
    ignored=['dateCreated', 'members', 'dateModified', 'id'])


def query_some(conduit, max_items, offset):
    """Return a list of some projects from the supplied conduit.

    :conduit: supports call()
    :max_items: the maximum number of items to return
    :offset: the offset into the list of all possible items
    :returns: a list of QueryResponse

    """
    d = {
        'limit': max_items,
 def setUp(self):
     self.factory = phlsys_namedtuple.make_named_tuple(
         'T',
         required=['r1', 'r2'],
         defaults={'d1': 1, 'd2': 2},
         ignored=['i1', 'i2'])
# Public Assignments:
#   CreatePasteResponse
#
# -----------------------------------------------------------------------------
# (this contents block is generated, edits will be lost)
# =============================================================================

from __future__ import absolute_import

import phlsys_namedtuple


CreatePasteResponse = phlsys_namedtuple.make_named_tuple(
    'CreatePasteResponse',
    required=[
        'id', 'phid', 'authorPHID', 'filePHID', 'title', 'parentPHID',
        'dateCreated', 'language', 'objectName', 'uri', 'content'
    ],
    defaults={},
    ignored=[])


def create_paste(conduit, content, title="", language=""):
    """Creates a paste in Phabricator.

    :conduit: conduit to operate on
    :content: the content of the paste
    :title: the title of the paste
    :language: the programming language of the paste ie. c++
    :returns: pasteResponse named tuple

    """
# Enumerate some of the fields that Differential expects to be able fill out
# based on commit messages, these are accepted by create_revision and
# accept_revision
# from phabricator/.../...DefaultFieldSelector.php
class MessageFields(object):  # XXX: will derive from Enum in Python 3.4+
    title = "title"
    summary = "summary"
    test_plan = "testPlan"
    reviewer_phids = "reviewerPHIDs"
    cc_phids = "ccPHIDs"


CreateRawDiffResponse = phlsys_namedtuple.make_named_tuple(
    'CreateRawDiffResponse',
    required=['id', 'uri'],
    defaults={},
    ignored=[])


GetDiffIdResponse = phlsys_namedtuple.make_named_tuple(
    'phlcon_differential__GetDiffIdResponse',
    required=[
        'parent', 'properties', 'sourceControlSystem', 'sourceControlPath',
        'dateCreated', 'dateModified', 'lintStatus', 'bookmark', 'changes',
        'revisionID', 'sourceControlBaseRevision', 'branch',
        'projectName', 'unitStatus', 'creationMethod', 'id', 'description'],
    defaults={},
    ignored=[])

#   CreatePasteResponse
#
# -----------------------------------------------------------------------------
# (this contents block is generated, edits will be lost)
# =============================================================================

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import phlsys_namedtuple

CreatePasteResponse = phlsys_namedtuple.make_named_tuple(
    'CreatePasteResponse',
    required=[
        'id', 'phid', 'authorPHID', 'filePHID', 'title', 'parentPHID',
        'dateCreated', 'language', 'objectName', 'uri', 'content'
    ],
    defaults={},
    ignored=[])


def create_paste(conduit, content, title="", language=""):
    """Creates a paste in Phabricator.

    :conduit: conduit to operate on
    :content: the content of the paste
    :title: the title of the paste
    :language: the programming language of the paste ie. c++
    :returns: pasteResponse named tuple

    """