diff data_generation/transformations/pycaptcha/Captcha/File.py @ 167:1f5937e9e530

More moves - transformations into data_generation, added "deep" folder
author Dumitru Erhan <dumitru.erhan@gmail.com>
date Fri, 26 Feb 2010 14:15:38 -0500
parents pycaptcha/Captcha/File.py@4775b4195b4b
children 81f8466dc121
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data_generation/transformations/pycaptcha/Captcha/File.py	Fri Feb 26 14:15:38 2010 -0500
@@ -0,0 +1,53 @@
+""" Captcha.File
+
+Utilities for finding and picking random files from our 'data' directory
+"""
+#
+# PyCAPTCHA Package
+# Copyright (C) 2004 Micah Dowty <micah@navi.cx>
+#
+
+import os, random
+
+# Determine the data directory. This can be overridden after import-time if needed.
+dataDir = os.path.join(os.path.split(os.path.abspath(__file__))[0], "data")
+
+
+class RandomFileFactory(object):
+    """Given a list of files and/or directories, this picks a random file.
+       Directories are searched for files matching any of a list of extensions.
+       Files are relative to our data directory plus a subclass-specified base path.
+       """
+    extensions = []
+    basePath = "."
+
+    def __init__(self, *fileList):
+        self.fileList = fileList
+        self._fullPaths = None
+
+    def _checkExtension(self, name):
+        """Check the file against our given list of extensions"""
+        for ext in self.extensions:
+            if name.endswith(ext):
+                return True
+        return False
+
+    def _findFullPaths(self):
+        """From our given file list, find a list of full paths to files"""
+        paths = []
+        for name in self.fileList:
+            path = os.path.join(dataDir, self.basePath, name)
+            if os.path.isdir(path):
+                for content in os.listdir(path):
+                    if self._checkExtension(content):
+                        paths.append(os.path.join(path, content))
+            else:
+                paths.append(path)
+        return paths
+
+    def pick(self):
+        if self._fullPaths is None:
+            self._fullPaths = self._findFullPaths()
+        return random.choice(self._fullPaths)
+
+### The End ###