aboutsummaryrefslogtreecommitdiff
path: root/rpki/db_router.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2014-09-16 18:29:46 +0000
committerRob Austein <sra@hactrn.net>2014-09-16 18:29:46 +0000
commit180a9c09f9705283e11caa2df408e6b2353f3b9d (patch)
treea0861ddd006017e9f4fe754bd1abefa36a9a73cb /rpki/db_router.py
parentc02686daf6dcc4175f119adc5d19261f577b2856 (diff)
parent7c2fb9ca36f120369797072e534041daae6cd8f9 (diff)
Merge changes from branches/tk713 into branches/tk705. See #705, #713.
svn path=/branches/tk705/; revision=5956
Diffstat (limited to 'rpki/db_router.py')
-rw-r--r--rpki/db_router.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/rpki/db_router.py b/rpki/db_router.py
new file mode 100644
index 00000000..89ed6e5d
--- /dev/null
+++ b/rpki/db_router.py
@@ -0,0 +1,57 @@
+# $Id$
+
+# Copyright (C) 2014 Dragon Research Labs ("DRL")
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND DRL DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL DRL BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+"""
+Global Django ORM database router for the RPKI CA code.
+"""
+
+# Reference:
+# https://docs.djangoproject.com/en/1.6/topics/db/multi-db/
+
+class RPKIDBRouter(object):
+ """
+ Django ORM database router for RPKI code. rpkid and pubd get their
+ own databases, named "rpkidb" and "pubdb", respectively. Everything
+ else goes to the "default" database.
+ """
+
+ dedicated = ("rpkidb", "pubdb")
+
+ def db_for_read(self, model, **hints):
+ if model._meta.app_label in self.dedicated:
+ return model._meta.app_label
+ else:
+ return "default"
+
+ def db_for_write(self, model, **hints):
+ if model._meta.app_label in self.dedicated:
+ return model._meta.app_label
+ else:
+ return "default"
+
+ def allow_relation(self, obj1, obj2, **hints):
+ if obj1._meta.app_label in self.dedicated and obj1._meta.app_label == obj2._meta.app_label:
+ return True
+ elif obj1._meta.app_label not in self.dedicated and obj2._meta.app_label not in self.dedicated:
+ return True
+ else:
+ return None
+
+ def allow_syncdb(self, db, model):
+ if model._meta.app_label in self.dedicated:
+ return db == model._meta.app_label
+ else:
+ return db not in self.dedicated