Milimetric has submitted this change and it was merged.
Change subject: no longer using flask-wtf
......................................................................
no longer using flask-wtf
Change-Id: Ibd18201a0bd72227f331a7143e1cd9c856c3b69f
---
M setup.py
M tests/test_metrics/test_namespace_edits.py
A tests/test_metrics/test_random.py
M tests/test_queue/test_queue_setup_teardown.py
M wikimetrics/configurables.py
M wikimetrics/metrics/dummy.py
M wikimetrics/metrics/metric.py
M wikimetrics/metrics/namespace_edits.py
M wikimetrics/templates/form_for_metrics.html
9 files changed, 72 insertions(+), 51 deletions(-)
Approvals:
Milimetric: Verified; Looks good to me, approved
diff --git a/setup.py b/setup.py
index 8b40605..9c96c3c 100644
--- a/setup.py
+++ b/setup.py
@@ -17,7 +17,7 @@
'flask == 0.9',
'flask-login',
'flask-oauth',
- 'flask-wtf',
+ 'wtforms',
'nose == 1.3.0',
'coverage == 3.6',
'celery == 3.0',
diff --git a/tests/test_metrics/test_namespace_edits.py
b/tests/test_metrics/test_namespace_edits.py
index 77beb31..2c2bcc8 100644
--- a/tests/test_metrics/test_namespace_edits.py
+++ b/tests/test_metrics/test_namespace_edits.py
@@ -8,15 +8,6 @@
class NamespaceEditsDatabaseTest(DatabaseTest):
- def setUp(self):
- super(NamespaceEditsDatabaseTest, self).setUp()
- self.ctx = app.test_request_context()
- self.ctx.push()
-
- def tearDown(self):
- self.ctx.pop()
- super(NamespaceEditsDatabaseTest, self).tearDown()
-
def test_finds_edits(self):
cohort = self.session.query(Cohort).filter_by(name='test').one()
@@ -39,15 +30,6 @@
class NamespaceEditsFullTest(QueueDatabaseTest):
- def setUp(self):
- super(NamespaceEditsFullTest, self).setUp()
- self.ctx = app.test_request_context()
- #self.ctx.push()
-
- def tearDown(self):
- #self.ctx.pop()
- super(NamespaceEditsFullTest, self).tearDown()
-
def test_namespace_edits(self):
cohort = self.session.query(Cohort).filter_by(name='test').one()
diff --git a/tests/test_metrics/test_random.py
b/tests/test_metrics/test_random.py
new file mode 100644
index 0000000..b42ea1a
--- /dev/null
+++ b/tests/test_metrics/test_random.py
@@ -0,0 +1,29 @@
+from nose.tools import assert_true
+from tests.fixtures import DatabaseTest, QueueDatabaseTest
+
+from wikimetrics import app
+from wikimetrics.metrics import RandomMetric
+from wikimetrics.models import Cohort, MetricJob
+
+
+class DummyTest(DatabaseTest):
+
+ def test_1(self):
+ cohort = self.session.query(Cohort).filter_by(name='test').one()
+
+ metric = RandomMetric()
+ results = metric(list(cohort), self.mwSession)
+
+ assert_true(results[results.keys()[0]] > 1000)
+
+
+class DummyQueueTest(QueueDatabaseTest):
+
+ def test_1(self):
+ cohort = self.session.query(Cohort).filter_by(name='test').one()
+
+ metric = RandomMetric()
+ job = MetricJob(metric, list(cohort), 'enwiki')
+ results = job.run.delay(job).get()
+
+ assert_true(results[results.keys()[0]] > 1000)
diff --git a/tests/test_queue/test_queue_setup_teardown.py
b/tests/test_queue/test_queue_setup_teardown.py
index 2dfe289..60a6008 100644
--- a/tests/test_queue/test_queue_setup_teardown.py
+++ b/tests/test_queue/test_queue_setup_teardown.py
@@ -1,5 +1,5 @@
from nose.tools import assert_not_equals
-from tests.fixtures import QueueTest
+from tests.fixtures import QueueTest, WebTest
from wikimetrics.models import MetricJob
from wikimetrics.metrics import RandomMetric
@@ -16,3 +16,9 @@
None,
'task did not run on celery queue'
)
+
+
+class QueueAndWebTest(QueueTest, WebTest):
+
+ def test_task(self):
+ pass
diff --git a/wikimetrics/configurables.py b/wikimetrics/configurables.py
index e9d7e8a..0981855 100644
--- a/wikimetrics/configurables.py
+++ b/wikimetrics/configurables.py
@@ -66,7 +66,7 @@
from celery import Celery
# create and configure celery app
-
+
global queue
queue = Celery('wikimetrics', include=['wikimetrics'])
config_object = create_object_from_config_file(args.celery_config)
@@ -75,12 +75,12 @@
queue.config_from_object(args.override_config)
# makes Flask app context available to celery tasks
- TaskBase = queue.Task
+ #TaskBase = queue.Task
- class ContextTask(TaskBase):
- abstract = True
- def __call__(self, *args, **kwargs):
- with app.app_context():
- return TaskBase.__call__(self, *args, **kwargs)
- queue.Task = ContextTask
+ #class ContextTask(TaskBase):
+ #abstract = True
+ #def __call__(self, *args, **kwargs):
+ #with app.app_context():
+ #return TaskBase.__call__(self, *args, **kwargs)
+ #queue.Task = ContextTask
diff --git a/wikimetrics/metrics/dummy.py b/wikimetrics/metrics/dummy.py
index ba9f8cc..4fb6384 100644
--- a/wikimetrics/metrics/dummy.py
+++ b/wikimetrics/metrics/dummy.py
@@ -1,4 +1,5 @@
import random
+from wtforms import IntegerField
from metric import Metric
import logging
@@ -19,6 +20,8 @@
label = 'Random'
description = 'test metric, compute random numbers for all users in your
cohort(s)'
+ test_field = IntegerField(default=1000)
+
def __call__(self, user_ids, session):
"""
Parameters:
@@ -28,4 +31,4 @@
Returns:
dictionary from user ids to the number of edit reverts found.
"""
- return {user: random.random() for user in user_ids}
+ return {user: random.random() + self.test_field.data for user in
user_ids}
diff --git a/wikimetrics/metrics/metric.py b/wikimetrics/metrics/metric.py
index 153b5e1..573f225 100644
--- a/wikimetrics/metrics/metric.py
+++ b/wikimetrics/metrics/metric.py
@@ -1,4 +1,4 @@
-from flask.ext import wtf
+from wtforms import Form
import logging
logger = logging.getLogger(__name__)
@@ -7,12 +7,13 @@
]
-class Metric(wtf.Form):
+# TODO: implement csrf request token since we're no longer using wtf.Form
+class Metric(Form):
"""
This class is the parent of all Metric implementations.
Child implementations should be callable and should take in users
and return the metric computation results for each user.
- In addition, Metric inherits from wtf.Form and therefore child
implementations
+ In addition, Metric inherits from wtforms Form and therefore child
implementations
can provide WTForms field definitions of their parametrization.
To enable user interaction with child implementations, Metric also defines
some
class level properties that can be introspected by an interface.
@@ -37,15 +38,15 @@
"""
return {user: None for user in user_ids}
- def __init__(self, *args, **kwargs):
- """
- This __init__ handles the problem with calling wtf.Form.__init__()
- outside of a flask request context.
- """
- try:
- wtf.Form.__init__(self, *args, **kwargs)
- except(RuntimeError):
- logger.debug(
- 'initializing Metric outside Flask context,'
- 'most likely in testing or interactive mode'
- )
+ #def __init__(self, *args, **kwargs):
+ #"""
+ #This __init__ handles the problem with calling Form.__init__()
+ #outside of a flask request context.
+ #"""
+ #try:
+ #Form.__init__(self, *args, **kwargs)
+ #except(RuntimeError):
+ #logger.debug(
+ #'initializing Metric outside Flask context,'
+ #'most likely in testing or interactive mode'
+ #)
diff --git a/wikimetrics/metrics/namespace_edits.py
b/wikimetrics/metrics/namespace_edits.py
index f5b9a45..d427f96 100644
--- a/wikimetrics/metrics/namespace_edits.py
+++ b/wikimetrics/metrics/namespace_edits.py
@@ -1,4 +1,5 @@
-from flask.ext import wtf
+from wtforms import Field
+from wtforms.widgets import TextInput
from sqlalchemy import func
from metric import Metric
from wikimetrics.models import Page, Revision
@@ -9,14 +10,14 @@
'NamespaceEdits',
]
-class CommaSeparatedIntegerListField(wtf.Field):
+class CommaSeparatedIntegerListField(Field):
print 'parsing CommaSeparatedIntegerListField.__iter__()'
def __iter__(self):
return iter(self.data)
- widget = wtf.TextInput()
+ widget = TextInput()
def _value(self):
""" overrides wtforms representation which is sends to server """
@@ -30,7 +31,7 @@
if valuelist:
self.data = [int(x.strip()) for x in valuelist[0].split(',')]
else:
- self.data = []
+ self.data = []
class NamespaceEdits(Metric):
@@ -56,7 +57,6 @@
label = 'Edits'
description = 'Compute the number of edits in a specific namespace of a
mediawiki project'
- #namespaces = wtf.IntegerField(default=[1], description='0, 2, 4, etc.')
namespaces = CommaSeparatedIntegerListField(default = [0], description='0,
2, 4, etc.')
def __call__(self, user_ids, session):
@@ -74,7 +74,7 @@
session
.query(Revision.rev_user, func.count(Revision.rev_id))
.join(Page)
- .filter(Page.page_namespace.in_(self.namespaces))
+ .filter(Page.page_namespace.in_(self.namespaces.data))
.filter(Revision.rev_user.in_(user_ids))
.group_by(Revision.rev_user)
.all()
diff --git a/wikimetrics/templates/form_for_metrics.html
b/wikimetrics/templates/form_for_metrics.html
index 055ca8e..7530701 100644
--- a/wikimetrics/templates/form_for_metrics.html
+++ b/wikimetrics/templates/form_for_metrics.html
@@ -1,5 +1,5 @@
<form class="form-horizontal metric-configuration" method="POST"
action="{{action}}" data-bind="submit: $root.saveMetricConfiguration">
- {{ form.hidden_tag() }}
+ {# form.hidden_tag() #}
{% for f in form if f.label.text != 'Csrf Token' %}
<div class="control-group">
{{ f.label(class="control-label") }}
--
To view, visit https://gerrit.wikimedia.org/r/71721
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ibd18201a0bd72227f331a7143e1cd9c856c3b69f
Gerrit-PatchSet: 1
Gerrit-Project: analytics/wikimetrics
Gerrit-Branch: master
Gerrit-Owner: Milimetric <[email protected]>
Gerrit-Reviewer: Milimetric <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits