def getTagGroup(self, tagGroupKey, isKey=True): metadata = WebServiceObject() try: if isKey: group = TagGroup.objects.get(pk__exact=tagGroupKey) else: group = tagGroupKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY # initialize tagging APIs tagGroupAPI = TagGroupAPI(self.user, self.fields) tagAPI = TagAPI(user=self.user, unlimited=True) geneLinkAPI = GeneLinkAPI(user=self.user, unlimited=True) group = tagGroupAPI.getTagGroup(group, isKey=False).getObject() tags = tagAPI.getTagsByTagGroup(group['id']).getObject() for tag in tags: geneLinks = geneLinkAPI.getGeneLinksByTag(tag['id']).getObject() tag['geneLinks'] = geneLinks group['tags'] = tags metadata.setObject(group) return metadata
def deleteGeneLink(self, geneLinkKey, isKey=True): metadata = WebServiceObject() try: if (isKey): geneLink = GeneLink.objects.get(pk__exact=geneLinkKey) else: geneLink = geneLinkKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_GENE_LINK_KEY except Exception: raise Errors.INTERNAL_ERROR if not geneLink.writePermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) metadata.put('id', geneLink.pk) metadata.put('tagId', geneLink.tag.pk) metadata.put( 'feature', LimitDict( self.fields, { 'uniqueName': geneLink.feature.uniquename, 'name': geneLink.feature.name, 'organismId': geneLink.feature.organism.organism_id })) try: geneLink.delete() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) return metadata
def deleteGeneLink(self, geneLinkKey, isKey=True): metadata = WebServiceObject() try: if (isKey): geneLink = GeneLink.objects.get(pk__exact=geneLinkKey) else: geneLink = geneLinkKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_GENE_LINK_KEY except Exception: raise Errors.INTERNAL_ERROR if not geneLink.writePermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) metadata.put('id', geneLink.pk) metadata.put('tagId', geneLink.tag.pk) metadata.put('feature', LimitDict(self.fields, { 'uniqueName' : geneLink.feature.uniquename, 'name' : geneLink.feature.name, 'organismId' : geneLink.feature.organism.organism_id }) ) try: geneLink.delete() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) return metadata
def getImageMetadataByOrganism(self, organismId): metadata = WebServiceObject() if self.user and self.user.is_authenticated(): allowedImages = Picture.objects.filter(isPrivate=False) | Picture.objects.filter(user__exact=self.user, isPrivate=True) else: allowedImages = Picture.objects.filter(isPrivate=False) defTags = [] if self.unlimited: for orgId in organismId: defTags.append(PictureDefinitionTag.objects.filter(organism__exact=orgId, picture__in=allowedImages)[self.offset:]) else: for orgId in organismId: defTags.append(PictureDefinitionTag.objects.filter(organism__exact=orgId, picture__in=allowedImages)[self.offset:self.offset + self.limit]) closedSet = {} imageMetadata = {} imageFields = set(['id' , 'url', 'uploadDate', 'description', 'uploadedBy']) if self.fields: newImageFields = imageFields.intersection(set(self.fields)) if newImageFields: imageFields = newImageFields imageMetadataAPI = ImageMetadataAPI(self.user, imageFields) for orgTags in defTags: for tag in orgTags: if not closedSet.has_key(tag.picture.pk): closedSet[tag.picture.pk] = imageMetadataAPI.getImageMetadata(tag.picture, False).getObject() if imageMetadata.has_key(tag.organism.pk): imageMetadata[tag.organism.pk]['images'].append(closedSet[tag.picture.pk]) else: imageMetadata[tag.organism.pk] = { 'images' : [closedSet[tag.picture.pk]], 'organism' : { 'id' : tag.organism.pk, 'commonName' : tag.organism.common_name, 'abbreviation' : tag.organism.abbreviation, 'genus' : tag.organism.genus, 'species' : tag.organism.species } } if len(imageMetadata) != len(organismId): for orgId in organismId: if not imageMetadata.has_key(orgId): imageMetadata[orgId] = [] metadata.setObject(LimitDict(self.fields, imageMetadata)) return metadata
def getImageMetadata(request): renderObj = WebServiceObject() if request.GET.has_key('id'): # the key for lookup and the image it is attached to imageKey = request.GET['id'] fields = Util.getDelimitedList(request.GET, 'fields') getAPI = GetAPI(request.user, fields) try: renderObj = getAPI.getImageMetadata(imageKey) except Errors.WebServiceException as e: renderObj.setError(e) else: renderObj.setError(Errors.NO_IMAGE_KEY) return renderObj
def getImageTags(request): renderObj = WebServiceObject() # read in crucial parameters tagGroupKey = request.GET.get('tagGroupId', None) imageKey = request.GET.get('imageId', None) # read in optional parameters and initialize the API offset = Util.getInt(request.GET, 'offset', 0) limit = Util.getInt(request.GET, 'limit', 10) unlimited = request.GET.get('unlimited', False) fields = Util.getDelimitedList(request.GET, 'fields') getAPI = GetAPI(limit, offset, request.user, fields, unlimited) if tagGroupKey: # the key for lookup and the image it is attached to renderObj = getAPI.getTagsByTagGroup(tagGroupKey, isKey=True) elif imageKey: # the key for lookup and the image it is attached to renderObj = getAPI.getTagsByImage(imageKey, isKey=True) else: # get all the tags renderObj = getAPI.getTags() return renderObj
def doProcessRender(self, request): renderObj = WebServiceObject() try: if (request.method == "GET"): renderObj = API.getOrganisms(request) else: renderObj.setError(Errors.INVALID_METHOD.setCustom(request.method)) except Errors.WebServiceException as e: renderObj.setError(e) self.setJsonObject(renderObj.getObject()) self.setStatus(renderObj.getCode())
def doProcessRender(self, request): renderObj = WebServiceObject() try: if request.method == "GET": renderObj = API.getGeneLink(request) elif request.method == "POST": renderObj = API.createGeneLink(request) elif request.method == "DELETE": renderObj = API.deleteGeneLink(request) else: renderObj.setError( Errors.INVALID_METHOD.setCustom(request.method)) except Errors.WebServiceException as e: renderObj.setError(e) self.setJsonObject(renderObj.getObject()) self.setStatus(renderObj.getCode())
def doProcessRender(self, request): renderObj = WebServiceObject() try: if request.method == "GET": renderObj = API.getGeneLink(request) elif request.method == "POST": renderObj = API.createGeneLink(request) elif request.method == "DELETE": renderObj = API.deleteGeneLink(request) else: renderObj.setError(Errors.INVALID_METHOD.setCustom(request.method)) except Errors.WebServiceException as e: renderObj.setError(e) self.setJsonObject(renderObj.getObject()) self.setStatus(renderObj.getCode())
def createImageMetadata(request): renderObj = WebServiceObject() # these should overwrite current metadata image = request.FILES.get('image', None) description = request.POST.get('description', None) altText = request.POST.get('altText', None) organisms = Util.getDelimitedList(request.POST, 'organisms') fields = Util.getDelimitedList(request.POST, 'fields') if image: postAPI = PostAPI(request.user, fields) renderObj = postAPI.createImageMetadata(image, description, altText, organisms) else: raise Errors.MISSING_PARAMETER.setCustom('image') return renderObj
def doProcessRender(self, request): renderObj = WebServiceObject() try: if request.method == "GET": renderObj = API.getQtl(request) elif request.method == "POST": print 'test at doProcessRender()' renderObj = API.addQtl(request) #elif request.method == "PUT": # renderObj = API.updateQtl(request) #elif request.method == "DELETE": # renderObj = API.deleteQtl(request) else: renderObj.setError( Errors.INVALID_METHOD.setCustom(request.method)) except Errors.WebServiceException as e: renderObj.setError(e) self.setJsonObject(renderObj.getObject()) self.setStatus(renderObj.getCode())
def getImageMetadata(request): renderObj = WebServiceObject() if request.GET.has_key('id'): # the key for lookup and the image it is attached to imageKey = request.GET['id'] fields = Util.getDelimitedList(request.GET, 'fields') getAPI = GetAPI(request.user, fields) try: renderObj = getAPI.getImageMetadata(imageKey) except Errors.WebServiceException as e: renderObj.setError(e) else: renderObj.setError(Errors.NO_IMAGE_KEY) return renderObj
def editImageMetadata(request): renderObj = WebServiceObject() # required parameters imageKey = request.PUT.get('id', None) if not imageKey: raise Errors.NO_IMAGE_KEY # these should overwrite current metadata description = request.PUT.get('description', None) altText = request.POST.get('altText', None) organisms = Util.getDelimitedList(request.PUT, 'organisms') fields = Util.getDelimitedList(request.PUT, 'fields') if description or organisms: putAPI = PutAPI(request.user, fields) renderObj = putAPI.editImageMetadata(imageKey, description, altText, organisms) else: raise Errors.NOT_MODIFIED return renderObj
def getTag(self, tagKey, isKey=True): metadata = WebServiceObject() try: if (isKey): tag = Tag.objects.get(pk__exact=tagKey) else: tag = tagKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_KEY except Exception: raise Errors.INTERNAL_ERROR if not tag.readPermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) if metadata.allowsField('points'): tagPoints = TagPoint.objects.filter(tag__exact=tag) points = [] for tagPoint in tagPoints: points.append({ 'x' : tagPoint.pointX, 'y' : tagPoint.pointY }) metadata.put('points', points) metadata.put('id', tag.pk) metadata.put('color', [tag.color.red, tag.color.green, tag.color.blue]) metadata.put('name', tag.name) return metadata
def getImageMetadataByOrganism(self, organismId): metadata = WebServiceObject() if self.user and self.user.is_authenticated(): allowedImages = Picture.objects.filter( isPrivate=False) | Picture.objects.filter( user__exact=self.user, isPrivate=True) else: allowedImages = Picture.objects.filter(isPrivate=False) defTags = [] if self.unlimited: for orgId in organismId: defTags.append( PictureDefinitionTag.objects.filter( organism__exact=orgId, picture__in=allowedImages)[self.offset:]) else: for orgId in organismId: defTags.append( PictureDefinitionTag.objects.filter( organism__exact=orgId, picture__in=allowedImages)[self.offset:self.offset + self.limit]) closedSet = {} imageMetadata = {} imageFields = set( ['id', 'url', 'uploadDate', 'description', 'uploadedBy']) if self.fields: newImageFields = imageFields.intersection(set(self.fields)) if newImageFields: imageFields = newImageFields imageMetadataAPI = ImageMetadataAPI(self.user, imageFields) for orgTags in defTags: for tag in orgTags: if not closedSet.has_key(tag.picture.pk): closedSet[ tag.picture.pk] = imageMetadataAPI.getImageMetadata( tag.picture, False).getObject() if imageMetadata.has_key(tag.organism.pk): imageMetadata[tag.organism.pk]['images'].append( closedSet[tag.picture.pk]) else: imageMetadata[tag.organism.pk] = { 'images': [closedSet[tag.picture.pk]], 'organism': { 'id': tag.organism.pk, 'commonName': tag.organism.common_name, 'abbreviation': tag.organism.abbreviation, 'genus': tag.organism.genus, 'species': tag.organism.species } } if len(imageMetadata) != len(organismId): for orgId in organismId: if not imageMetadata.has_key(orgId): imageMetadata[orgId] = [] metadata.setObject(LimitDict(self.fields, imageMetadata)) return metadata
def deleteTag(self, tagKey, isKey=True): metadata = WebServiceObject() try: if (isKey): tag = Tag.objects.get(pk__exact=tagKey) else: tag = tagKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_GENE_LINK_KEY except Exception: raise Errors.INTERNAL_ERROR if not tag.writePermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) if metadata.allowsField('points'): tagPoints = TagPoint.objects.filter(tag__exact=tag) points = [] for tagPoint in tagPoints: points.append({'x': tagPoint.pointX, 'y': tagPoint.pointY}) metadata.put('points', points) metadata.put('id', tag.pk) metadata.put('color', [tag.color.red, tag.color.green, tag.color.blue]) metadata.put('name', tag.name) try: tag.delete() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e))
def getTagGroup(self, tagGroupKey, isKey=True): metadata = WebServiceObject() try: if (isKey): tagGroup = TagGroup.objects.get(pk__exact=tagGroupKey) else: tagGroup = tagGroupKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY except Exception: raise Errors.INTERNAL_ERROR if not tagGroup.readPermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) metadata.put('id', tagGroup.pk) metadata.put('name', tagGroup.name) metadata.put('user', tagGroup.user.username) metadata.put('dateCreated', tagGroup.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('lastModified', tagGroup.lastModified.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('imageId', tagGroup.picture.pk) metadata.put('isPrivate', tagGroup.isPrivate) return metadata
def createGeneLink(self, tagKey, name=None, uniqueName=None, organismId=None, isKey=True): metadata = WebServiceObject() try: if isKey: tag = Tag.objects.get(pk__exact=tagKey) else: tag = tagKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY if not tag.writePermissions(self.user): raise Errors.AUTHENTICATION try: feature = None if name and organismId: feature = Feature.objects.filter(name=name, organism=organismId) if uniqueName: if feature: feature = feature & Feature.objects.filter(uniquename=uniqueName) else: feature = Feature.objects.filter(uniquename=uniqueName) if not feature: error = "" if name and organismId: error += "name: " + name + ", organismId: " + organismId if uniqueName: comma = ", " if error else "" error += comma + "uniqueName: " + uniqueName raise Errors.NO_MATCHING_FEATURE.setCustom(error) geneLink = GeneLink(tag=tag, feature=feature) geneLink.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # limit metadata return metadata.limitFields(self.fields) metadata.put('id', geneLink.pk) metadata.put('user', geneLink.user.username) metadata.put('tagId', geneLink.tag.pk) metadata.put('feature', LimitDict(self.fields, { 'uniqueName' : geneLink.feature.uniquename, 'name' : geneLink.feature.name, 'organismId' : geneLink.feature.organism.organism_id }) ) return metadata
def createTagGroup(self, imageKey, name, isKey=True): metadata = WebServiceObject() try: if isKey: image = Picture.objects.get(pk__exact=imageKey) else: image = imageKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY if not image.writePermissions(self.user): raise Errors.AUTHENTICATION # start saving the new tag now that it has passed all tests tagGroup = TagGroup(name=name, picture=image, user=self.user) try: tagGroup.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # limit metadata return metadata.limitFields(self.fields) # add new tag to response for success metadata.put('id', tagGroup.pk) metadata.put('name', tagGroup.name) metadata.put('user', tagGroup.user.username) metadata.put('dateCreated', tagGroup.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('lastModified', tagGroup.lastModified.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('imageId', tagGroup.picture.pk) metadata.put('isPrivate', tagGroup.isPrivate) return metadata
def getTag(self, tagKey, isKey=True): metadata = WebServiceObject() try: if (isKey): tag = Tag.objects.get(pk__exact=tagKey) else: tag = tagKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_KEY except Exception: raise Errors.INTERNAL_ERROR if not tag.readPermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) if metadata.allowsField('points'): tagPoints = TagPoint.objects.filter(tag__exact=tag) points = [] for tagPoint in tagPoints: points.append({'x': tagPoint.pointX, 'y': tagPoint.pointY}) metadata.put('points', points) metadata.put('id', tag.pk) metadata.put('color', [tag.color.red, tag.color.green, tag.color.blue]) metadata.put('name', tag.name) return metadata
def addNote(self, notes, pn_id, imageKey): metadata = WebServiceObject() # get picture instance with imageKey try: image = Picture.objects.get(pk__exact=imageKey) except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY if not self.user: raise Errors.NO_USER_KEY else: userID = self.user try: # save the new note if pn_id: # update pictureNotes = PictureNotes.objects.get(pk__exact=pn_id) if pictureNotes: pictureNotes.notes = notes pictureNotes.picture = image pictureNotes.user = userID pictureNotes.save() else: # error print 'Error: no picture_notes.pk found!' else: # add new pictureNotes = PictureNotes(notes=notes, picture=image, user=userID) pictureNotes.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # limit metadata return metadata.limitFields(self.fields) # add new tag to response for success metadata.put('pn_id', pictureNotes.pk) metadata.put('picture', pictureNotes.picture.pk) metadata.put('notes', pictureNotes.notes) metadata.put('user', pictureNotes.user.username) metadata.put('dateCreated', pictureNotes.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) return metadata
def createImageMetadata(self, image, description, altText, organisms, isKey=True): organismsArr = [] metadata = WebServiceObject() if not (self.user and self.user.is_authenticated()): raise Errors.AUTHENTICATION filetype = imghdr.what(image.file) if not filetype or filetype not in set( ['gif', 'tiff', 'jpeg', 'bmp', 'png']): raise Errors.INVALID_IMAGE_TYPE wrappedFile, thumbnailFile, filename, thumbnailName = handleUpload( image) if self.user.is_staff: upload = Picture(user=self.user, isPrivate=False, imageName=wrappedFile.file, thumbnail=thumbnailFile.file) else: upload = Picture(user=self.user, isPrivate=True, imageName=wrappedFile.file, thumbnail=thumbnailFile.file) try: upload.save() except DatabaseError as e: transaction.rollback() os.remove(filename) os.remove(thumbnailName) raise Errors.INTEGRITY_ERROR.setCustom(str(e)) os.remove(filename) os.remove(thumbnailName) # now that image has been properly uploaded add the metadata to it organismField = not self.fields or 'organisms' in self.fields if organisms: newOrganisms = Organism.objects.filter(organism_id__in=organisms) newDefTags = [] for newOrg in newOrganisms: newDefTags.append( PictureDefinitionTag(picture=upload, organism=newOrg)) try: for newTag in newDefTags: newTag.save() if organismField: organismsArr.append({ 'commonName': newTag.organism.common_name, 'abbreviation': newTag.organism.abbreviation, 'genus': newTag.organism.genus, 'species': newTag.organism.species, 'id': newTag.organism.pk }) except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) if description: upload.description = description try: upload.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) if altText: upload.altText = altText try: upload.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) metadata.limitFields(self.fields) # put in the information we care about metadata.put('organisms', organismsArr) metadata.put('description', upload.description) metadata.put('altText', upload.altText) metadata.put('uploadedBy', upload.user.username) metadata.put('uploadDate', upload.uploadDate.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('url', upload.imageName.url) metadata.put('thumbnail', upload.thumbnail.url) metadata.put('id', upload.pk) return metadata
def editImageMetadata(self, imageKey, description, altText, organisms, isKey=True): organismsArr = [] metadata = WebServiceObject() try: if isKey: image = Picture.objects.get(pk__exact=imageKey) else: image = imageKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY if not image.writePermissions(self.user): raise Errors.AUTHENTICATION defTags = PictureDefinitionTag.objects.filter(picture__exact=image) organismField = not self.fields or 'organisms' in self.fields if organisms: newOrganisms = Organism.objects.filter(organism_id__in=organisms) newDefTags = [] for newOrg in newOrganisms: newDefTags.append(PictureDefinitionTag(picture=image, organism=newOrg)) try: defTags.delete() for newTag in newDefTags: newTag.save() if organismField: organismsArr.append({ 'commonName' : newTag.organism.common_name, 'abbreviation' : newTag.organism.abbreviation, 'genus' : newTag.organism.genus, 'species' : newTag.organism.species, 'id' : newTag.organism.pk }) except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) if description: image.description = description try: image.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) if altText: image.altText = altText try: image.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) metadata.limitFields(self.fields) if not organisms and organismField: for defTag in defTags: organisms.append({ 'commonName' : defTag.organism.common_name, 'abbreviation' : defTag.organism.abbreviation, 'genus' : defTag.organism.genus, 'species' : defTag.organism.species, 'id' : defTag.organism.pk }) # put in the information we care about metadata.put('organisms', organismsArr) metadata.put('description', image.description) metadata.put('altText', image.altText) metadata.put('uploadedBy', image.user.username) metadata.put('uploadDate', image.uploadDate.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('url', image.imageName.url) metadata.put('thumbnail', image.thumbnail.url) metadata.put('id', image.pk) return metadata
def createGeneLink(self, tagKey, name=None, allele=None, organismId=None, isKey=True): metadata = WebServiceObject() try: if isKey: tag = Tag.objects.get(pk__exact=tagKey) else: tag = tagKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY if not tag.writePermissions(self.user): raise Errors.AUTHENTICATION try: feature = None if name and organismId: feature = Feature.objects.filter(name=name, organism=organismId) if not feature: error = "Could not find a feature with the parameters: " if name and organismId: error += "name: " + name + ", organismId: " + organismId raise Errors.NO_MATCHING_FEATURE.setCustom(error) elif len(feature) > 1: error = "Multiple matches for parameters: " if name and organismId: error += "name: " + name + ", organismId: " + organismId error += "\n\n Responses: \n\n" for f in feature: error += "uniquename: " + f.uniquename + ", name: " + f.name + ", organism: " + f.organism.common_name + "\n\n" raise Errors.NO_MATCHING_FEATURE.setCustom(error) if allele: vID = None vID = Variation.objects.using('mgdb').filter(name__exact=allele) if not vID: errorAllele = Errors.NO_MATCHING_ALLELE.setCustom(allele) raise errorAllele geneLink = GeneLink(tag=tag, feature=feature[0], user=self.user, allele=allele) geneLink.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # limit metadata return metadata.limitFields(self.fields) metadata.put('id', geneLink.pk) metadata.put('user', geneLink.user.username) metadata.put('tagId', geneLink.tag.pk) metadata.put('feature', LimitDict(self.fields, { 'uniqueName' : geneLink.feature.uniquename, 'name' : geneLink.feature.name, 'allele': geneLink.allele, 'organismId' : geneLink.feature.organism.organism_id }) ) return metadata
def getNote(self, imageKey): metadata = WebServiceObject() try: pictureNotes = PictureNotes.objects.filter( picture__exact=imageKey).order_by('-dateCreated')[:1].get() except (ObjectDoesNotExist, ValueError): return metadata #except Exception: # raise Errors.INTERNAL_ERROR metadata.limitFields(self.fields) metadata.put('pn_id', pictureNotes.pk) metadata.put('picture', pictureNotes.picture.pk) metadata.put('notes', pictureNotes.notes) metadata.put('user', pictureNotes.user.username) metadata.put('dateCreated', pictureNotes.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) return metadata
def updateTagGroup(self, tagGroupKey, name=None, isKey=True): metadata = WebServiceObject() try: if (isKey): tagGroup = TagGroup.objects.get(pk__exact=tagGroupKey) else: tagGroup = tagGroupKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY if not tagGroup.writePermissions(self.user): raise Errors.AUTHENTICATION # update the name if name: tagGroup.name = name metadata.limitFields(self.fields) try: tagGroup.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # add new tag to response for success metadata.put('id', tagGroup.pk) metadata.put('name', tagGroup.name) metadata.put('user', tagGroup.user.username) metadata.put('dateCreated', tagGroup.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('lastModified', tagGroup.lastModified.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('imageId', tagGroup.picture.pk) metadata.put('isPrivate', tagGroup.isPrivate) return metadata
def updateTag(self, tagKey, points=None, name=None, color=None, isKey=True): metadata = WebServiceObject() try: if (isKey): tag = Tag.objects.get(pk__exact=tagKey) else: tag = tagKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_KEY if not tag.writePermissions(self.user): raise Errors.AUTHENTICATION # update the description if name: tag.name = name # update the color (ignores bad syntax) try: if color and len(color) == 3: tagColor = TagColor.objects.get_or_create(red=color[0], green=color[1], blue=color[2])[0] tag.color = tagColor except (ValueError, TypeError): raise Errors.INVALID_SYNTAX.setCustom('color') oldTagPoints = list(TagPoint.objects.filter(tag__exact=tag)) # updates the tag points for this tag if points: # first we delete the old tag points (they aren't helpful anymore) # TODO: add Trash database for restoring accidental changes try: newTagPointModels = [] # Save the new tag points # create the new tag points to put in the tag for counter, point in enumerate(points): newTagPointModels.append(TagPoint(pointX=float(point['x']), pointY=float(point['y']) , rank=counter+1)) except (TypeError, KeyError, ValueError): raise Errors.INVALID_SYNTAX.setCustom('points') metadata.limitFields(self.fields) try: tag.save() if points: for newTagPoint in newTagPointModels: newTagPoint.tag = tag newTagPoint.save() for tagPoint in oldTagPoints: tagPoint.delete() metadata.put('points', points) else: tagPoints = [] for tagPoint in oldTagPoints: tagPoints.append({ 'x' : tagPoint.pointX, 'y' : tagPoint.pointY }) metadata.put('points', tagPoints) except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # add new tag to response for success metadata.put('id', tag.pk) metadata.put('user', tag.user) metadata.put('color', [tag.color.red, tag.color.green, tag.color.blue]) metadata.put('name', tag.name) return metadata
def updateTagGroup(self, tagGroupKey, name=None, isKey=True): metadata = WebServiceObject() try: if (isKey): tagGroup = TagGroup.objects.get(pk__exact=tagGroupKey) else: tagGroup = tagGroupKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY if not tagGroup.writePermissions(self.user): raise Errors.AUTHENTICATION # update the name if name: tagGroup.name = name metadata.limitFields(self.fields) try: tagGroup.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # add new tag to response for success metadata.put('id', tagGroup.pk) metadata.put('name', tagGroup.name) metadata.put('user', tagGroup.user.username) metadata.put('dateCreated', tagGroup.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('lastModified', tagGroup.lastModified.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('imageId', tagGroup.picture.pk) metadata.put('isPrivate', tagGroup.isPrivate) return metadata
def getTagGroup(self, tagGroupKey, isKey=True): metadata = WebServiceObject() try: if (isKey): tagGroup = TagGroup.objects.get(pk__exact=tagGroupKey) else: tagGroup = tagGroupKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY except Exception: raise Errors.INTERNAL_ERROR if not tagGroup.readPermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) metadata.put('id', tagGroup.pk) metadata.put('name', tagGroup.name) metadata.put('user', tagGroup.user.username) metadata.put('dateCreated', tagGroup.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('lastModified', tagGroup.lastModified.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('imageId', tagGroup.picture.pk) metadata.put('isPrivate', tagGroup.isPrivate) return metadata
def deleteTag(self, tagKey, isKey=True): metadata = WebServiceObject() try: if (isKey): tag = Tag.objects.get(pk__exact=tagKey) else: tag = tagKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_GENE_LINK_KEY except Exception: raise Errors.INTERNAL_ERROR if not tag.writePermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) if metadata.allowsField('points'): tagPoints = TagPoint.objects.filter(tag__exact=tag) points = [] for tagPoint in tagPoints: points.append({ 'x' : tagPoint.pointX, 'y' : tagPoint.pointY }) metadata.put('points', points) metadata.put('id', tag.pk) metadata.put('color', [tag.color.red, tag.color.green, tag.color.blue]) metadata.put('name', tag.name) try: tag.delete() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e))
def createTag(self, tagGroupKey, points, name, color, isKey=True): metadata = WebServiceObject() tagPoints = [] try: if isKey: tagGroup = TagGroup.objects.get(pk__exact=tagGroupKey) else: tagGroup = tagGroupKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY if not tagGroup.writePermissions(self.user): raise Errors.AUTHENTICATION # create the new tag points to put in the tag try: for counter, point in enumerate(points): tagPoints.append(TagPoint(pointX=float(point['x']), pointY=float(point['y']) , rank=counter+1)) except (TypeError, KeyError, ValueError): raise Errors.INVALID_SYNTAX.setCustom('points') try: # create new tag color try: if len(color) == 3: tagColor = TagColor.objects.get_or_create(red=int(color[0]), green=int(color[1]), blue=int(color[2]))[0] except (ValueError, TypeError): raise Errors.INVALID_SYNTAX.setCustom('color') # start saving the new tag now that it has passed all tests tag = Tag(name=name, color=tagColor, group=tagGroup, user=self.user) tag.save() for tagPoint in tagPoints: tagPoint.tag = tag tagPoint.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # limit metadata return metadata.limitFields(self.fields) # add new tag to response for success metadata.put('id', tag.pk) metadata.put('user', tag.user.username) metadata.put('color', [tag.color.red, tag.color.green, tag.color.blue]) metadata.put('name', tag.name) metadata.put('points', points) return metadata
def getGeneLink(self, geneLinkKey, isKey=True): metadata = WebServiceObject() try: if isKey: geneLink = GeneLink.objects.get(pk__exact=geneLinkKey) else: geneLink = geneLinkKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_GENE_LINK_KEY except Exception: raise Errors.INTERNAL_ERROR if not geneLink.readPermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) metadata.put('id', geneLink.pk) metadata.put('user', geneLink.user.username) metadata.put('tagId', geneLink.tag.pk) metadata.put('feature', LimitDict(self.fields, { 'uniqueName' : geneLink.feature.uniquename, 'name': geneLink.feature.name, 'organismId' : geneLink.feature.organism.organism_id }) ) return metadata
def createTag(self, tagGroupKey, points, name, color, isKey=True): metadata = WebServiceObject() tagPoints = [] try: if isKey: tagGroup = TagGroup.objects.get(pk__exact=tagGroupKey) else: tagGroup = tagGroupKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY if not tagGroup.writePermissions(self.user): raise Errors.AUTHENTICATION # create the new tag points to put in the tag try: for counter, point in enumerate(points): tagPoints.append( TagPoint(pointX=float(point['x']), pointY=float(point['y']), rank=counter + 1)) except (TypeError, KeyError, ValueError): raise Errors.INVALID_SYNTAX.setCustom('points') try: # create new tag color try: if len(color) == 3: tagColor = TagColor.objects.get_or_create( red=int(color[0]), green=int(color[1]), blue=int(color[2]))[0] except (ValueError, TypeError): raise Errors.INVALID_SYNTAX.setCustom('color') # start saving the new tag now that it has passed all tests tag = Tag(name=name, color=tagColor, group=tagGroup, user=self.user) tag.save() for tagPoint in tagPoints: tagPoint.tag = tag tagPoint.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # limit metadata return metadata.limitFields(self.fields) # add new tag to response for success metadata.put('id', tag.pk) metadata.put('user', tag.user.username) metadata.put('color', [tag.color.red, tag.color.green, tag.color.blue]) metadata.put('name', tag.name) metadata.put('points', points) return metadata
def createImageMetadata(self, image, description, altText, organisms, isKey=True): organismsArr = [] metadata = WebServiceObject() if not (self.user and self.user.is_authenticated()): raise Errors.AUTHENTICATION filetype = imghdr.what(image.file) if not filetype or filetype not in set(['gif', 'tiff', 'jpeg', 'bmp', 'png']): raise Errors.INVALID_IMAGE_TYPE wrappedFile, thumbnailFile, filename, thumbnailName = handleUpload(image) if self.user.is_staff: upload = Picture(user=self.user, isPrivate=False, imageName=wrappedFile.file, thumbnail=thumbnailFile.file) else: upload = Picture(user=self.user, isPrivate=True, imageName=wrappedFile.file, thumbnail=thumbnailFile.file) try: upload.save() except DatabaseError as e: transaction.rollback() os.remove(filename) os.remove(thumbnailName) raise Errors.INTEGRITY_ERROR.setCustom(str(e)) os.remove(filename) os.remove(thumbnailName) # now that image has been properly uploaded add the metadata to it organismField = not self.fields or 'organisms' in self.fields if organisms: newOrganisms = Organism.objects.filter(organism_id__in=organisms) newDefTags = [] for newOrg in newOrganisms: newDefTags.append(PictureDefinitionTag(picture=upload, organism=newOrg)) try: for newTag in newDefTags: newTag.save() if organismField: organismsArr.append({ 'commonName' : newTag.organism.common_name, 'abbreviation' : newTag.organism.abbreviation, 'genus' : newTag.organism.genus, 'species' : newTag.organism.species, 'id' : newTag.organism.pk }) except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) if description: upload.description = description try: upload.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) if altText: upload.altText = altText try: upload.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) metadata.limitFields(self.fields) # put in the information we care about metadata.put('organisms', organismsArr) metadata.put('description', upload.description) metadata.put('altText', upload.altText) metadata.put('uploadedBy', upload.user.username) metadata.put('uploadDate', upload.uploadDate.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('url', upload.imageName.url) metadata.put('thumbnail', upload.thumbnail.url) metadata.put('id', upload.pk) return metadata
def updateTag(self, tagKey, points=None, name=None, color=None, isKey=True): metadata = WebServiceObject() try: if (isKey): tag = Tag.objects.get(pk__exact=tagKey) else: tag = tagKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_KEY if not tag.writePermissions(self.user): raise Errors.AUTHENTICATION # update the description if name: tag.name = name # update the color (ignores bad syntax) try: if color and len(color) == 3: tagColor = TagColor.objects.get_or_create(red=color[0], green=color[1], blue=color[2])[0] tag.color = tagColor except (ValueError, TypeError): raise Errors.INVALID_SYNTAX.setCustom('color') oldTagPoints = list(TagPoint.objects.filter(tag__exact=tag)) # updates the tag points for this tag if points: # first we delete the old tag points (they aren't helpful anymore) # TODO: add Trash database for restoring accidental changes try: newTagPointModels = [] # Save the new tag points # create the new tag points to put in the tag for counter, point in enumerate(points): newTagPointModels.append( TagPoint(pointX=float(point['x']), pointY=float(point['y']), rank=counter + 1)) except (TypeError, KeyError, ValueError): raise Errors.INVALID_SYNTAX.setCustom('points') metadata.limitFields(self.fields) try: tag.save() if points: for newTagPoint in newTagPointModels: newTagPoint.tag = tag newTagPoint.save() for tagPoint in oldTagPoints: tagPoint.delete() metadata.put('points', points) else: tagPoints = [] for tagPoint in oldTagPoints: tagPoints.append({ 'x': tagPoint.pointX, 'y': tagPoint.pointY }) metadata.put('points', tagPoints) except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # add new tag to response for success metadata.put('id', tag.pk) metadata.put('user', tag.user) metadata.put('color', [tag.color.red, tag.color.green, tag.color.blue]) metadata.put('name', tag.name) return metadata
def createTagGroup(self, imageKey, name, isKey=True): metadata = WebServiceObject() try: if isKey: image = Picture.objects.get(pk__exact=imageKey) else: image = imageKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY if not image.writePermissions(self.user): raise Errors.AUTHENTICATION # start saving the new tag now that it has passed all tests tagGroup = TagGroup(name=name, picture=image, user=self.user) try: tagGroup.save() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # limit metadata return metadata.limitFields(self.fields) # add new tag to response for success metadata.put('id', tagGroup.pk) metadata.put('name', tagGroup.name) metadata.put('user', tagGroup.user.username) metadata.put('dateCreated', tagGroup.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('lastModified', tagGroup.lastModified.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('imageId', tagGroup.picture.pk) metadata.put('isPrivate', tagGroup.isPrivate) return metadata
def getImageMetadata(self, imageKey, isKey=True): organisms = [] metadata = WebServiceObject() try: if (isKey): image = Picture.objects.get(pk__exact=imageKey) else: image = imageKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY if not image.readPermissions(self.user): raise Errors.AUTHENTICATION if not self.fields or 'organisms' in self.fields: defTags = PictureDefinitionTag.objects.filter(picture__exact=image) for tag in defTags: organisms.append({ 'commonName': tag.organism.common_name, 'abbreviation': tag.organism.abbreviation, 'genus': tag.organism.genus, 'species': tag.organism.species, 'id': tag.organism.pk }) metadata.limitFields(self.fields) # put in the information we care about metadata.put('organisms', organisms) metadata.put('description', image.description) metadata.put('altText', image.altText) metadata.put('uploadedBy', image.user.username) metadata.put('uploadDate', image.uploadDate.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('url', image.imageName.url) metadata.put('thumbnail', image.thumbnail.url) metadata.put('id', image.pk) # add to recently viewed images if there is a user if self.user and self.user.is_authenticated(): RecentlyViewedPicture.objects.get_or_create( user=self.user, picture=image)[0].save() return metadata
def deleteImage(self, imageKey, isKey=True): organisms = [] metadata = WebServiceObject() try: if isKey: image = Picture.objects.get(pk__exact=imageKey) else: image = imageKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY if not image.writePermissions(self.user): raise Errors.AUTHENTICATION if not self.fields or 'organisms' in self.fields: defTags = PictureDefinitionTag.objects.filter(picture__exact=image) for tag in defTags: try: organisms.append({ 'commonName' : tag.organism.common_name, 'abbreviation' : tag.organism.abbreviation, 'genus' : tag.organism.genus, 'species' : tag.organism.species, 'id' : tag.organism.pk }) except ObjectDoesNotExist: None metadata.limitFields(self.fields) # put in the information we care about metadata.put('organisms', organisms) metadata.put('description', image.description) metadata.put('altText', image.altText) metadata.put('uploadedBy', image.user.username) metadata.put('uploadDate', image.uploadDate.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('url', image.imageName.url) metadata.put('thumbnail', image.thumbnail.url) metadata.put('id', image.pk) try: image.delete() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) return metadata
def deleteTagGroup(self, tagGroupKey, isKey=True): metadata = WebServiceObject() try: if isKey: tagGroup = TagGroup.objects.get(pk__exact=tagGroupKey) else: tagGroup = tagGroupKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_TAG_GROUP_KEY except Exception: raise Errors.INTERNAL_ERROR if not tagGroup.writePermissions(self.user): raise Errors.AUTHENTICATION metadata.limitFields(self.fields) # add new tag to response for success metadata.put("id", tagGroup.pk) metadata.put("name", tagGroup.name) metadata.put("dateCreated", tagGroup.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) metadata.put("lastModified", tagGroup.lastModified.strftime("%Y-%m-%d %H:%M:%S")) metadata.put("imageId", tagGroup.picture.pk) try: tagGroup.delete() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) return metadata
def getImageMetadata(self, imageKey, isKey=True): organisms = [] metadata = WebServiceObject() try: if (isKey): image = Picture.objects.get(pk__exact=imageKey) else: image = imageKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY if not image.readPermissions(self.user): raise Errors.AUTHENTICATION if not self.fields or 'organisms' in self.fields: defTags = PictureDefinitionTag.objects.filter(picture__exact=image) for tag in defTags: organisms.append({ 'commonName' : tag.organism.common_name, 'abbreviation' : tag.organism.abbreviation, 'genus' : tag.organism.genus, 'species' : tag.organism.species, 'id' : tag.organism.pk }) metadata.limitFields(self.fields) # put in the information we care about metadata.put('organisms', organisms) metadata.put('description', image.description) metadata.put('altText', image.altText) metadata.put('uploadedBy', image.user.username) metadata.put('uploadDate', image.uploadDate.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('url', image.imageName.url) metadata.put('thumbnail', image.thumbnail.url) metadata.put('id', image.pk) # add to recently viewed images if there is a user if self.user and self.user.is_authenticated(): RecentlyViewedPicture.objects.get_or_create(user=self.user, picture=image)[0].save() return metadata
def getImageMetadata(self, imageKey, isKey=True): # TODO: getImageMetadata() should be refactorized because it is used for all image loading parts # including image list even thumbnail image. It potentially has unnecessary database queries. organisms = [] geneIDs = [] metadata = WebServiceObject() try: if (isKey): image = Picture.objects.get(pk__exact=imageKey) else: image = imageKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY # Get gene information geneSymbol = None geneName = None if image is not None: # Gene ID pictureGIDs = PictureGeneID.objects.filter(picture__exact=image) for picGID in pictureGIDs: geneIDs.append({ 'geneID': picGID.gene_id, 'version': picGID.version }) pictureMbs = PictureMgdb.objects.filter(picture__exact=image) for pMb in pictureMbs: geneSymbol = pMb.locus_name geneName = pMb.locus_full_name break if not image.readPermissions(self.user): raise Errors.AUTHENTICATION if not self.fields or 'organisms' in self.fields: defTags = PictureDefinitionTag.objects.filter(picture__exact=image) for tag in defTags: organisms.append({ 'commonName': tag.organism.common_name, 'abbreviation': tag.organism.abbreviation, 'genus': tag.organism.genus, 'species': tag.organism.species, 'id': tag.organism.pk }) # Get all imageID for imageName images = Picture.objects.filter(imageName__exact=image.imageName) # Get Image Notes Information notes_id = '' notes = '' notesBy = '' pictureNotesAPI = NotesAPI(self.user) for imageID in images: pictureNotes = pictureNotesAPI.getNote(imageID).getObject() if pictureNotes: notes_id = pictureNotes['pn_id'] notes = pictureNotes['notes'] notesBy = pictureNotes['user'] break # Get QTL information qtls_id = '' qtl = '' pictureQtlAPI = QtlAPI(self.user) for imageID in images: pictureQtl = pictureQtlAPI.getQtl(imageID).getObject() if pictureQtl: qtls_id = pictureQtl['pq_id'] qtl = pictureQtl['qtl'] break metadata.limitFields(self.fields) # put in the information we care about metadata.put('organisms', organisms) metadata.put('description', image.description) metadata.put('altText', image.altText) metadata.put('uploadedBy', image.user.username) metadata.put('uploadDate', image.uploadDate.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('url', image.imageName.url) metadata.put('thumbnail', image.thumbnail.url) metadata.put('id', image.pk) metadata.put('geneIDs', geneIDs) metadata.put('geneSymbol', geneSymbol) metadata.put('geneName', geneName) metadata.put('notes_id', notes_id) metadata.put('notes', notes) metadata.put('notesBy', notesBy) metadata.put('qtls_id', qtls_id) metadata.put('qtl', qtl) return metadata
def getQtl(self, imageKey): metadata = WebServiceObject() try: pictureQtl = PictureQtl.objects.filter( picture__exact=imageKey).order_by('-dateCreated')[:1].get() except (ObjectDoesNotExist, ValueError): return metadata metadata.limitFields(self.fields) metadata.put('pq_id', pictureQtl.pk) metadata.put('picture', pictureQtl.picture.pk) metadata.put('qtl', pictureQtl.qtl) metadata.put('user', pictureQtl.user.username) metadata.put('dateCreated', pictureQtl.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) return metadata
def addQtl(self, qtl, pq_id, imageKey): metadata = WebServiceObject() print 'test 1' # get picture instance with imageKey try: image = Picture.objects.get(pk__exact=imageKey) except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY if not self.user: raise Errors.NO_USER_KEY else: userID = self.user try: # save the new note if pq_id: # update pictureQtl = PictureQtl.objects.get(pk__exact=pq_id) if pictureQtl: pictureQtl.qtl = qtl pictureQtl.picture = image pictureQtl.user = userID pictureQtl.save() else: # error print 'Error: no PictureQtl.pk found!' else: # add new pictureQtl = PictureQtl(qtl=qtl, picture=image, user=userID) print 'test: trying store qtl.' pictureQtl.save() print 'test: qtl saved.' except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) # limit metadata return metadata.limitFields(self.fields) # add new tag to response for success metadata.put('pq_id', pictureQtl.pk) metadata.put('picture', pictureQtl.picture.pk) metadata.put('qtl', pictureQtl.qtl) metadata.put('user', pictureQtl.user.username) metadata.put('dateCreated', pictureQtl.dateCreated.strftime("%Y-%m-%d %H:%M:%S")) return metadata
def deleteImage(self, imageKey, isKey=True): organisms = [] metadata = WebServiceObject() try: if isKey: image = Picture.objects.get(pk__exact=imageKey) else: image = imageKey except (ObjectDoesNotExist, ValueError): raise Errors.INVALID_IMAGE_KEY if not image.writePermissions(self.user): raise Errors.AUTHENTICATION if not self.fields or 'organisms' in self.fields: defTags = PictureDefinitionTag.objects.filter(picture__exact=image) for tag in defTags: try: organisms.append({ 'commonName': tag.organism.common_name, 'abbreviation': tag.organism.abbreviation, 'genus': tag.organism.genus, 'species': tag.organism.species, 'id': tag.organism.pk }) except ObjectDoesNotExist: None metadata.limitFields(self.fields) # put in the information we care about metadata.put('organisms', organisms) metadata.put('description', image.description) metadata.put('altText', image.altText) metadata.put('uploadedBy', image.user.username) metadata.put('uploadDate', image.uploadDate.strftime("%Y-%m-%d %H:%M:%S")) metadata.put('url', image.imageName.url) metadata.put('thumbnail', image.thumbnail.url) metadata.put('id', image.pk) try: image.delete() except DatabaseError as e: transaction.rollback() raise Errors.INTEGRITY_ERROR.setCustom(str(e)) return metadata