On Jun 2, 2005, at 10:31 AM, Phillip J. Eby wrote:
��Here's my proposed schema API for this, then:

�� � class Contact(ContentItem):

� � � � contactName = schema.One(ContactName,
� � � � � � inverse = ContactName.contact,
� � � � � � initialValue=None
� � � � )

� � � � emailAddress = schema.One(schema.String,
� � � � � � displayName="Email Address",
� � � � � � initialValue=""
� � � � )

� � � � # ... more attributes here

� � � � schema.addClouds(
� � � � � � sharing = schema.Cloud(
� � � � � � � � byRef = [emailAddress], byCloud = [contactName]
� � � � � � )
� � � � )

In other words, you include a 'schema.addClouds()' call in the body of the class for a kind, and use keyword arguments to define individual clouds under their respective aliases.The keyword arguments to the Cloud constructor define the inclusion policies, and each keyword takes a list of endpoint objects that follow that policy.As a convenient shorthand, using an attribute object in place of an endpoint creates an endpoint with that name, for that attribute, since this is the most common kind of endpoint definition.

I'm thinking that the 'byCloud' keyword should set the cloudAlias to None, but if we need to be explicit about that later, we could add the cloud alias to the keyword.For example:

� � � � schema.addClouds(
� � � � � � sharing = schema.Cloud(
� � � � � � � � byRef = [emailAddress], byCloud_sharing = [contactName]
� � � � � � )
� � � � )

This would set the cloudAlias for the contactName endpoint to "sharing".A similar technique could also be used for byMethod, e.g. "byMethod_someMethod=[someAttr]", if it turns out we need that.

Initially, however, I would just do the basic keywords with no dynamic cloudAlias or method names.

Anybody have any comments?

I do have a situation in which I want to override an endpoint that normally would get inherited; ContentItem's sharing cloud has a "displayName" endpoint -- however for ItemCollection (which subkinds ContentItem) I don't want to have a displayName endpoint.� My fix for this was to define a displayName endpoint on ItemCollection's sharing cloud but set that endpoint's includePolicy to "none".� Does that work with your syntax?
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev

Reply via email to