예제 #1
0
파일: package.py 프로젝트: jasonzou/ckan
    def metadata_modified(self):
        """
        Return most recent timestamp for revisions related to this package.
        NB Excludes changes to the package's groups
        """
        import ckan.model as model

        where = [model.package_table.c.id == self.id]
        where_clauses = [
            and_(model.package_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.package_extra_table.c.package_id == model.package_table.c.id,
                 model.package_extra_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.package_relationship_table.c.subject_package_id == model.package_table.c.id,
                 model.package_relationship_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.package_relationship_table.c.object_package_id == model.package_table.c.id,
                 model.package_relationship_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.resource_group_table.c.package_id == model.package_table.c.id,
                 model.resource_group_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.resource_group_table.c.package_id == model.package_table.c.id,
                 model.resource_table.c.resource_group_id == model.resource_group_table.c.id,
                 model.resource_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.package_tag_table.c.package_id == model.package_table.c.id,
                 model.package_tag_table.c.revision_id == model.revision_table.c.id, *where)
            ]

        query = union(*[select([model.revision_table.c.timestamp], x) for x in where_clauses]
                      ).order_by('timestamp DESC').limit(1)
        # Use current connection because we might be in a 'before_commit' of
        # a SessionExtension - only by using the current connection can we get
        # at the newly created revision etc. objects.
        conn = model.Session.connection() 
        result = conn.execute(query).fetchone()

        if result:
            result_datetime = iso_date_to_datetime_for_sqlite(result[0])
            timestamp_without_usecs = result_datetime.utctimetuple()
            usecs = float(result_datetime.microsecond) / 1e6
            # use timegm instead of mktime, because we don't want it localised
            timestamp_float = timegm(timestamp_without_usecs) + usecs
            return datetime.datetime.utcfromtimestamp(timestamp_float)
예제 #2
0
파일: package.py 프로젝트: arkka/ckan
    def metadata_modified(self):
        """
        Return most recent timestamp for revisions related to this package.
        NB Excludes changes to the package's groups
        """
        from ckan import model
        where = [model.package_table.c.id == self.id]
        where_clauses = [
            and_(model.package_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.package_extra_table.c.package_id == model.package_table.c.id,
                 model.package_extra_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.package_relationship_table.c.subject_package_id == model.package_table.c.id,
                 model.package_relationship_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.package_relationship_table.c.object_package_id == model.package_table.c.id,
                 model.package_relationship_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.resource_group_table.c.package_id == model.package_table.c.id,
                 model.resource_group_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.resource_group_table.c.package_id == model.package_table.c.id,
                 model.resource_table.c.resource_group_id == model.resource_group_table.c.id,
                 model.resource_table.c.revision_id == model.revision_table.c.id, *where),
            and_(model.package_tag_table.c.package_id == model.package_table.c.id,
                 model.package_tag_table.c.revision_id == model.revision_table.c.id, *where)
            ]

        query = union(*[select([model.revision_table.c.timestamp], x) for x in where_clauses]
                      ).order_by('timestamp DESC').limit(1)
        # Use current connection because we might be in a 'before_commit' of
        # a SessionExtension - only by using the current connection can we get
        # at the newly created revision etc. objects.
        conn = model.Session.connection()
        result = conn.execute(query).fetchone()

        if result:
            result_datetime = _types.iso_date_to_datetime_for_sqlite(result[0])
            timestamp_without_usecs = result_datetime.utctimetuple()
            usecs = float(result_datetime.microsecond) / 1e6
            # use timegm instead of mktime, because we don't want it localised
            timestamp_float = timegm(timestamp_without_usecs) + usecs
            return datetime.datetime.utcfromtimestamp(timestamp_float)
예제 #3
0
파일: package.py 프로젝트: gabelula/ckan
 def last_modified(*av):
     """
     Return most recent timestamp for a package revision, with optionally
     extra where clause.
     """
     from ckan import model
     where = []
     for arg in av:
         if isinstance(arg, expression.ClauseElement) or isinstance(arg, basestring):
             where.append(arg)
     where_clauses = [
         and_(model.package_table.c.revision_id == model.revision_table.c.id, *where),
         and_(model.package_extra_table.c.package_id == model.package_table.c.id,
              model.package_extra_table.c.revision_id == model.revision_table.c.id, *where),
         and_(model.package_relationship_table.c.subject_package_id == model.package_table.c.id,
              model.package_relationship_table.c.revision_id == model.revision_table.c.id, *where),
         and_(model.package_relationship_table.c.object_package_id == model.package_table.c.id,
              model.package_relationship_table.c.revision_id == model.revision_table.c.id, *where),
         and_(model.resource_group_table.c.package_id == model.package_table.c.id,
              model.resource_group_table.c.revision_id == model.revision_table.c.id, *where),
         and_(model.resource_group_table.c.package_id == model.package_table.c.id,
              model.resource_table.c.resource_group_id == model.resource_group_table.c.id,
              model.resource_table.c.revision_id == model.revision_table.c.id, *where),
         and_(model.package_tag_table.c.package_id == model.package_table.c.id,
              model.package_tag_table.c.revision_id == model.revision_table.c.id, *where)
         ]
     query = union(*[select([model.revision_table.c.timestamp], x) for x in where_clauses]
                   ).order_by("timestamp DESC").limit(1)
     conn = model.meta.engine.connect()
     result = conn.execute(query).fetchone()
     if result:
         result_datetime = iso_date_to_datetime_for_sqlite(result[0])
         timestamp = result_datetime.utctimetuple()
         usecs = float(result_datetime.microsecond) / 1e6
     else:
         timestamp, usecs = gmtime(), 0
     # use timegm instead of mktime, because we don't want it localised
     return timegm(timestamp) + usecs