def test_load_with_compound_primary_keys(self):
        # load() does not like compound primary keys.
        flags = [
            FeatureFlag(u'foo', 0, u'bar', u'true'),
            FeatureFlag(u'foo', 0, u'baz', u'false'),
            ]
        other_flag = FeatureFlag(u'notfoo', 0, u'notbar', u'true')
        for flag in flags + [other_flag]:
            getFeatureStore().add(flag)

        self.assertContentEqual(
            flags,
            bulk.load(FeatureFlag, [(ff.scope, ff.flag) for ff in flags]))
Exemple #2
0
    def test_load_with_compound_primary_keys(self):
        # load() does not like compound primary keys.
        flags = [
            FeatureFlag(u'foo', 0, u'bar', u'true'),
            FeatureFlag(u'foo', 0, u'baz', u'false'),
        ]
        other_flag = FeatureFlag(u'notfoo', 0, u'notbar', u'true')
        for flag in flags + [other_flag]:
            getFeatureStore().add(flag)

        self.assertContentEqual(
            flags, bulk.load(FeatureFlag,
                             [(ff.scope, ff.flag) for ff in flags]))
 def append(diff, comment, person):
     """Append a FeatureFlagChangelogEntry to the ChangeLog."""
     store = getFeatureStore()
     feature_flag_change = FeatureFlagChangelogEntry(
         diff, comment, person)
     store.add(feature_flag_change)
     return feature_flag_change
    def setAllRules(self, new_rules):
        """Replace all existing rules with a new set.

        :param new_rules: List of (name, scope, priority, value) tuples.
        """
        # XXX: would be slightly better to only update rules as necessary so
        # we keep timestamps, and to avoid the direct sql etc -- mbp 20100924
        store = getFeatureStore()
        store.execute('DELETE FROM FeatureFlag')
        for (flag, scope, priority, value) in new_rules:
            store.add(
                FeatureFlag(scope=unicode(scope),
                            flag=unicode(flag),
                            value=value,
                            priority=priority))
        store.flush()
    def setAllRules(self, new_rules):
        """Replace all existing rules with a new set.

        :param new_rules: List of (name, scope, priority, value) tuples.
        """
        # XXX: would be slightly better to only update rules as necessary so
        # we keep timestamps, and to avoid the direct sql etc -- mbp 20100924
        store = getFeatureStore()
        store.execute('DELETE FROM FeatureFlag')
        for (flag, scope, priority, value) in new_rules:
            store.add(FeatureFlag(
                scope=unicode(scope),
                flag=unicode(flag),
                value=value,
                priority=priority))
        store.flush()
 def getAllRulesAsTuples(self):
     try:
         # This LBYL may look odd but it is needed. Rendering OOPSes and
         # timeouts also looks up flags, but doing such a lookup can
         # will cause a doom if the db request is not executed or is
         # canceled by the DB - and then results in a failure in
         # zope.app.publication.ZopePublication.handleError when it
         # calls transaction.commit.
         # By Looking this up first, we avoid this and also permit
         # code using flags to work in timed out requests (by appearing to
         # have no rules).
         adapter.get_request_remaining_seconds()
     except adapter.RequestExpired:
         return
     store = getFeatureStore()
     rs = (store.find(FeatureFlag).order_by(FeatureFlag.flag,
                                            Desc(FeatureFlag.priority)))
     for r in rs:
         yield Rule(str(r.flag), str(r.scope), r.priority, r.value)
 def getAllRulesAsTuples(self):
     try:
         # This LBYL may look odd but it is needed. Rendering OOPSes and
         # timeouts also looks up flags, but doing such a lookup can
         # will cause a doom if the db request is not executed or is
         # canceled by the DB - and then results in a failure in
         # zope.app.publication.ZopePublication.handleError when it
         # calls transaction.commit.
         # By Looking this up first, we avoid this and also permit
         # code using flags to work in timed out requests (by appearing to
         # have no rules).
         adapter.get_request_remaining_seconds()
     except adapter.RequestExpired:
         return
     store = getFeatureStore()
     rs = (store
             .find(FeatureFlag)
             .order_by(
                 FeatureFlag.flag,
                 Desc(FeatureFlag.priority)))
     for r in rs:
         yield Rule(str(r.flag), str(r.scope), r.priority, r.value)
 def get():
     """return a result set of `FeatureFlagChangelogEntry` items."""
     store = getFeatureStore()
     rs = store.find(FeatureFlagChangelogEntry)
     rs.order_by(Desc(FeatureFlagChangelogEntry.date_changed))
     return rs
Exemple #9
0
 def enable_queue_flag(self):
     getFeatureStore().add(FeatureFlag(
         scope=u'default', flag=u'code.branchmergequeue',
         value=u'on', priority=1))
Exemple #10
0
 def test_defaultEmptyCollection(self):
     # there are no settings in the sampledata
     store = getFeatureStore()
     self.assertTrue(store.find(FeatureFlag).is_empty())
 def enable_queue_flag(self):
     getFeatureStore().add(FeatureFlag(
         scope=u'default', flag=u'code.branchmergequeue',
         value=u'on', priority=1))
 def append(diff, comment, person):
     """Append a FeatureFlagChangelogEntry to the ChangeLog."""
     store = getFeatureStore()
     feature_flag_change = FeatureFlagChangelogEntry(diff, comment, person)
     store.add(feature_flag_change)
     return feature_flag_change
 def get():
     """return a result set of `FeatureFlagChangelogEntry` items."""
     store = getFeatureStore()
     rs = store.find(FeatureFlagChangelogEntry)
     rs.order_by(Desc(FeatureFlagChangelogEntry.date_changed))
     return rs