| #summary The Person entity model |
| #labels Phase-Design,Contents-Draft,Design-Model |
| |
| The Person entity stores a single [UserRoles#Person Person role] in the |
| [http://code.google.com/appengine/docs/datastore/ Datastore]. The Person |
| [http://code.google.com/appengine/docs/datastore/entitiesandmodels.html#The_Model_Interface Model] |
| contains a number of basic |
| [http://code.google.com/appengine/docs/datastore/propertyclass.html |
| Properties] common to all [UserRoles user roles]: |
| |
| _*Eventually, this topic should be populated by the output of*_ `pydoc`. |
| |
| {{{ |
| class Person(db.Model): |
| """Common data fields for all Roles. |
| |
| A Person can only participate in a single Program. To avoid duplication of |
| data entry, facilities will be available for selecting an existing Person |
| associated with a particular User to be duplicated for participation in a |
| new Program. |
| |
| Some details of a Person are considered "public" information, and nearly |
| all of these are optional (except for givenname, surname, and email). |
| Other details of a Person are kept "private" and are only provided to |
| other Persons in roles that "need to know" this information. How these |
| fields are revealed is usually covered by Program terms of service. |
| |
| A Person entity participates in a number of relationships: |
| |
| user) a required many:1 relationship that ties (possibly multiple |
| entities of) Person details to a unique User. A Person cannot exist |
| unassociated from a login identity and credentials. The |
| back-reference in the User model is a Query named 'persons'. |
| |
| author) a 1:1 relationship of Person details for a specific Author. |
| This relation is implemented as the 'author' back-reference Query of |
| the Author model 'person' reference. |
| |
| docs) a 1:many relationship of documents (Documentation) associated |
| with the Person by Administrators. This relation is implemented as |
| the 'docs' back-reference Query of the Documentation model 'person' |
| reference. |
| |
| givenname, surname: required db.StringProperty fields storing the |
| parts of the Person's name corresponding to the field names; |
| displayed publicly. |
| |
| nickname: optional db.StringProperty storing a nickname; displayed |
| publicly. |
| |
| email: required db.EmailProperty used as the "public" contact mechanism |
| for the Person (as opposed to the user.id email address which is kept |
| secret). |
| |
| im: db.IMProperty storing Instant Messaging network contact information; |
| displayed publicly. |
| |
| homepage: db.LinkProperty storing a home page URL; displayed publicly. |
| |
| blog: db.LinkProperty storing a blog URL; displayed publicly. |
| |
| photo: db.LinkProperty storing a URL to an image, expected to be a |
| personal photo (or cartoon avatar, perhaps); displayed publicly. |
| |
| location: db.GeoPtProperty storing the latitude and longitude provided |
| by the Person; displayed publicly. |
| |
| residence: required db.PostalAddressProperty containing residence |
| address; kept private. |
| |
| shipping: optional db.PostalAddressProperty containg a separate shipping |
| address; kept private. |
| |
| phone: required db.PhoneNumberProperty containing a phone number that |
| will be supplied to shippers; kept private. |
| |
| birthdate: required db.DateProperty containing the Person's birthdate |
| (required for determining Program participation eligibility); kept |
| private. |
| |
| tshirt_size: optional db.StringProperty indicating choice of t-shirt |
| size, from XXS to XXXL; kept private. |
| |
| tshirt_gender: optional db.StringProperty indicating choice of male or |
| female t-shirt fit; kept private. |
| """ |
| user = db.ReferenceProperty(reference_class=User, required=True, |
| collection_name="persons") |
| |
| # (public) name |
| givenname = db.StringProperty(required=True) # first name |
| surname = db.StringProperty(required=True) # last name |
| nickname = db.StringProperty() |
| |
| # (public) contact information |
| email = db.EmailProperty(required=True) |
| im = db.IMProperty() # contains protocol (or URL) and handle |
| homepage = db.LinkProperty() |
| blog = db.LinkProperty() |
| photo = db.LinkProperty() |
| location = db.GeoPtProperty() |
| |
| # (private) contact information |
| residence = db.PostalAddressProperty(required=True) |
| shipping = db.PostalAddressProperty() |
| phone = db.PhoneNumberProperty(required=True) |
| |
| # (private) personal information |
| birthdate = db.DateProperty(required=True) |
| tshirt_size = db.StringProperty( |
| choices=set("XXS", "XS", "S", "M", "L", "XL", "XXL", "XXXL")) |
| tshirt_gender = db.StringProperty(choices=set("male", "female")) |
| }}} |
| |
| ---- |
| _Copyright 2008 Google Inc._ |
| _This work is licensed under a_ |
| [http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html Creative Commons Attribution 2.5 License]. |
| [http://creativecommons.org/licenses/by/2.5/ http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png] |