@classmethod
def get_chronological(self, limit=None, update_cache=False, version=None):
    KEY = ('%s|%s|%s|%s' % (Feature.DEFAULT_MEMCACHE_KEY, 'cronorder', limit, version))
    keys = Feature.get_feature_chunk_memcache_keys(KEY)
    feature_list = memcache.get_multi(keys)
    if ((len(feature_list.keys()) != len(keys)) or update_cache):
        q = Feature.all()
        q.order('impl_status_chrome')
        q.order('name')
        q.filter('impl_status_chrome <=', IN_DEVELOPMENT)
        pre_release = q.fetch(None)
        q = Feature.all()
        q.order('-shipped_milestone')
        q.order('name')
        q.filter('shipped_milestone !=', None)
        shipping_features = q.fetch(None)
        q = Feature.all()
        q.order('-shipped_android_milestone')
        q.order('name')
        q.filter('shipped_milestone =', None)
        android_only_shipping_features = q.fetch(None)
        q = Feature.all()
        q.order('impl_status_chrome')
        q.order('name')
        q.filter('impl_status_chrome =', NO_LONGER_PURSUING)
        no_longer_pursuing_features = q.fetch(None)
        shipping_features.extend(android_only_shipping_features)
        shipping_features = [f for f in shipping_features if (IN_DEVELOPMENT < f.impl_status_chrome < NO_LONGER_PURSUING)]

        def getSortingMilestone(feature):
            feature._sort_by_milestone = (feature.shipped_milestone or feature.shipped_android_milestone)
            return feature
        shipping_features = map(getSortingMilestone, shipping_features)
        shipping_features.sort(key=(lambda f: f.name), reverse=False)
        shipping_features.sort(key=(lambda f: f._sort_by_milestone), reverse=True)
        pre_release.extend(shipping_features)
        pre_release.extend(no_longer_pursuing_features)
        feature_list = [f.format_for_template(version) for f in pre_release]
        self._annotate_first_of_milestones(feature_list, version=version)
        memcache.set_multi(Feature.set_feature_chunk_memcache_keys(KEY, feature_list))
    else:
        temp_feature_list = []
        for key in sorted(feature_list.keys()):
            temp_feature_list.extend(feature_list[key])
        feature_list = temp_feature_list
    return feature_list
@classmethod
def get_chronological(self, limit=None, update_cache=False, version=None):
    KEY = ('%s|%s|%s|%s' % (Feature.DEFAULT_MEMCACHE_KEY, 'cronorder', limit, version))
    keys = Feature.get_feature_chunk_memcache_keys(KEY)
    feature_list = memcache.get_multi(keys)
    if ((len(feature_list.keys()) != len(keys)) or update_cache):
        q = Feature.all()
        q.order('impl_status_chrome')
        q.order('name')
        q.filter('impl_status_chrome <=', IN_DEVELOPMENT)
        pre_release = q.fetch(None)
        q = Feature.all()
        q.order('-shipped_milestone')
        q.order('name')
        q.filter('shipped_milestone !=', None)
        shipping_features = q.fetch(None)
        q = Feature.all()
        q.order('-shipped_android_milestone')
        q.order('name')
        q.filter('shipped_milestone =', None)
        android_only_shipping_features = q.fetch(None)
        q = Feature.all()
        q.order('impl_status_chrome')
        q.order('name')
        q.filter('impl_status_chrome =', NO_LONGER_PURSUING)
        no_longer_pursuing_features = q.fetch(None)
        shipping_features.extend(android_only_shipping_features)
        shipping_features = [f for f in shipping_features if (IN_DEVELOPMENT < f.impl_status_chrome < NO_LONGER_PURSUING)]

        def getSortingMilestone(feature):
            feature._sort_by_milestone = (feature.shipped_milestone or feature.shipped_android_milestone)
            return feature
        shipping_features = map(getSortingMilestone, shipping_features)
        shipping_features.sort(key=(lambda f: f.name), reverse=False)
        shipping_features.sort(key=(lambda f: f._sort_by_milestone), reverse=True)
        pre_release.extend(shipping_features)
        pre_release.extend(no_longer_pursuing_features)
        feature_list = [f.format_for_template(version) for f in pre_release]
        self._annotate_first_of_milestones(feature_list, version=version)
        memcache.set_multi(Feature.set_feature_chunk_memcache_keys(KEY, feature_list))
    else:
        temp_feature_list = []
        for key in sorted(feature_list.keys()):
            temp_feature_list.extend(feature_list[key])
        feature_list = temp_feature_list
    return feature_list