def image(image_id): if request.method == 'GET': img = session.query(Image).get(image_id) img.Tags.sort(key=lambda x: x.TagName) return render_template('images/editImage.jade', title='Edit Image', img=img) if request.method == 'DELETE': img = session.query(Image).get(image_id) img_path = os.path.join(config.STORAGE_CONTAINER, img.Image_Name) # Delete file if os.path.exists(img_path): os.remove(img_path) # Delete record from database session.query(Image).filter(Image.ImageId == image_id).delete() session.commit() engine.execute('DELETE FROM images_tags WHERE ImageId = {0}'.format(image_id)) engine.execute('DELETE FROM images_people WHERE ImageId = {0}'.format(image_id)) # Delete from images albums # Delete from images collections return jsonify(AjaxResult(True, 'Image was deleted successfully').to_json())
def get_person_ranking(person_id): rankings = engine.execute('SELECT person.PersonId, COUNT(image.ImageId) AS [NumImages] ' 'FROM image ' ' INNER JOIN images_people ON image.ImageId = images_people.ImageId ' ' INNER JOIN person ON images_people.PersonId = person.PersonId ' 'GROUP BY person.PersonId ' 'ORDER BY NumImages DESC') ranking = Ranking(1, Stats.get_total_people()) for row in rankings: if row[0] == person_id: return ranking ranking.Rank += 1 return ranking
def get_stats_images_tags(): query = 'SELECT tag.TagId, tag.TagName, COUNT(image.ImageId) AS [NumImages],' \ ' (COUNT(tag.TagId) * 1.0/' \ ' (SELECT COUNT(*) FROM tag INNER JOIN images_tags ON tag.TagId = images_tags.TagId)' \ ' ) * 100 AS Percentage' \ ' FROM tag' \ ' INNER JOIN images_tags ON tag.TagId = images_tags.TagId' \ ' INNER JOIN image ON images_tags.ImageId = image.ImageId' \ ' GROUP BY tag.TagId' \ ' ORDER BY NumImages DESC, tag.TagName' result = engine.execute(query) counts = [] tags = [] max = 0 for row in result: if max < 25: t = TagStat() t.TagId = row[0] t.TagName = row[1] t.Images = row[2] t.Percentage = row[3] tags.append(t) counts.append(int(row[2])) max += 1 stats = TagStats() if max > 0: stats.Average = statistics.mean(counts) stats.Median = statistics.median(counts) try: stats.Mode = statistics.mode(counts) except statistics.StatisticsError: stats.Mode = 'N/A' stats.StdDev = statistics.pstdev(counts) stats.Variance = statistics.pvariance(counts) stats.Lower = stats.Average - (2 * stats.StdDev) stats.Higher = stats.Average + (2 * stats.StdDev) stats.TopTags = tags return stats
def get_images_with_person_percent(person_id): query = 'SELECT images_people.PersonId, COUNT(image.ImageId) AS [NumImages],' \ ' (COUNT(image.ImageId)*1.0/ (' \ ' SELECT COUNT(*) FROM image INNER JOIN images_people ON image.ImageId = images_people.ImageId)' \ ' ) * 100 AS Percentage' \ ' FROM image' \ ' INNER JOIN images_people ON image.ImageId = images_people.ImageId ' \ ' WHERE images_people.PersonId = ' + str(person_id) + ' ' \ ' GROUP BY images_people.PersonId ' \ ' ORDER BY NumImages DESC, images_people.PersonId' result = engine.execute(query) percentage = 0 for row in result: percentage = Decimal(row[2]).quantize(PLACES) return percentage
def get_stats_images_people(): query = 'SELECT images_people.PersonId, COUNT(image.ImageId) AS [NumImages]' \ ' FROM image' \ ' INNER JOIN images_people ON image.ImageId = images_people.ImageId' \ ' INNER JOIN person ON images_people.PersonId = person.PersonId' \ ' GROUP BY images_people.PersonId' \ ' ORDER BY NumImages DESC, person.Name' result = engine.execute(query) counts = [] people = [] max = 0 for row in result: if max < 25: p = PeopleStats() rp = session.query(Person).get(int(row[0])) p.PersonId = rp.PersonId p.Name = rp.Name p.Images = (int(row[1])) p.Percentage = Stats.get_images_with_person_percent(int(row[0])) people.append(p) counts.append(int(row[1])) max += 1 stats = ImageStats() if max > 0: stats.Average = statistics.mean(counts) stats.Median = statistics.median(counts) try: stats.Mode = statistics.mode(counts) except statistics.StatisticsError: stats.Mode = 'N/A' stats.StdDev = statistics.pstdev(counts) stats.Variance = statistics.pvariance(counts) stats.Lower = stats.Average - (2 * stats.StdDev) stats.Higher = stats.Average + (2 * stats.StdDev) stats.TopPeople = people return stats