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())