Project import generated by Copybara.

GitOrigin-RevId: d9e9e3fb4e31372ec1fb43b178994ca78fa8fe70
diff --git a/features/spamtraining.py b/features/spamtraining.py
new file mode 100644
index 0000000..625fa53
--- /dev/null
+++ b/features/spamtraining.py
@@ -0,0 +1,63 @@
+"""Cron job to train spam model with all spam data."""
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+
+import logging
+import settings
+import time
+
+from googleapiclient import discovery
+from googleapiclient import errors
+from google.appengine.api import app_identity
+from oauth2client.client import GoogleCredentials
+import webapp2
+
+class TrainSpamModelCron(webapp2.RequestHandler):
+
+  """Submit a job to ML Engine which uploads a spam classification model by
+     training on an already packaged trainer.
+  """
+  def get(self):
+
+    credentials = GoogleCredentials.get_application_default()
+    ml = discovery.build('ml', 'v1', credentials=credentials)
+
+    app_id = app_identity.get_application_id()
+    project_id = 'projects/%s' % (app_id)
+    job_id = 'spam_trainer_%d' % time.time()
+    training_input = {
+        'scaleTier': 'BASIC',
+        'packageUris': [
+            settings.trainer_staging
+            if app_id == "monorail-staging" else
+            settings.trainer_prod
+        ],
+        'pythonModule': 'trainer.task',
+        'args': [
+            '--train-steps',
+            '1000',
+            '--verbosity',
+            'DEBUG',
+            '--gcs-bucket',
+            'monorail-prod.appspot.com',
+            '--gcs-prefix',
+            'spam_training_data',
+            '--trainer-type',
+            'spam'
+        ],
+        'region': 'us-central1',
+        'jobDir': 'gs://%s-mlengine/%s' % (app_id, job_id),
+        'runtimeVersion': '1.2'
+    }
+    job_info = {
+        'jobId': job_id,
+        'trainingInput': training_input
+    }
+    request = ml.projects().jobs().create(parent=project_id, body=job_info)
+
+    try:
+      response = request.execute()
+      logging.info(response)
+    except errors.HttpError, err:
+      logging.error(err._get_reason())