-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 0121691
Showing
3 changed files
with
168 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import sys | ||
import time | ||
|
||
from watchdog.observers import Observer | ||
from watchdog.events import PatternMatchingEventHandler | ||
from pathlib import Path | ||
|
||
if sys.version_info[0] != 3: | ||
print("# This script requires Python version 3.x") | ||
sys.exit(1) | ||
|
||
class MyHandler(PatternMatchingEventHandler): | ||
base = None | ||
queue = [] | ||
|
||
def __init__(self, base): | ||
super(MyHandler, self).__init__() | ||
self.base = base | ||
|
||
def process(self, event): | ||
source_path = Path(event.src_path).relative_to(self.base) | ||
dest_path = None | ||
if hasattr(event, 'dest_path'): | ||
dest_path = Path(event.dest_path).relative_to(self.base) | ||
|
||
if str(source_path) == ".": | ||
return # ignore | ||
|
||
book = source_path.parts[0] | ||
|
||
nicetext = event.event_type + " " + book | ||
if len(source_path.parts) > 1 or dest_path: | ||
nicetext += ':' | ||
if len(source_path.parts) > 1: | ||
nicetext += ' directory ' if event.is_directory else ' file ' | ||
nicetext += '/'.join(source_path.parts[1:]) | ||
if dest_path: | ||
nicetext += ' to ' | ||
if len(dest_path.parts) > 1: | ||
nicetext += '/'.join(dest_path.parts[1:]) + ' in ' | ||
if source_path.parts[0] != dest_path.parts[0]: | ||
nicetext += ' book '+dest_path.parts[0] | ||
nicetext = " ".join(nicetext.split()) | ||
print(nicetext) | ||
|
||
book_event = { | ||
'book': book, | ||
'source': str(source_path), | ||
'dest': str(dest_path), | ||
'nicetext': nicetext, | ||
'event_type': str(event.event_type), | ||
'is_directory': event.is_directory | ||
} | ||
|
||
book_in_queue = False | ||
for queue_item in self.queue: | ||
if queue_item['book'] == book: | ||
book_in_queue = True | ||
event_in_queue = False | ||
for queue_event in queue_item['events']: | ||
if queue_event == book_event: | ||
event_in_queue = True | ||
if not event_in_queue: | ||
queue_item['events'].append(book_event) | ||
queue_item['last_event'] = int(time.time()) | ||
break | ||
if not book_in_queue: | ||
self.queue.append({ | ||
'book': book, | ||
'events': [ book_event ], | ||
'last_event': int(time.time()) | ||
}) | ||
|
||
def on_created(self, event): | ||
self.process(event) | ||
|
||
def on_modified(self, event): | ||
self.process(event) | ||
|
||
def on_moved(self, event): | ||
self.process(event) | ||
|
||
def on_deleted(self, event): | ||
self.process(event) | ||
|
||
def handle_book_events(self): | ||
x = [b['book'] + ": " + str(int(time.time()) - b['last_event']) for b in self.queue] | ||
|
||
books = [b for b in self.queue if int(time.time()) - b['last_event'] > 10] | ||
if not len(books): | ||
return | ||
book = books[0] | ||
|
||
new_queue = [b for b in self.queue if b is not book] | ||
self.queue = new_queue | ||
print("processing book: "+book['book']) | ||
|
||
|
||
if __name__ == '__main__': | ||
args = sys.argv[1:] | ||
myHandler = MyHandler(args[0]) | ||
observer = Observer() | ||
observer.schedule(myHandler, path=myHandler.base if args else '.', recursive=True) | ||
observer.start() | ||
|
||
try: | ||
while True: | ||
time.sleep(1) | ||
myHandler.handle_book_events() | ||
except KeyboardInterrupt: | ||
observer.stop() | ||
|
||
observer.join() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
watchdog==0.8.3 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
#!/bin/bash | ||
|
||
# fail and exit on first error | ||
set -e | ||
|
||
# go to script dir | ||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" | ||
cd "$DIR" | ||
|
||
# make resource dir for testing and start produksjonsystem | ||
mkdir -p target/resources | ||
./produksjonsystem.py "$DIR/target/resources" & | ||
sleep 1 | ||
|
||
# do some basic stuff | ||
cd target/resources | ||
touch foo.xml | ||
sleep 0.5 | ||
echo bar >> foo.xml | ||
sleep 0.5 | ||
mv foo.xml bar.xml | ||
sleep 0.5 | ||
rm bar.xml | ||
sleep 2 | ||
|
||
mkdir -p book1 | ||
sleep 0.5 | ||
touch book1/ncc.html | ||
sleep 0.5 | ||
touch book1/audio1.mp3 | ||
sleep 0.5 | ||
touch book1/audio2.mp3 | ||
sleep 0.5 | ||
touch book1/content.html | ||
sleep 0.5 | ||
touch book1/image.png | ||
sleep 2 | ||
|
||
mkdir -p book2 | ||
sleep 0.5 | ||
touch book2/ncc.html | ||
sleep 0.5 | ||
mv book1/image.png book2/image.png | ||
|
||
sleep 15 | ||
|
||
rm * -r | ||
|
||
# stop produksjonsystem | ||
ps aux | grep produksjonsystem.py | grep -v grep | awk '{print $2}' | xargs kill | ||
wait 2>/dev/null | ||
sleep 1 |