Opened 16 years ago

#86 new defect

add Constraint for Copyables

Reported by: Brian Warner Owned by:
Priority: major Milestone: undecided
Component: schemas Version: 0.3.0
Keywords: Cc:

Description

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.

Change History (0)

Note: See TracTickets for help on using tickets.