﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
86	add Constraint for Copyables	Brian Warner		"As Marco Giusti noted on the twisted-dev mailing list, we don't currently have a Constraint that means ""I expect a Copyable of type X"". There's the attrdict constraint, but that's for use by a !RemoteCopy to describe which attributes are expected to be provided: it's one level lower than what we want.

The desired syntax for this is just to use the Copyable class inside the constraint:

{{{
class Label(Copyable):
  typeToCopy = ""label.example.com""
  def __init__(self, text):
    self.text = text

class CopiedLabel(RemoteCopy):
  copytype = ""label.example.com""
  stateSchema = AttributeDictConstraint( (""text"", str) )

class IFoo(RemoteInterface):
  def getLabel():
    return Label
}}}

To do this, we need:

 * create a !CopyableConstraint class, inheriting from constraint.Constraint,
   and created with a Copyable subclass (or maybe a !RemoteCopy subclass)
  * implement !CopyableConstraint.checkObject(), somehow. If inbound=False
    then it should probably assert an isinstance(obj, myCopyableClass).
    If inbound=True, it should probably check against myRemoteCopyClass
    instead. checkObject() is used outbound before serialization, and
    inbound post-deserialization; i.e. it examines fully-formed objects
    rather than individual tokens.
 * add code to schema.adapt_obj_to_iconstraint() (or register an adapter)
   that knows how to create a !CopyableConstraint from a Copyable or
   !RemoteCopy class.
"	defect	new	major	undecided	schemas	0.3.0			
