def post_profile(self, request_dict): post_profile = request_dict['profile'] profile_id = request_dict['params']['profileId'] # get / create profile p, created = models.ActivityProfile.objects.get_or_create(activityId=request_dict['params']['activityId'], profileId=request_dict['params']['profileId']) if created: p.json_profile = post_profile p.content_type = request_dict['headers']['CONTENT_TYPE'] p.etag = etag.create_tag(post_profile) #Set updated if 'headers' in request_dict and ('updated' in request_dict['headers'] and request_dict['headers']['updated']): p.updated = request_dict['headers']['updated'] else: p.updated = datetime.datetime.utcnow().replace(tzinfo=utc) else: etag.check_preconditions(request_dict,p, required=True) orig_prof = json.loads(p.json_profile) post_profile = json.loads(post_profile) if not isinstance(post_profile, dict): raise ParamError("The document was not able to be parsed into a JSON object.") else: # json.dumps changes the format of the string rep of the dict merged = json.dumps(dict(orig_prof.items() + post_profile.items())) p.json_profile = merged p.etag = etag.create_tag(merged) p.updated = datetime.datetime.utcnow().replace(tzinfo=utc) p.save()
def post(self): agent = self.__get_agent() post_state = self.state if self.registration: p,created = models.ActivityState.objects.get_or_create(state_id=self.stateId,agent=agent,activity_id=self.activity_id,registration_id=self.registration) else: p,created = models.ActivityState.objects.get_or_create(state_id=self.stateId,agent=agent,activity_id=self.activity_id) if created: p.json_state = post_state p.content_type = self.content_type p.etag = etag.create_tag(post_state) if self.updated: p.updated = self.updated else: orig_state = json.loads(p.json_state) post_state = json.loads(post_state) if not isinstance(post_state, dict): raise ParamError("The document was not able to be parsed into a JSON object.") else: merged = json.dumps(dict(orig_state.items() + post_state.items())) p.json_state = merged p.etag = etag.create_tag(merged) p.updated = datetime.datetime.utcnow().replace(tzinfo=utc) p.save()
def put_profile(self, request_dict): profile_id = request_dict['params']['profileId'] p,created = AgentProfile.objects.get_or_create(profileId=profile_id,agent=self.Agent) if "application/json" not in request_dict['headers']['CONTENT_TYPE']: try: profile = ContentFile(request_dict['profile'].read()) except: try: profile = ContentFile(request_dict['profile']) except: profile = ContentFile(str(request_dict['profile'])) if not created: etag.check_preconditions(request_dict,p, required=True) try: p.profile.delete() except OSError: # p was probably json before.. gotta clear that field p.json_profile = {} self.save_profile(p, created, profile, request_dict) else: if not created: etag.check_preconditions(request_dict, p, required=True) the_profile = request_dict['profile'] p.json_profile = the_profile p.content_type = request_dict['headers']['CONTENT_TYPE'] p.etag = etag.create_tag(the_profile) if 'headers' in request_dict and ('updated' in request_dict['headers'] and request_dict['headers']['updated']): p.updated = request_dict['headers']['updated'] else: p.updated = datetime.datetime.utcnow().replace(tzinfo=utc) p.save()
def put(self): agent = self.__get_agent() if self.registration: p,created = models.ActivityState.objects.get_or_create(state_id=self.stateId,agent=agent,activity_id=self.activity_id,registration_id=self.registration) else: p,created = models.ActivityState.objects.get_or_create(state_id=self.stateId,agent=agent,activity_id=self.activity_id) if "application/json" not in self.content_type: try: state = ContentFile(self.state.read()) except: try: state = ContentFile(self.state) except: state = ContentFile(str(self.state)) if not created: etag.check_preconditions(self.req_dict,p) p.state.delete() # remove old state file p.content_type = self.content_type self.save_state(p, created, state) else: if not created: etag.check_preconditions(self.req_dict, p) the_state = self.state p.json_state = the_state p.content_type = self.content_type p.etag = etag.create_tag(the_state) if self.updated: p.updated = self.updated else: p.updated = datetime.datetime.utcnow().replace(tzinfo=utc) p.save()
def save_profile(self, p, created, profile, request_dict): p.content_type = request_dict['headers']['CONTENT_TYPE'] p.etag = etag.create_tag(profile.read()) if 'headers' in request_dict and ('updated' in request_dict['headers'] and request_dict['headers']['updated']): p.updated = request_dict['headers']['updated'] else: p.updated = datetime.datetime.utcnow().replace(tzinfo=utc) profile.seek(0) if created: p.save() fn = "%s_%s" % (p.agent_id,request_dict.get('filename', p.id)) p.profile.save(fn, profile)
def save_state(self, p, created, state): p.content_type = self.content_type p.etag = etag.create_tag(state.read()) if self.updated: p.updated = self.updated else: p.updated = datetime.datetime.utcnow().replace(tzinfo=utc) state.seek(0) if created: p.save() fn = "%s_%s_%s" % (p.agent_id,p.activity_id, self.req_dict.get('filename', p.id)) p.state.save(fn, state)
def put_profile(self, request_dict): #Parse out profile from request_dict profile_id = request_dict['params']['profileId'] #Get the profile, or if not already created, create one p,created = models.ActivityProfile.objects.get_or_create(profileId=profile_id,activityId=request_dict['params']['activityId']) if "application/json" not in request_dict['headers']['CONTENT_TYPE']: try: profile = ContentFile(request_dict['profile'].read()) except: try: profile = ContentFile(request_dict['profile']) except: profile = ContentFile(str(request_dict['profile'])) if not created: #If it already exists delete it etag.check_preconditions(request_dict,p, required=True) if p.profile: try: p.profile.delete() except OSError: # probably was json before p.json_profile = {} self.save_profile(p, created, profile, request_dict) else: if not created: etag.check_preconditions(request_dict, p, required=True) the_profile = request_dict['profile'] p.json_profile = the_profile p.content_type = request_dict['headers']['CONTENT_TYPE'] p.etag = etag.create_tag(the_profile) #Set updated if 'headers' in request_dict and ('updated' in request_dict['headers'] and request_dict['headers']['updated']): p.updated = request_dict['headers']['updated'] else: p.updated = datetime.datetime.utcnow().replace(tzinfo=utc) p.save()
def save_profile(self, p, created, profile, request_dict): #Save profile content type based on incoming content type header and create etag p.content_type = request_dict['headers']['CONTENT_TYPE'] p.etag = etag.create_tag(profile.read()) #Set updated if 'headers' in request_dict and ('updated' in request_dict['headers'] and request_dict['headers']['updated']): p.updated = request_dict['headers']['updated'] else: p.updated = datetime.datetime.utcnow().replace(tzinfo=utc) #Go to beginning of file profile.seek(0) #If it didn't exist, save it if created: p.save() #Set filename with the activityID and profileID and save fn = "%s_%s" % (p.activityId,request_dict.get('filename', p.id)) p.profile.save(fn, profile)