def create(cls, userJson): """ Create a new user document. Also creates the three databases (user/public, user/private, user/inbox) to allow for peer-to-peer distribution. Parameters: userJson - a dictionary of fields and their values. """ from server.models.shift import Shift from server.models.message import Message server = core.sharedServer() db = core.connect() if userJson.get("passwordVerify"): del userJson["passwordVerify"] if userJson.get("password"): userJson['password'] = utils.md5hash(userJson['password']) if userJson.get("email"): hashedEmail = utils.md5hash(userJson["email"]) userJson["gravatar"] = "http://www.gravatar.com/avatar/%s?s=32" % hashedEmail userJson["gravatarLarge"] = "http://www.gravatar.com/avatar/%s?s=60" % hashedEmail newUser = SSUser(**utils.clean(userJson)) newUser.store(db) # user's public shifts, will be replicated to shiftspace and user/feed server.create(SSUser.publicDb(newUser.id)) # all of the user's shifts as well as subscribed content server.create(SSUser.privateDb(newUser.id)) # all of the user's messages server.create(SSUser.messagesDb(newUser.id)) # sync views Message.by_created.sync(server[SSUser.messagesDb(newUser.id)]) return newUser
def hasThread(self): from server.models.comment import Comment try: server = core.sharedServer() thread = server[Comment.db(self.id)] return thread != None except Exception: return False
def delete(self): from server.models.permission import Permission server = core.sharedServer() # delete the metadata db = core.connect() del db[self.id] # delete the group database del server[Group.db(self.id)] # delete all permissions [perm.delete() for perm in core.objects(Permission.by_group(core.connect(), key=self.id))]
def create(cls, userId, shiftId, text, subscribe=False): from server.models.ssuser import SSUser from server.models.shift import Shift from server.models.message import Message # first try the public feed theShift = Shift.load(core.connect("shiftspace/shared"), shiftId) shiftAuthor = SSUser.load(core.connect(), theShift.createdBy) theUser = SSUser.load(core.connect(), userId) server = core.sharedServer() # create the comment db if necessary dbexists = True if not theShift.hasThread(): server.create(Comment.db(shiftId)) dbexists = False # get the db db = core.connect(Comment.db(shiftId)) # if db just created, sync the views and subscribe shift author if not dbexists: Comment.by_created.sync(db) Comment.all_subscribed.sync(db) shiftAuthor.subscribe(theShift) # subscribe the user making the comment if not theUser.isSubscribed(theShift) and subscribe: theUser.subscribe(theShift) # create comment and comment stub json = { "createdBy": userId, "shiftId": shiftId, "shiftAuthor": theShift.createdBy, "text": text, } newComment = Comment(**utils.clean(json)) newComment.store(db) subscribers = theShift.subscribers() # make a private copy # TODO: need to think about the implications of a private copy here - David newComment.copyTo(SSUser.privateDb(theUser.id)) # send each subscriber a message if len(subscribers) > 0: # TODO: needs to be optimized with a fast join - David for subscriber in subscribers: if subscriber != userId: astr = ((subscriber == theShift.createdBy) and "your") or ("%s's" % shiftAuthor.userName) json = { "fromId": userId, "toId": subscriber, "title": "%s just commented on %s shift!" % (theUser.userName, astr), "text": "%s just commented on %s shift!" % (theUser.userName, astr), "meta": "comment" } Message.create(**utils.clean(json)) # TODO: don't replicate if peer - David 11/21/09 core.replicate(Comment.db(shiftId), "shiftspace/shared") return newComment
def delete(self): if self.id == "shiftspace": return server = core.sharedServer() # delete the user's dbs (won't work with old style users) try: del server[SSUser.publicDb(self.id)] del server[SSUser.privateDb(self.id)] del server[SSUser.inboxDb(self.id)] del server[SSUser.feedDb(self.id)] del server[SSUser.messagesDb(self.id)] except Exception: pass # delete the user doc db = core.connect() del db[self.id]
def create(cls, groupJson): from server.models.permission import Permission from server.models.ssuser import SSUser userId = groupJson["createdBy"] # create the group metadata newGroup = Group(**utils.clean(groupJson)) newGroup.source.server = core.serverName() newGroup.source.database = Group.db(newGroup.id) # save the group metadata to the master db newGroup.store(core.connect()) # create the root permission for this group Permission.create(userId, newGroup.id, userId, level=4) # create the group db server = core.sharedServer() server.create(Group.db(newGroup.id)) # copy the group metadata to the db newGroup.copyTo(Group.db(newGroup.id)) return newGroup
def create(cls, userJson): """ Create a new user document. Also creates the three databases (user/public, user/private, user/inbox) to allow for peer-to-peer distribution. Parameters: userJson - a dictionary of fields and their values. """ from server.models.shift import Shift from server.models.message import Message server = core.sharedServer() db = core.connect() if userJson.get("passwordVerify"): del userJson["passwordVerify"] if userJson.get("password"): userJson['password'] = utils.md5hash(userJson['password']) if userJson.get("email"): hashedEmail = utils.md5hash(userJson["email"]) userJson[ "gravatar"] = "http://www.gravatar.com/avatar/%s?s=32" % hashedEmail userJson[ "gravatarLarge"] = "http://www.gravatar.com/avatar/%s?s=60" % hashedEmail newUser = SSUser(**utils.clean(userJson)) newUser.store(db) # user's public shifts, will be replicated to shiftspace and user/feed server.create(SSUser.publicDb(newUser.id)) # all of the user's shifts as well as subscribed content server.create(SSUser.privateDb(newUser.id)) # all of the user's messages server.create(SSUser.messagesDb(newUser.id)) # sync views Message.by_created.sync(server[SSUser.messagesDb(newUser.id)]) return newUser
def deleteThread(self): from server.models.comment import Comment server = core.sharedServer() # TODO - use bulk API to delete all comment stubs - David del server[Comment.db(self.id)]