-
Notifications
You must be signed in to change notification settings - Fork 0
/
pathwalker.py
55 lines (45 loc) · 1.82 KB
/
pathwalker.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""This script checks the media directory and adds the new files to the mis."""
from platform import node
from os import walk
from re import compile as regex
from sys import argv
from hashlib import sha512 # pylint: disable-msg=E0611
from database import database
from media import Container
from logging import getLogger
LOG = getLogger('mis.pathwalker')
def get_filter():
"""a filter which takes out only filenames which probably contain media"""
extensions = ['avi', 'mpg', 'mpeg', 'mp4', 'mkv', 'ogv', \
'flv', 'ogg','mov', 'mp3', 'ac3']
regexstring = '\.('
for extension in extensions:
regexstring = regexstring + extension + '|'
regexstring = regexstring[:-1] + ')$'
return regex(regexstring).search
class Pathwalker:
"""The pathwalker is responsible recursively walk a directory
and apply a function to them."""
def __init__(self):
self.nodename = node()
self.database = database()
if len(argv) > 2:
self.nodename = argv[2]
def evaluate_path(self, path, method):
"""Do the actual pathwalking"""
finder = get_filter()
walker = walk(path)
for item in walker:
for filename in item[2]:
if(finder(filename)):
# TODO: use that separator thingie
method(self, item[0] + '/' + filename)
def add_file(self, filename):
"""A function which adds a file to the database"""
if not self.database.file_exists(self.nodename, filename):
LOG.info("inserting " + filename)
sha512sum = sha512(open(filename).read()).hexdigest()
database.add_file(self.node, filename, sha512sum);
else:
LOG.debug("already know" + filename + ", ignoring")
# vim: set tabstop=4 expandtab textwidth=66: #