summaryrefslogtreecommitdiff
path: root/morphlib/morphologyloader.py
diff options
context:
space:
mode:
Diffstat (limited to 'morphlib/morphologyloader.py')
-rw-r--r--morphlib/morphologyloader.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/morphlib/morphologyloader.py b/morphlib/morphologyloader.py
new file mode 100644
index 00000000..0a1f6513
--- /dev/null
+++ b/morphlib/morphologyloader.py
@@ -0,0 +1,52 @@
+# Copyright (C) 2012 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+import os
+import StringIO
+import urlparse
+
+import morphlib
+
+
+class MorphologyLoader(object):
+
+ '''Load morphologies from git and parse them into Morphology objects.'''
+
+ def __init__(self, settings):
+ self.settings = settings
+ self.morphologies = {}
+
+ def load(self, repo, ref, filename):
+ key = (repo, ref, filename)
+
+ if key in self.morphologies:
+ return self.morphologies[key]
+ else:
+ morph = self._get_morph_from_git(repo, ref, filename)
+ self.morphologies[key] = morph
+ return morph
+
+ def _get_morph_text(self, repo, ref, filename): # pragma: no cover
+ return morphlib.git.get_morph_text(repo, ref, filename)
+
+ def _get_morph_from_git(self, repo, ref, filename):
+ morph_text = self._get_morph_text(repo, ref, filename)
+ scheme, netlock, path, params, query, frag = urlparse.urlparse(repo)
+ f = StringIO.StringIO(morph_text)
+ f.name = os.path.join(path, filename)
+ morph = morphlib.morphology.Morphology(f,
+ self.settings['git-base-url'])
+ return morph