def _build_cache(self): out = {} file = File.open_unknown_type(self.model.file) out["id"] = self.model.id out["file"] = {"url": file.get_url(), "id": file.model.id} items_out = [] items = models.Item.objects.filter(post=self.model) for item in items: me = { "source": { "lat": item.source.lat, "long": item.source.long, "name": item.source.name, "external_id": item.source.external_id, "host": item.source.host, }, "article": {"name": item.article.name}, } items_out.append(me) out["items"] = items_out out["looks"] = models.Look.objects.filter(post=self.model).count() comments_out = [] comments = models.Comment.objects.filter(post=self.model).order_by("created_at") for comment in comments: hash_tags_out = [] hash_tags = models.HashTag.objects.filter(comment=comment) for hash_tag in hash_tags: hash_tags_out.append(hash_tag.text) mentions_out = [] mentions = models.Mention.objects.filter(comment=comment) for mention in mentions: mentions_out.append({"username": mention.user.username, "text": mention.text}) me = { "created_by": comment.created_by.username, "hash_tags": hash_tags_out, "mentions": mentions_out, "text": comment.text, "created_at": comment.created_at.strftime("%s"), } comments_out.append(me) out["comments"] = comments_out out["created_by"] = self.model.created_by.username out["created_at"] = self.model.created_at.strftime("%s") user = models.User.objects.filter(ref=self.model.created_by)[0] if user.avatar: file = File.open_unknown_type(user.avatar) out["mugshot"] = file.get_url() out["mugshot_id"] = file.model.id self.model.cache = json.dumps(out) self.model.save()
def post_root(self): if "file" in self.request.FILES: upload = self.request.FILES["file"] file = File.create_unknown_type( upload.temporary_file_path(), self.request.user, mime_type=upload.content_type ) elif "file" in self.request.POST: temp = tempfile.NamedTemporaryFile() temp.write(self.request.POST["file"].encode("UTF-8")) temp.flush() file = File.create_unknown_type(temp.name, self.request.user, mime_type="image/jpeg") self.model = models.Post(file=file.model, created_by=self.request.user) self.model.save() if "comment" in self.args: self._build_comment(self.args["comment"]) if "items" in self.args: self._build_items(json.loads(self.args["items"])) self._build_cache() return {"id": self.model.id}