<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[12165] twext/trunk/twext/who/opendirectory</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/12165">12165</a></dd>
<dt>Author</dt> <dd>wsanchez@apple.com</dd>
<dt>Date</dt> <dd>2013-12-19 19:54:46 -0800 (Thu, 19 Dec 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>Move constants to a separate file, add in loads of commented out constants.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#twexttrunktwextwhoopendirectory_servicepy">twext/trunk/twext/who/opendirectory/_service.py</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#twexttrunktwextwhoopendirectory_constantspy">twext/trunk/twext/who/opendirectory/_constants.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="twexttrunktwextwhoopendirectory_constantspy"></a>
<div class="addfile"><h4>Added: twext/trunk/twext/who/opendirectory/_constants.py (0 => 12165)</h4>
<pre class="diff"><span>
<span class="info">--- twext/trunk/twext/who/opendirectory/_constants.py                                (rev 0)
+++ twext/trunk/twext/who/opendirectory/_constants.py        2013-12-20 03:54:46 UTC (rev 12165)
</span><span class="lines">@@ -0,0 +1,429 @@
</span><ins>+# -*- test-case-name: twext.who.opendirectory.test.test_service -*-
+##
+# Copyright (c) 2013 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+&quot;&quot;&quot;
+OpenDirectory constants.
+&quot;&quot;&quot;
+
+from twisted.python.constants import (
+    Names, NamedConstant, Values, ValueConstant
+)
+
+from ..idirectory import (
+    FieldName as BaseFieldName, RecordType as BaseRecordType
+)
+from ..expression import MatchType
+
+
+#
+# idirectory constants
+#
+
+class FieldName(Names):
+    searchPath = NamedConstant()
+    searchPath.description = u&quot;search path&quot;
+    searchPath.multiValue = False
+
+    metaNodeLocation = NamedConstant()
+    metaNodeLocation.description = u&quot;source OD node&quot;
+    metaNodeLocation.multiValue = False
+
+    metaRecordName = NamedConstant()
+    metaRecordName.description = u&quot;meta record name&quot;
+    metaRecordName.multiValue = False
+
+
+
+#
+# OD constants
+#
+
+class ODSearchPath(Values):
+    local = ValueConstant(u&quot;/Local/Default&quot;)
+    search = ValueConstant(u&quot;/Search&quot;)
+
+
+
+class ODRecordType(Values):
+    user = ValueConstant(u&quot;dsRecTypeStandard:Users&quot;)
+    user.recordType = BaseRecordType.user
+
+    group = ValueConstant(u&quot;dsRecTypeStandard:Groups&quot;)
+    group.recordType = BaseRecordType.group
+
+    # accessControl = ValueConstant(u&quot;dsRecTypeStandard:AccessControls&quot;)
+    # afpServer = ValueConstant(u&quot;dsRecTypeStandard:AFPServer&quot;)
+    # userAlias = ValueConstant(u&quot;dsRecTypeStandard:AFPUserAliases&quot;)
+    # alias = ValueConstant(u&quot;dsRecTypeStandard:Aliases&quot;)
+    # augment = ValueConstant(u&quot;dsRecTypeStandard:Augments&quot;)
+    # autoMount = ValueConstant(u&quot;dsRecTypeStandard:Automount&quot;)
+    # autoMountMap = ValueConstant(u&quot;dsRecTypeStandard:AutomountMap&quot;)
+    # autoServerSetup = ValueConstant(u&quot;dsRecTypeStandard:AutoServerSetup&quot;)
+    # bootp = ValueConstant(u&quot;dsRecTypeStandard:Bootp&quot;)
+    # certificateAuthority = ValueConstant(u&quot;dsRecTypeStandard:CertificateAuthorities&quot;)
+    # computerList = ValueConstant(u&quot;dsRecTypeStandard:ComputerLists&quot;)
+    # computerGroup = ValueConstant(u&quot;dsRecTypeStandard:ComputerGroups&quot;)
+    # computer = ValueConstant(u&quot;dsRecTypeStandard:Computers&quot;)
+    # config = ValueConstant(u&quot;dsRecTypeStandard:Config&quot;)
+    # ethernet = ValueConstant(u&quot;dsRecTypeStandard:Ethernets&quot;)
+    # fileMakerServer = ValueConstant(u&quot;dsRecTypeStandard:FileMakerServers&quot;)
+    # ftpServer = ValueConstant(u&quot;dsRecTypeStandard:FTPServer&quot;)
+    # groupAlias = ValueConstant(u&quot;dsRecTypeStandard:GroupAliases&quot;)
+    # hostServices = ValueConstant(u&quot;dsRecTypeStandard:HostServices&quot;)
+    # host = ValueConstant(u&quot;dsRecTypeStandard:Hosts&quot;)
+    # ldapServer = ValueConstant(u&quot;dsRecTypeStandard:LDAPServer&quot;)
+    # location = ValueConstant(u&quot;dsRecTypeStandard:Locations&quot;)
+    # machine = ValueConstant(u&quot;dsRecTypeStandard:Machines&quot;)
+    # map = ValueConstant(u&quot;dsRecTypeStandard:Maps&quot;)
+    # meta = ValueConstant(u&quot;dsRecTypeStandard:AppleMetaRecord&quot;)
+    # mount = ValueConstant(u&quot;dsRecTypeStandard:Mounts&quot;)
+    # neighborhood = ValueConstant(u&quot;dsRecTypeStandard:Neighborhoods&quot;)
+    # nfs = ValueConstant(u&quot;dsRecTypeStandard:NFS&quot;)
+    # netDomain = ValueConstant(u&quot;dsRecTypeStandard:NetDomains&quot;)
+    # netGroup = ValueConstant(u&quot;dsRecTypeStandard:NetGroups&quot;)
+    # network = ValueConstant(u&quot;dsRecTypeStandard:Networks&quot;)
+    # passwordServer = ValueConstant(u&quot;dsRecTypeStandard:PasswordServer&quot;)
+    # person = ValueConstant(u&quot;dsRecTypeStandard:People&quot;)
+    # place = ValueConstant(u&quot;dsRecTypeStandard:Places&quot;)
+    # presetComputer = ValueConstant(u&quot;dsRecTypeStandard:PresetComputers&quot;)
+    # presetComputerGroup = ValueConstant(u&quot;dsRecTypeStandard:PresetComputerGroups&quot;)
+    # presetComputerList = ValueConstant(u&quot;dsRecTypeStandard:PresetComputerLists&quot;)
+    # presetGroup = ValueConstant(u&quot;dsRecTypeStandard:PresetGroups&quot;)
+    # presetUser = ValueConstant(u&quot;dsRecTypeStandard:PresetUsers&quot;)
+    # printService = ValueConstant(u&quot;dsRecTypeStandard:PrintService&quot;)
+    # printServerUser = ValueConstant(u&quot;dsRecTypeStandard:PrintServiceUser&quot;)
+    # printer = ValueConstant(u&quot;dsRecTypeStandard:Printers&quot;)
+    # protocol = ValueConstant(u&quot;dsRecTypeStandard:Protocols&quot;)
+    # qtsServer = ValueConstant(u&quot;dsRecTypeStandard:QTSServer&quot;)
+    # resource = ValueConstant(u&quot;dsRecTypeStandard:Resources&quot;)
+    # rpc = ValueConstant(u&quot;dsRecTypeStandard:RPC&quot;)
+    # smbServer = ValueConstant(u&quot;dsRecTypeStandard:SMBServer&quot;)
+    # server = ValueConstant(u&quot;dsRecTypeStandard:Server&quot;)
+    # service = ValueConstant(u&quot;dsRecTypeStandard:Services&quot;)
+    # sharePoint = ValueConstant(u&quot;dsRecTypeStandard:SharePoints&quot;)
+    # userAlias = ValueConstant(u&quot;dsRecTypeStandard:UserAliases&quot;)
+    # webServer = ValueConstant(u&quot;dsRecTypeStandard:WebServer&quot;)
+
+
+    @classmethod
+    def fromRecordType(cls, recordType):
+        if not hasattr(cls, &quot;_recordTypeByRecordType&quot;):
+            cls._recordTypeByRecordType = dict((
+                (recordType.recordType, recordType)
+                for recordType in cls.iterconstants()
+                if hasattr(recordType, &quot;recordType&quot;)
+            ))
+
+        return cls._recordTypeByRecordType.get(recordType, None)
+
+
+
+class ODAttribute(Values):
+    searchPath = ValueConstant(u&quot;dsAttrTypeStandard:SearchPath&quot;)
+    searchPath.fieldName = FieldName.searchPath
+
+    recordType = ValueConstant(u&quot;dsAttrTypeStandard:RecordType&quot;)
+    recordType.fieldName = BaseFieldName.recordType
+
+    # uid = ValueConstant(u&quot;dsAttrTypeStandard:GeneratedUID&quot;)
+    # uid.fieldName = BaseFieldName.uid
+
+    guid = ValueConstant(u&quot;dsAttrTypeStandard:GeneratedUID&quot;)
+    guid.fieldName = BaseFieldName.guid
+
+    shortName = ValueConstant(u&quot;dsAttrTypeStandard:RecordName&quot;)
+    shortName.fieldName = BaseFieldName.shortNames
+
+    fullName = ValueConstant(u&quot;dsAttrTypeStandard:RealName&quot;)
+    fullName.fieldName = BaseFieldName.fullNames
+
+    emailAddress = ValueConstant(u&quot;dsAttrTypeStandard:EMailAddress&quot;)
+    emailAddress.fieldName = BaseFieldName.emailAddresses
+
+    metaNodeLocation = ValueConstant(u&quot;dsAttrTypeStandard:AppleMetaNodeLocation&quot;)
+    metaNodeLocation.fieldName = FieldName.metaNodeLocation
+
+    metaRecordName = ValueConstant(u&quot;dsAttrTypeStandard:AppleMetaRecordName&quot;)
+    metaRecordName.fieldName = FieldName.metaRecordName
+
+    # # Single value fields
+    # AdminLimits = ValueConstant(u&quot;dsAttrTypeStandard:AdminLimits&quot;)
+    # AppleAliasData = ValueConstant(u&quot;dsAttrTypeStandard:AppleAliasData&quot;)
+    # AlternateDatastoreLocation = ValueConstant(u&quot;dsAttrTypeStandard:AlternateDatastoreLocation&quot;)
+    # AuthenticationHint = ValueConstant(u&quot;dsAttrTypeStandard:AuthenticationHint&quot;)
+    # AttributeTypes = ValueConstant(u&quot;dsAttrTypeStandard:AttributeTypes&quot;)
+    # AuthorityRevocationList = ValueConstant(u&quot;dsAttrTypeStandard:AuthorityRevocationList&quot;)
+    # Birthday = ValueConstant(u&quot;dsAttrTypeStandard:Birthday&quot;)
+    # BootFile = ValueConstant(u&quot;dsAttrTypeStandard:BootFile&quot;)
+    # CACertificate = ValueConstant(u&quot;dsAttrTypeStandard:CACertificate&quot;)
+    # Capabilities = ValueConstant(u&quot;dsAttrTypeStandard:Capabilities&quot;)
+    # Capacity = ValueConstant(u&quot;dsAttrTypeStandard:Capacity&quot;)
+    # Category = ValueConstant(u&quot;dsAttrTypeStandard:Category&quot;)
+    # CertificateRevocationList = ValueConstant(u&quot;dsAttrTypeStandard:CertificateRevocationList&quot;)
+    # Change = ValueConstant(u&quot;dsAttrTypeStandard:Change&quot;)
+    # Comment = ValueConstant(u&quot;dsAttrTypeStandard:Comment&quot;)
+    # ContactGUID = ValueConstant(u&quot;dsAttrTypeStandard:ContactGUID&quot;)
+    # ContactPerson = ValueConstant(u&quot;dsAttrTypeStandard:ContactPerson&quot;)
+    # CreationTimestamp = ValueConstant(u&quot;dsAttrTypeStandard:CreationTimestamp&quot;)
+    # CrossCertificatePair = ValueConstant(u&quot;dsAttrTypeStandard:CrossCertificatePair&quot;)
+    # DataStamp = ValueConstant(u&quot;dsAttrTypeStandard:DataStamp&quot;)
+    # DNSDomain = ValueConstant(u&quot;dsAttrTypeStandard:DNSDomain&quot;)
+    # DNSNameServer = ValueConstant(u&quot;dsAttrTypeStandard:DNSNameServer&quot;)
+    # ENetAddress = ValueConstant(u&quot;dsAttrTypeStandard:ENetAddress&quot;)
+    # Expire = ValueConstant(u&quot;dsAttrTypeStandard:Expire&quot;)
+    # FirstName = ValueConstant(u&quot;dsAttrTypeStandard:FirstName&quot;)
+    # HomeDirectoryQuota = ValueConstant(u&quot;dsAttrTypeStandard:HomeDirectoryQuota&quot;)
+    # HomeDirectorySoftQuota = ValueConstant(u&quot;dsAttrTypeStandard:HomeDirectorySoftQuota&quot;)
+    # HomeLocOwner = ValueConstant(u&quot;dsAttrTypeStandard:HomeLocOwner&quot;)
+    # InetAlias = ValueConstant(u&quot;dsAttrTypeStandard:InetAlias&quot;)
+    # KDCConfigData = ValueConstant(u&quot;dsAttrTypeStandard:KDCConfigData&quot;)
+    # LastName = ValueConstant(u&quot;dsAttrTypeStandard:LastName&quot;)
+    # LDAPSearchBaseSuffix = ValueConstant(u&quot;dsAttrTypeStandard:LDAPSearchBaseSuffix&quot;)
+    # Location = ValueConstant(u&quot;dsAttrTypeStandard:Location&quot;)
+    # MapGUID = ValueConstant(u&quot;dsAttrTypeStandard:MapGUID&quot;)
+    # MCXFlags = ValueConstant(u&quot;dsAttrTypeStandard:MCXFlags&quot;)
+    # MCXSettings = ValueConstant(u&quot;dsAttrTypeStandard:MCXSettings&quot;)
+    # MailAttribute = ValueConstant(u&quot;dsAttrTypeStandard:MailAttribute&quot;)
+    # MetaAutomountMap = ValueConstant(u&quot;dsAttrTypeStandard:MetaAutomountMap&quot;)
+    # MiddleName = ValueConstant(u&quot;dsAttrTypeStandard:MiddleName&quot;)
+    # ModificationTimestamp = ValueConstant(u&quot;dsAttrTypeStandard:ModificationTimestamp&quot;)
+    # NeighborhoodAlias = ValueConstant(u&quot;dsAttrTypeStandard:NeighborhoodAlias&quot;)
+    # NeighborhoodType = ValueConstant(u&quot;dsAttrTypeStandard:NeighborhoodType&quot;)
+    # NetworkView = ValueConstant(u&quot;dsAttrTypeStandard:NetworkView&quot;)
+    # NFSHomeDirectory = ValueConstant(u&quot;dsAttrTypeStandard:NFSHomeDirectory&quot;)
+    # Note = ValueConstant(u&quot;dsAttrTypeStandard:Note&quot;)
+    # Owner = ValueConstant(u&quot;dsAttrTypeStandard:Owner&quot;)
+    # OwnerGUID = ValueConstant(u&quot;dsAttrTypeStandard:OwnerGUID&quot;)
+    # Password = ValueConstant(u&quot;dsAttrTypeStandard:Password&quot;)
+    # PasswordPlus = ValueConstant(u&quot;dsAttrTypeStandard:PasswordPlus&quot;)
+    # PasswordPolicyOptions = ValueConstant(u&quot;dsAttrTypeStandard:PasswordPolicyOptions&quot;)
+    # PasswordServerList = ValueConstant(u&quot;dsAttrTypeStandard:PasswordServerList&quot;)
+    # PasswordServerLocation = ValueConstant(u&quot;dsAttrTypeStandard:PasswordServerLocation&quot;)
+    # Picture = ValueConstant(u&quot;dsAttrTypeStandard:Picture&quot;)
+    # Port = ValueConstant(u&quot;dsAttrTypeStandard:Port&quot;)
+    # PresetUserIsAdmin = ValueConstant(u&quot;dsAttrTypeStandard:PresetUserIsAdmin&quot;)
+    # PrimaryComputerGUID = ValueConstant(u&quot;dsAttrTypeStandard:PrimaryComputerGUID&quot;)
+    # PrimaryComputerList = ValueConstant(u&quot;dsAttrTypeStandard:PrimaryComputerList&quot;)
+    # PrimaryGroupID = ValueConstant(u&quot;dsAttrTypeStandard:PrimaryGroupID&quot;)
+    # Printer1284DeviceID = ValueConstant(u&quot;dsAttrTypeStandard:Printer1284DeviceID&quot;)
+    # PrinterLPRHost = ValueConstant(u&quot;dsAttrTypeStandard:PrinterLPRHost&quot;)
+    # PrinterLPRQueue = ValueConstant(u&quot;dsAttrTypeStandard:PrinterLPRQueue&quot;)
+    # PrinterMakeAndModel = ValueConstant(u&quot;dsAttrTypeStandard:PrinterMakeAndModel&quot;)
+    # PrinterType = ValueConstant(u&quot;dsAttrTypeStandard:PrinterType&quot;)
+    # PrinterURI = ValueConstant(u&quot;dsAttrTypeStandard:PrinterURI&quot;)
+    # PrinterXRISupported = ValueConstant(u&quot;dsAttrTypeStandard:PrinterXRISupported&quot;)
+    # PrintServiceInfoText = ValueConstant(u&quot;dsAttrTypeStandard:PrintServiceInfoText&quot;)
+    # PrintServiceInfoXML = ValueConstant(u&quot;dsAttrTypeStandard:PrintServiceInfoXML&quot;)
+    # PrintServiceUserData = ValueConstant(u&quot;dsAttrTypeStandard:PrintServiceUserData&quot;)
+    # RealUserID = ValueConstant(u&quot;dsAttrTypeStandard:RealUserID&quot;)
+    # RelativeDNPrefix = ValueConstant(u&quot;dsAttrTypeStandard:RelativeDNPrefix&quot;)
+    # SMBAccountFlags = ValueConstant(u&quot;dsAttrTypeStandard:SMBAccountFlags&quot;)
+    # SMBGroupRID = ValueConstant(u&quot;dsAttrTypeStandard:SMBGroupRID&quot;)
+    # SMBHome = ValueConstant(u&quot;dsAttrTypeStandard:SMBHome&quot;)
+    # SMBHomeDrive = ValueConstant(u&quot;dsAttrTypeStandard:SMBHomeDrive&quot;)
+    # SMBKickoffTime = ValueConstant(u&quot;dsAttrTypeStandard:SMBKickoffTime&quot;)
+    # SMBLogoffTime = ValueConstant(u&quot;dsAttrTypeStandard:SMBLogoffTime&quot;)
+    # SMBLogonTime = ValueConstant(u&quot;dsAttrTypeStandard:SMBLogonTime&quot;)
+    # SMBPrimaryGroupSID = ValueConstant(u&quot;dsAttrTypeStandard:SMBPrimaryGroupSID&quot;)
+    # SMBPasswordLastSet = ValueConstant(u&quot;dsAttrTypeStandard:SMBPasswordLastSet&quot;)
+    # SMBProfilePath = ValueConstant(u&quot;dsAttrTypeStandard:SMBProfilePath&quot;)
+    # SMBRID = ValueConstant(u&quot;dsAttrTypeStandard:SMBRID&quot;)
+    # SMBScriptPath = ValueConstant(u&quot;dsAttrTypeStandard:SMBScriptPath&quot;)
+    # SMBSID = ValueConstant(u&quot;dsAttrTypeStandard:SMBSID&quot;)
+    # SMBUserWorkstations = ValueConstant(u&quot;dsAttrTypeStandard:SMBUserWorkstations&quot;)
+    # ServiceType = ValueConstant(u&quot;dsAttrTypeStandard:ServiceType&quot;)
+    # SetupAssistantAdvertising = ValueConstant(u&quot;dsAttrTypeStandard:SetupAssistantAdvertising&quot;)
+    # SetupAssistantAutoRegister = ValueConstant(u&quot;dsAttrTypeStandard:SetupAssistantAutoRegister&quot;)
+    # SetupAssistantLocation = ValueConstant(u&quot;dsAttrTypeStandard:SetupAssistantLocation&quot;)
+    # Occupation = ValueConstant(u&quot;dsAttrTypeStandard:Occupation&quot;)
+    # TimeToLive = ValueConstant(u&quot;dsAttrTypeStandard:TimeToLive&quot;)
+    # UniqueID = ValueConstant(u&quot;dsAttrTypeStandard:UniqueID&quot;)
+    # UserCertificate = ValueConstant(u&quot;dsAttrTypeStandard:UserCertificate&quot;)
+    # UserPKCS12Data = ValueConstant(u&quot;dsAttrTypeStandard:UserPKCS12Data&quot;)
+    # UserShell = ValueConstant(u&quot;dsAttrTypeStandard:UserShell&quot;)
+    # UserSMIMECertificate = ValueConstant(u&quot;dsAttrTypeStandard:UserSMIMECertificate&quot;)
+    # VFSDumpFreq = ValueConstant(u&quot;dsAttrTypeStandard:VFSDumpFreq&quot;)
+    # VFSLinkDir = ValueConstant(u&quot;dsAttrTypeStandard:VFSLinkDir&quot;)
+    # VFSPassNo = ValueConstant(u&quot;dsAttrTypeStandard:VFSPassNo&quot;)
+    # VFSType = ValueConstant(u&quot;dsAttrTypeStandard:VFSType&quot;)
+    # WeblogURI = ValueConstant(u&quot;dsAttrTypeStandard:WeblogURI&quot;)
+    # XMLPlist = ValueConstant(u&quot;dsAttrTypeStandard:XMLPlist&quot;)
+    # ProtocolNumber = ValueConstant(u&quot;dsAttrTypeStandard:ProtocolNumber&quot;)
+    # RPCNumber = ValueConstant(u&quot;dsAttrTypeStandard:RPCNumber&quot;)
+    # NetworkNumber = ValueConstant(u&quot;dsAttrTypeStandard:NetworkNumber&quot;)
+
+    # # Multi-value fields
+    # AccessControlEntry = ValueConstant(u&quot;dsAttrTypeStandard:AccessControlEntry&quot;)
+    # AddressLine1 = ValueConstant(u&quot;dsAttrTypeStandard:AddressLine1&quot;)
+    # AddressLine2 = ValueConstant(u&quot;dsAttrTypeStandard:AddressLine2&quot;)
+    # AddressLine3 = ValueConstant(u&quot;dsAttrTypeStandard:AddressLine3&quot;)
+    # AltSecurityIdentities = ValueConstant(u&quot;dsAttrTypeStandard:AltSecurityIdentities&quot;)
+    # AreaCode = ValueConstant(u&quot;dsAttrTypeStandard:AreaCode&quot;)
+    # AuthenticationAuthority = ValueConstant(u&quot;dsAttrTypeStandard:AuthenticationAuthority&quot;)
+    # AutomountInformation = ValueConstant(u&quot;dsAttrTypeStandard:AutomountInformation&quot;)
+    # BootParams = ValueConstant(u&quot;dsAttrTypeStandard:BootParams&quot;)
+    # Building = ValueConstant(u&quot;dsAttrTypeStandard:Building&quot;)
+    # CalendarPrincipalURI = ValueConstant(u&quot;dsAttrTypeStandard:CalendarPrincipalURI&quot;)
+    # City = ValueConstant(u&quot;dsAttrTypeStandard:City&quot;)
+    # Company = ValueConstant(u&quot;dsAttrTypeStandard:Company&quot;)
+    # ComputerAlias = ValueConstant(u&quot;dsAttrTypeStandard:ComputerAlias&quot;)
+    # Computers = ValueConstant(u&quot;dsAttrTypeStandard:Computers&quot;)
+    # Country = ValueConstant(u&quot;dsAttrTypeStandard:Country&quot;)
+    # Department = ValueConstant(u&quot;dsAttrTypeStandard:Department&quot;)
+    # DNSName = ValueConstant(u&quot;dsAttrTypeStandard:DNSName&quot;)
+    # EMailContacts = ValueConstant(u&quot;dsAttrTypeStandard:EMailContacts&quot;)
+    # FAXNumber = ValueConstant(u&quot;dsAttrTypeStandard:FAXNumber&quot;)
+    # Group = ValueConstant(u&quot;dsAttrTypeStandard:Group&quot;)
+    # GroupMembers = ValueConstant(u&quot;dsAttrTypeStandard:GroupMembers&quot;)
+    # GroupMembership = ValueConstant(u&quot;dsAttrTypeStandard:GroupMembership&quot;)
+    # GroupServices = ValueConstant(u&quot;dsAttrTypeStandard:GroupServices&quot;)
+    # HomePhoneNumber = ValueConstant(u&quot;dsAttrTypeStandard:HomePhoneNumber&quot;)
+    # HTML = ValueConstant(u&quot;dsAttrTypeStandard:HTML&quot;)
+    # HomeDirectory = ValueConstant(u&quot;dsAttrTypeStandard:HomeDirectory&quot;)
+    # IMHandle = ValueConstant(u&quot;dsAttrTypeStandard:IMHandle&quot;)
+    # IPAddress = ValueConstant(u&quot;dsAttrTypeStandard:IPAddress&quot;)
+    # IPAddressAndENetAddress = ValueConstant(u&quot;dsAttrTypeStandard:IPAddressAndENetAddress&quot;)
+    # IPv6Address = ValueConstant(u&quot;dsAttrTypeStandard:IPv6Address&quot;)
+    # JPEGPhoto = ValueConstant(u&quot;dsAttrTypeStandard:JPEGPhoto&quot;)
+    # JobTitle = ValueConstant(u&quot;dsAttrTypeStandard:JobTitle&quot;)
+    # KDCAuthKey = ValueConstant(u&quot;dsAttrTypeStandard:KDCAuthKey&quot;)
+    # Keywords = ValueConstant(u&quot;dsAttrTypeStandard:Keywords&quot;)
+    # LDAPReadReplicas = ValueConstant(u&quot;dsAttrTypeStandard:LDAPReadReplicas&quot;)
+    # LDAPWriteReplicas = ValueConstant(u&quot;dsAttrTypeStandard:LDAPWriteReplicas&quot;)
+    # MachineServes = ValueConstant(u&quot;dsAttrTypeStandard:MachineServes&quot;)
+    # MapCoordinates = ValueConstant(u&quot;dsAttrTypeStandard:MapCoordinates&quot;)
+    # MapURI = ValueConstant(u&quot;dsAttrTypeStandard:MapURI&quot;)
+    # MCXSettings = ValueConstant(u&quot;dsAttrTypeStandard:MCXSettings&quot;)
+    # MIME = ValueConstant(u&quot;dsAttrTypeStandard:MIME&quot;)
+    # Member = ValueConstant(u&quot;dsAttrTypeStandard:Member&quot;)
+    # MobileNumber = ValueConstant(u&quot;dsAttrTypeStandard:MobileNumber&quot;)
+    # NBPEntry = ValueConstant(u&quot;dsAttrTypeStandard:NBPEntry&quot;)
+    # NestedGroups = ValueConstant(u&quot;dsAttrTypeStandard:NestedGroups&quot;)
+    # NetGroups = ValueConstant(u&quot;dsAttrTypeStandard:NetGroups&quot;)
+    # NickName = ValueConstant(u&quot;dsAttrTypeStandard:NickName&quot;)
+    # NodePathXMLPlist = ValueConstant(u&quot;dsAttrTypeStandard:NodePathXMLPlist&quot;)
+    # OrganizationInfo = ValueConstant(u&quot;dsAttrTypeStandard:OrganizationInfo&quot;)
+    # OrganizationName = ValueConstant(u&quot;dsAttrTypeStandard:OrganizationName&quot;)
+    # PagerNumber = ValueConstant(u&quot;dsAttrTypeStandard:PagerNumber&quot;)
+    # PhoneContacts = ValueConstant(u&quot;dsAttrTypeStandard:PhoneContacts&quot;)
+    # PhoneNumber = ValueConstant(u&quot;dsAttrTypeStandard:PhoneNumber&quot;)
+    # PGPPublicKey = ValueConstant(u&quot;dsAttrTypeStandard:PGPPublicKey&quot;)
+    # PostalAddress = ValueConstant(u&quot;dsAttrTypeStandard:PostalAddress&quot;)
+    # PostalAddressContacts = ValueConstant(u&quot;dsAttrTypeStandard:PostalAddressContacts&quot;)
+    # PostalCode = ValueConstant(u&quot;dsAttrTypeStandard:PostalCode&quot;)
+    # NamePrefix = ValueConstant(u&quot;dsAttrTypeStandard:NamePrefix&quot;)
+    # Protocols = ValueConstant(u&quot;dsAttrTypeStandard:Protocols&quot;)
+    # Relationships = ValueConstant(u&quot;dsAttrTypeStandard:Relationships&quot;)
+    # ResourceInfo = ValueConstant(u&quot;dsAttrTypeStandard:ResourceInfo&quot;)
+    # ResourceType = ValueConstant(u&quot;dsAttrTypeStandard:ResourceType&quot;)
+    # ServicesLocator = ValueConstant(u&quot;dsAttrTypeStandard:ServicesLocator&quot;)
+    # State = ValueConstant(u&quot;dsAttrTypeStandard:State&quot;)
+    # Street = ValueConstant(u&quot;dsAttrTypeStandard:Street&quot;)
+    # NameSuffix = ValueConstant(u&quot;dsAttrTypeStandard:NameSuffix&quot;)
+    # URL = ValueConstant(u&quot;dsAttrTypeStandard:URL&quot;)
+    # URLForNSL = ValueConstant(u&quot;dsAttrTypeStandard:URLForNSL&quot;)
+    # VFSOpts = ValueConstant(u&quot;dsAttrTypeStandard:VFSOpts&quot;)
+
+    # # Other fields
+    # AdminStatus = ValueConstant(u&quot;dsAttrTypeStandard:AdminStatus&quot;)
+    # Alias = ValueConstant(u&quot;dsAttrTypeStandard:Alias&quot;)
+    # AuthCredential = ValueConstant(u&quot;dsAttrTypeStandard:AuthCredential&quot;)
+    # CopyTimestamp = ValueConstant(u&quot;dsAttrTypeStandard:CopyTimestamp&quot;)
+    # DateRecordCreated = ValueConstant(u&quot;dsAttrTypeStandard:DateRecordCreated&quot;)
+    # KerberosRealm = ValueConstant(u&quot;dsAttrTypeStandard:KerberosRealm&quot;)
+    # NTDomainComputerAccount = ValueConstant(u&quot;dsAttrTypeStandard:NTDomainComputerAccount&quot;)
+    # OriginalHomeDirectory = ValueConstant(u&quot;dsAttrTypeStandard:OriginalHomeDirectory&quot;)
+    # OriginalNFSHomeDirectory = ValueConstant(u&quot;dsAttrTypeStandard:OriginalNFSHomeDirectory&quot;)
+    # OriginalNodeName = ValueConstant(u&quot;dsAttrTypeStandard:OriginalNodeName&quot;)
+    # PrimaryNTDomain = ValueConstant(u&quot;dsAttrTypeStandard:PrimaryNTDomain&quot;)
+    # PwdAgingPolicy = ValueConstant(u&quot;dsAttrTypeStandard:PwdAgingPolicy&quot;)
+    # RARA = ValueConstant(u&quot;dsAttrTypeStandard:RARA&quot;)
+    # ReadOnlyNode = ValueConstant(u&quot;dsAttrTypeStandard:ReadOnlyNode&quot;)
+    # RecordImage = ValueConstant(u&quot;dsAttrTypeStandard:RecordImage&quot;)
+    # SMBGroupRID = ValueConstant(u&quot;dsAttrTypeStandard:SMBGroupRID&quot;)
+    # TimePackage = ValueConstant(u&quot;dsAttrTypeStandard:TimePackage&quot;)
+    # TotalSize = ValueConstant(u&quot;dsAttrTypeStandard:TotalSize&quot;)
+    # AllNames = ValueConstant(u&quot;dsAttrTypeStandard:AllNames&quot;)
+    # AuthMethod = ValueConstant(u&quot;dsAttrTypeStandard:AuthMethod&quot;)
+    # NodePath = ValueConstant(u&quot;dsAttrTypeStandard:NodePath&quot;)
+    # PlugInInfo = ValueConstant(u&quot;dsAttrTypeStandard:PlugInInfo&quot;)
+    # RecordAlias = ValueConstant(u&quot;dsAttrTypeStandard:RecordAlias&quot;)
+    # Scheama = ValueConstant(u&quot;dsAttrTypeStandard:Scheama&quot;)
+    # SetPasswdMethod = ValueConstant(u&quot;dsAttrTypeStandard:SetPasswdMethod&quot;)
+    # SubNodes = ValueConstant(u&quot;dsAttrTypeStandard:SubNodes&quot;)
+    # AppleMetaAliasSource = ValueConstant(u&quot;dsAttrTypeStandard:AppleMetaAliasSource&quot;)
+    # AppleMetaAliasTarget = ValueConstant(u&quot;dsAttrTypeStandard:AppleMetaAliasTarget&quot;)
+    # NetGroupTriplet = ValueConstant(u&quot;dsAttrTypeStandard:NetGroupTriplet&quot;)
+    # SearchPolicy = ValueConstant(u&quot;dsAttrTypeStandard:SearchPolicy&quot;)
+    # NSPSearchPath = ValueConstant(u&quot;dsAttrTypeStandard:NSPSearchPath&quot;)
+    # LSPSearchPath = ValueConstant(u&quot;dsAttrTypeStandard:LSPSearchPath&quot;)
+    # CSPSearchPath = ValueConstant(u&quot;dsAttrTypeStandard:CSPSearchPath&quot;)
+
+
+    @classmethod
+    def fromFieldName(cls, fieldName):
+        if not hasattr(cls, &quot;_attributesByFieldName&quot;):
+            cls._attributesByFieldName = dict((
+                (attribute.fieldName, attribute)
+                for attribute in cls.iterconstants()
+                if hasattr(attribute, &quot;fieldName&quot;)
+            ))
+
+        return cls._attributesByFieldName.get(fieldName, None)
+
+
+
+class ODMatchType(Values):
+    all = ValueConstant(0x2001)
+
+    equals = ValueConstant(0x2001)
+    equals.matchType = MatchType.equals
+
+    startsWith = ValueConstant(0x2002)
+    startsWith.matchType = MatchType.startsWith
+
+    endsWith = ValueConstant(0x2003)
+    endsWith.matchType = MatchType.endsWith
+
+    contains = ValueConstant(0x2004)
+    contains.matchType = MatchType.contains
+
+    lessThan = ValueConstant(0x2005)
+    lessThan.matchType = MatchType.lessThan
+
+    greaterThan = ValueConstant(0x2006)
+    greaterThan.matchType = MatchType.greaterThan
+
+    lessThanOrEqualTo = ValueConstant(0x2007)
+    lessThanOrEqualTo.matchType = MatchType.lessThanOrEqualTo
+
+    greaterThanOrEqualTo = ValueConstant(0x2008)
+    greaterThanOrEqualTo.matchType = MatchType.greaterThanOrEqualTo
+
+    compound = ValueConstant(0x210B)
+
+
+    @classmethod
+    def fromMatchType(cls, matchType):
+        if not hasattr(cls, &quot;_matchTypeByMatchType&quot;):
+            cls._matchTypeByMatchType = dict((
+                (matchType.matchType, matchType)
+                for matchType in cls.iterconstants()
+                if hasattr(matchType, &quot;matchType&quot;)
+            ))
+
+        return cls._matchTypeByMatchType.get(matchType, None)
</ins></span></pre></div>
<a id="twexttrunktwextwhoopendirectory_servicepy"></a>
<div class="modfile"><h4>Modified: twext/trunk/twext/who/opendirectory/_service.py (12164 => 12165)</h4>
<pre class="diff"><span>
<span class="info">--- twext/trunk/twext/who/opendirectory/_service.py        2013-12-20 03:20:07 UTC (rev 12164)
+++ twext/trunk/twext/who/opendirectory/_service.py        2013-12-20 03:54:46 UTC (rev 12165)
</span><span class="lines">@@ -23,9 +23,7 @@
</span><span class="cx"> 
</span><span class="cx"> from zope.interface import implements
</span><span class="cx"> 
</span><del>-from twisted.python.constants import (
-    Names, NamedConstant, Values, ValueConstant,
-)
</del><ins>+from twisted.python.constants import Names, NamedConstant
</ins><span class="cx"> from twisted.internet.defer import succeed, fail
</span><span class="cx"> from twisted.cred.checkers import ICredentialsChecker
</span><span class="cx"> from twisted.cred.credentials import (
</span><span class="lines">@@ -46,11 +44,12 @@
</span><span class="cx"> )
</span><span class="cx"> from ..expression import (
</span><span class="cx">     # CompoundExpression, Operand,
</span><del>-    MatchExpression, MatchType, MatchFlags,
</del><ins>+    MatchExpression, MatchFlags,
</ins><span class="cx"> )
</span><span class="cx"> from ..util import iterFlags, ConstantsContainer
</span><span class="cx"> 
</span><span class="cx"> from ._odframework import ODSession, ODNode, ODQuery
</span><ins>+from ._constants import ODSearchPath, ODRecordType, ODAttribute, ODMatchType
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -109,123 +108,6 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> #
</span><del>-# OD Constants
-#
-
-class ODSearchPath(Values):
-    local = ValueConstant(u&quot;/Local/Default&quot;)
-    search = ValueConstant(u&quot;/Search&quot;)
-
-
-
-class ODRecordType(Values):
-    user = ValueConstant(u&quot;dsRecTypeStandard:Users&quot;)
-    user.recordType = BaseRecordType.user
-
-    group = ValueConstant(u&quot;dsRecTypeStandard:Groups&quot;)
-    group.recordType = BaseRecordType.group
-
-
-    @classmethod
-    def fromRecordType(cls, recordType):
-        if not hasattr(cls, &quot;_recordTypeByRecordType&quot;):
-            cls._recordTypeByRecordType = dict((
-                (recordType.recordType, recordType)
-                for recordType in cls.iterconstants()
-            ))
-
-        return cls._recordTypeByRecordType.get(recordType, None)
-
-
-
-class ODAttribute(Values):
-    searchPath = ValueConstant(u&quot;dsAttrTypeStandard:SearchPath&quot;)
-    searchPath.fieldName = FieldName.searchPath
-
-    recordType = ValueConstant(u&quot;dsAttrTypeStandard:RecordType&quot;)
-    recordType.fieldName = BaseFieldName.recordType
-
-    # uid = ValueConstant(u&quot;dsAttrTypeStandard:GeneratedUID&quot;)
-    # uid.fieldName = BaseFieldName.uid
-
-    guid = ValueConstant(u&quot;dsAttrTypeStandard:GeneratedUID&quot;)
-    guid.fieldName = BaseFieldName.guid
-
-    shortName = ValueConstant(u&quot;dsAttrTypeStandard:RecordName&quot;)
-    shortName.fieldName = BaseFieldName.shortNames
-
-    fullName = ValueConstant(u&quot;dsAttrTypeStandard:RealName&quot;)
-    fullName.fieldName = BaseFieldName.fullNames
-
-    emailAddress = ValueConstant(u&quot;dsAttrTypeStandard:EMailAddress&quot;)
-    emailAddress.fieldName = BaseFieldName.emailAddresses
-
-    metaNodeLocation = ValueConstant(
-        u&quot;dsAttrTypeStandard:AppleMetaNodeLocation&quot;
-    )
-    metaNodeLocation.fieldName = FieldName.metaNodeLocation
-
-    metaRecordName = ValueConstant(u&quot;dsAttrTypeStandard:AppleMetaRecordName&quot;)
-    metaRecordName.fieldName = FieldName.metaRecordName
-
-
-    @classmethod
-    def fromFieldName(cls, fieldName):
-        if not hasattr(cls, &quot;_attributesByFieldName&quot;):
-            cls._attributesByFieldName = dict((
-                (attribute.fieldName, attribute)
-                for attribute in cls.iterconstants()
-                if hasattr(attribute, &quot;fieldName&quot;)
-            ))
-
-        return cls._attributesByFieldName.get(fieldName, None)
-
-
-
-class ODMatchType(Values):
-    all = ValueConstant(0x2001)
-
-    equals = ValueConstant(0x2001)
-    equals.matchType = MatchType.equals
-
-    startsWith = ValueConstant(0x2002)
-    startsWith.matchType = MatchType.startsWith
-
-    endsWith = ValueConstant(0x2003)
-    endsWith.matchType = MatchType.endsWith
-
-    contains = ValueConstant(0x2004)
-    contains.matchType = MatchType.contains
-
-    lessThan = ValueConstant(0x2005)
-    lessThan.matchType = MatchType.lessThan
-
-    greaterThan = ValueConstant(0x2006)
-    greaterThan.matchType = MatchType.greaterThan
-
-    lessThanOrEqualTo = ValueConstant(0x2007)
-    lessThanOrEqualTo.matchType = MatchType.lessThanOrEqualTo
-
-    greaterThanOrEqualTo = ValueConstant(0x2008)
-    greaterThanOrEqualTo.matchType = MatchType.greaterThanOrEqualTo
-
-    compound = ValueConstant(0x210B)
-
-
-    @classmethod
-    def fromMatchType(cls, matchType):
-        if not hasattr(cls, &quot;_matchTypeByMatchType&quot;):
-            cls._matchTypeByMatchType = dict((
-                (matchType.matchType, matchType)
-                for matchType in cls.iterconstants()
-                if hasattr(matchType, &quot;matchType&quot;)
-            ))
-
-        return cls._matchTypeByMatchType.get(matchType, None)
-
-
-
-#
</del><span class="cx"> # Directory Service
</span><span class="cx"> #
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>