At 02:01 PM 6/1/2005 -0700, Morgen Sagen wrote:
On May 31, 2005, at 8:27 PM, Phillip J. Eby wrote:
First, I noticed that in all cases where cloudAlias is used, it is
used on *all* of the "byCloud" endpoints in that cloud, and it
invariably matches the alias of that cloud. In other words, clouds
aliased as the "default" cloud always use a cloudAlias
value="default", if they hav any cloudAlias elements. My question:
is there ever a time that you would need to specify a *different*
cloud name?
I can't think of a situation when traversing and endpoint by cloud
should switch to a different cloud. So not being able to specify a
cloudAlias for an endpoint seems reasonable.
Second, I found that of a total of 32 endpoints defined as
"byCloud", 9 of these did not have a cloudAlias element specified.
Are these defaulting to the same meaning as an explicit cloudAlias
with the same name as the alias of the defining cloud, or does it
mean something else altogether?
I believe leaving the cloudAliases out of the endpoint definitions
means the various methods such as Cloud.getItems( ) will use the
cloudAlias that is passed to the method:
http://o11n.org/docs/current/api/repository.schema.Cloud.Cloud-
class.html#getItems
...which I think we always pass. As a test I removed all the
cloudAlias values on every byCloud endpoint and things still worked.
Unless I am missing something, I think we can get by without having
cloudAliases defined on byCloud endpoints, since when it comes time
to actually use them, we pass in a cloudAlias (such as "default", or
"sharing") anyway.
Thanks Morgen. 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?
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev