From 110008e9091968837d0137e1b61a29851c248154 Mon Sep 17 00:00:00 2001
From: Rudi Grinberg <rudi.grinberg@gmail.com>
Date: Wed, 7 Nov 2012 11:29:39 -0500
Subject: [PATCH] added saas shit

---
 .../media-monitor2/media/saas/__init__.py     |  0
 .../media/saas/airtimeinstance.py             | 32 +++++++++++++++++++
 .../media-monitor2/media/saas/thread.py       | 19 +++++++++++
 3 files changed, 51 insertions(+)
 create mode 100644 python_apps/media-monitor2/media/saas/__init__.py
 create mode 100644 python_apps/media-monitor2/media/saas/airtimeinstance.py
 create mode 100644 python_apps/media-monitor2/media/saas/thread.py

diff --git a/python_apps/media-monitor2/media/saas/__init__.py b/python_apps/media-monitor2/media/saas/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/python_apps/media-monitor2/media/saas/airtimeinstance.py b/python_apps/media-monitor2/media/saas/airtimeinstance.py
new file mode 100644
index 000000000..ed37caa41
--- /dev/null
+++ b/python_apps/media-monitor2/media/saas/airtimeinstance.py
@@ -0,0 +1,32 @@
+import os
+
+from media.monitor.exceptions import NoConfigFile
+from media.monitor.pure import LazyProperty
+from media.monitor.config import MMConfig
+from api_cients import AirtimeApiClient
+
+class AirtimeInstance(object):
+    """ AirtimeInstance is a class that abstracts away every airtime
+    instance by providing all the necessary objects required to interact
+    with the instance. ApiClient, configs, root_directory """
+
+    def __init__(self,name, root_path, config_paths):
+        """ name is an internal name only """
+        for cfg in ['api_client','media_monitor', 'logging']:
+            if cfg not in config_paths: raise NoConfigFile(config_paths)
+            elif not os.path.exists(config_paths[cfg]):
+                raise NoConfigFile(config_paths[cfg])
+        self.name         = name
+        self.config_paths = config_paths
+        self.root_path    = root_path
+
+    def __str__(self):
+        return "%s,%s(%s)" % (self.name, self.root_path, self.config_paths)
+
+    @LazyProperty
+    def api_client(self):
+        return AirtimeApiClient(config_path=self.config_paths['api_client'])
+
+    @LazyProperty
+    def mm_config(self):
+        return MMConfig(self.config_paths['media_monitor'])
diff --git a/python_apps/media-monitor2/media/saas/thread.py b/python_apps/media-monitor2/media/saas/thread.py
new file mode 100644
index 000000000..b71c4a8fb
--- /dev/null
+++ b/python_apps/media-monitor2/media/saas/thread.py
@@ -0,0 +1,19 @@
+import threading
+
+tc = threading.local()
+
+class InstanceThread(threading.Thread):
+    def __init__(self,user, *args, **kwargs):
+        super(InstanceThread, self).__init__(*args, **kwargs)
+        self._user = user
+
+    def run(self):
+        tc._user = self._user
+        
+    def user(self):
+        return tc._user
+
+class InstanceInheritingThread(threading.Thread):
+    def __init__(self, *args, **kwargs):
+        super(InstanceInheritingThread, self).__init__(*args, **kwargs)
+        self.user = tc._user