Exemplo n.º 1
0
    def commit(self, amend=False, message="No message", author="Anonymous <[email protected]>", is_minor=False):
        """
        Commits page content and saves it it in the database.
        """
        # Makes sure the content ends with a newline
        if self.content[-1] != "\n":
            self.content += "\n"

        repo = self.get_repository()

        # Writes content to the CONTENT file
        path = os.path.join(GIT_DIR, self.slug)
        f = codecs.open(path, "w", "utf-8")
        f.write(self.content)
        f.close()

        # Adds the newly creates files and commits
        #repo.index.add([self.slug,])
        repo.git.add([self.slug,])
        repo.git.commit(amend=amend, message=message, author=author)

        # Add the commit metadata in a git note, formatted as
        # a .ini config file
    # THIS SEEMS TO CAUSE AN ERROR:  git: 'notes' is not a git-command. See 'git --help' in git 1.5.6.5 on debian at least
#        config = ConfigParser()
#        config.add_section('metadata')
#        config.set('metadata', 'is_minor', is_minor)

#        output = cStringIO.StringIO()
#        config.write(output)
#        repo.git.notes(["add", "--message=%s" % output.getvalue()], ref="metadata")

        self.save()
        reindex_request.send(sender=self.__class__, instance=self)
Exemplo n.º 2
0
    def sync(self, info=None):
        if info == None:
            info = utils.ffmpeg_get_info(self.url)
        
        self.duration = info.get("duration")

        self.video_info_raw = info.get("video", "")
        self.video_codec = info.get("video_codec", "")
        self.width = info.get("width")
        self.height = info.get("height")
        self.framerate = info.get("fps")

        self.audio_info_raw = info.get("audio", "")
        self.audio_codec = info.get("audio_codec", "")
        self.audio_bits = info.get("audio_bits")
        self.audio_sampling_rate = info.get("audio_sampling_rate")
        self.audio_bitrate = info.get("audio_bitrate")
        self.audio_channels = info.get("audio_channels")
        
        meta = info.get("meta", {})
        self.artist = meta.get("artist", "")
        self.title = meta.get("title", "")
        self.date = meta.get("date", "")
        self.location = meta.get("location", "")
        self.copyright = meta.get("copyright", "")
        self.license = meta.get("license", "")
        self.contact = meta.get("contact", "")

        self.save()
        # request reindex (via signal)
        reindex_request.send(sender=self.__class__, instance=self)
Exemplo n.º 3
0
    def sync (self, data=None, load_comments=False):
        if data == None:
            data = self.load_data()
        """ requires that flickrid is set"""
        info = data['photo']
        # self.flickrid = p['id']
        
        self.title = info['title']['_content']
        self.description = info['description']['_content']
        self.page_url = info['urls']['url'][0]['_content']
     
        self.farm = info['farm']
        self.server = info['server']
        self.secret = info['secret']

        self.license = License.get_by_id(info.get('license'))

        # DATES
        # <dates posted="1100897479" taken="2004-11-19 12:51:19" takengranularity="0" lastupdate="1093022469" />
        dates = info.get("dates")
        if dates:
            date_posted = dates.get('posted')
            if date_posted:
                self.date_posted = datetime.datetime.fromtimestamp(float(date_posted))
            date_taken = dates.get('taken')
            if date_taken:
                self.date_taken = dateutil.parser.parse(date_taken)

        # owner
        (owner, created) = User.objects.get_or_create(flickrid=info['owner']['nsid'])
        if created:
            owner.sync()
        self.owner = owner

        # tags
        for dtag in info['tags']['tag']:
            #{u'raw': u'Anne Teresa De Keersmaeker', u'machine_tag': 0, u'id': u'11775692-5612607247-11507498', u'_content': u'anneteresadekeersmaeker', u'author': u'11868505@N08'}
            # label = dtag['raw']
            tag, created = Tag.objects.get_or_create(slug=dtag['_content'])
            ptag, created = PhotoTag.objects.get_or_create(tag=tag, photo=self)
            ptag.raw = dtag.get("raw")
            ptag.save()

        if load_comments:
            numcomments = int(info['comments']['_content'])
            if numcomments:
                self.load_comments()

        self.save()
        # request reindex (via signal)
        reindex_request.send(sender=self.__class__, instance=self)
Exemplo n.º 4
0
    def sync (self, data=None):
        if data == None:
            data = self.get_data()
        self.server = data.get("server", "")
        self._dir = data.get("dir", "")
        mdata = data.get("metadata")
        if mdata:
            titles = mdata.get("title", [])
            self.title = titles[0]
            self.titles_other = "\n".join(titles[1:])
            self.mediatype = ", ".join(mdata.get("mediatype", []))

            descriptions = mdata.get("description", [])
            self.description = descriptions[0]
            self.descriptions_other = "\n---\n".join(descriptions[1:])

            licenses = mdata.get("licenseurl", [])
            if len(licenses): self.license = licenses[0]
            self.licenses_other = "\n".join(licenses[1:])

            try:
                self.date = dateutil.parser.parse(mdata.get("date")[0])
            except TypeError:
                pass

            try:            
                self.year = int(mdata.get("year")[0])
            except TypeError:
                pass

            try:
                self.publicdate = dateutil.parser.parse(mdata.get("publicdate")[0])
            except TypeError:
                pass

            try:
                self.addeddate = dateutil.parser.parse(mdata.get("addeddate")[0])
            except TypeError:
                pass

            self.source = mdata.get("source", "")
            self.runtime = mdata.get("runtime", "")
            self.notes = mdata.get("notes", "")

#            self.creator = mdata.get("creator", "")
#            self.collection = mdata.get("collection", "")
#            self.subject = mdata.get("subject", "")

        misc = data.get("misc", {})
        self.misc_image = misc.get("image", "")
        self.misc_header_image = misc.get("header_image", "")

        item = data.get("item")
        if item:
            downloads = item.get("downloads", "")
            if downloads:
                self.downloads = int(downloads)

        self.save()

#        self.licenses.all().delete()
#        for n in mdata.get("licenseurl", []):
#            c, created = License.objects.get_or_create(url=n)
#            self.licenses.add(c)

        self.creators.all().delete()
        for n in mdata.get("creator", []):
            c, created = User.objects.get_or_create(username=n)
            self.creators.add(c)

        self.collections.all().delete()
        names = mdata.get("collection", [])
        for n in names:
            c, created = Collection.objects.get_or_create(shortname=n)
            self.collections.add(c)
            if (len(names) == 1) and (not c.fullname):
                c.fullname = misc.get("collection-title", "")
                c.save()

        self.mediatypes.all().delete()
        for n in mdata.get("mediatype", []):
            c, created = MediaType.objects.get_or_create(name=n)
            self.mediatypes.add(c)

        self.subjects.all().delete()
        for subjects in mdata.get("subject", []):
            for n in [x.strip() for x in subjects.split(";")]:
                c, created = Subject.objects.get_or_create(name=n)
                self.subjects.add(c)
        
        files = data.get("files")
        fileobjects = []
        if files:
            for filename, fdata in files.items():
                f, created = File.objects.get_or_create(asset=self, filename=filename)
                f.sync(fdata)
                fileobjects.append(f)
        for f in fileobjects:
            f.resolve_references()
        
        reviews = data.get("reviews")
        if reviews:
            info = reviews.get("info")
            if info:
                self.reviews_num_reviews = int(info.get("num_reviews", "0"))
                self.reviews_avg_rating = float(info.get("avg_rating", "0"))

            if SYNC_REVIEWS:
                self.reviews.all().delete()
                for rdata in reviews.get("reviews"):
                    rid = rdata.get("review_id")
                    r = Review.objects.create(asset=self)
                    r.sync(rdata)

        self.save()
        # request reindex (via signal)
        reindex_request.send(sender=self.__class__, instance=self)