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 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 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 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()