Mercurial > ift6266
comparison pycaptcha/Captcha/File.py @ 87:4775b4195b4b
code pour la generation de captchas
author | goldfinger |
---|---|
date | Thu, 11 Feb 2010 05:09:46 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
86:b3d76ebf2fac | 87:4775b4195b4b |
---|---|
1 """ Captcha.File | |
2 | |
3 Utilities for finding and picking random files from our 'data' directory | |
4 """ | |
5 # | |
6 # PyCAPTCHA Package | |
7 # Copyright (C) 2004 Micah Dowty <micah@navi.cx> | |
8 # | |
9 | |
10 import os, random | |
11 | |
12 # Determine the data directory. This can be overridden after import-time if needed. | |
13 dataDir = os.path.join(os.path.split(os.path.abspath(__file__))[0], "data") | |
14 | |
15 | |
16 class RandomFileFactory(object): | |
17 """Given a list of files and/or directories, this picks a random file. | |
18 Directories are searched for files matching any of a list of extensions. | |
19 Files are relative to our data directory plus a subclass-specified base path. | |
20 """ | |
21 extensions = [] | |
22 basePath = "." | |
23 | |
24 def __init__(self, *fileList): | |
25 self.fileList = fileList | |
26 self._fullPaths = None | |
27 | |
28 def _checkExtension(self, name): | |
29 """Check the file against our given list of extensions""" | |
30 for ext in self.extensions: | |
31 if name.endswith(ext): | |
32 return True | |
33 return False | |
34 | |
35 def _findFullPaths(self): | |
36 """From our given file list, find a list of full paths to files""" | |
37 paths = [] | |
38 for name in self.fileList: | |
39 path = os.path.join(dataDir, self.basePath, name) | |
40 if os.path.isdir(path): | |
41 for content in os.listdir(path): | |
42 if self._checkExtension(content): | |
43 paths.append(os.path.join(path, content)) | |
44 else: | |
45 paths.append(path) | |
46 return paths | |
47 | |
48 def pick(self): | |
49 if self._fullPaths is None: | |
50 self._fullPaths = self._findFullPaths() | |
51 return random.choice(self._fullPaths) | |
52 | |
53 ### The End ### |