Folks,
I'm working on revamping the Gallery/viewer application that I wrote in Django.
One issue I've had is that it's a dynamic on the fly thumbnail creator, but I've used a homebrew (fairly successfully) cached system to keep track of the directories & file contents. Unlike many of the other gallery style applications I don't require deliberate pre-scanning, the files are detected, and thumbnailed in realtime.
But I realized that I can use Watchdog to simplify that logic, and eliminate the need for any caching.
My idea is to have a table that is cleared at every startup, and it just contains the directories that have been scanned for that execution of the program. If watchdog has detected a change in a directory, it's just removed from that table, which makes it a candidate for rescanning the next time someone views that directory.
But the big kicker is that I can't find any documentation that can help me add watchdog monitoring into Django.
Now, I know that Django does something similar in the Dev server (which is what I primarily use right now)… And I've found a stackoverflow, whichs that I can use Signal to capture the SIGINT on shutdown (allowing me to stop watchdog )… I should be able to start watchdog in the __init__ file in the APP directory as well…
Now this is the sample app that I used:
import sys
import time
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
def on_created(event):
print(f"hey, {event.src_path} has been created!")
def on_deleted(event):
print(f"what the f**k! Someone deleted {event.src_path}!")
def on_modified(event):
print(f"hey buddy, {event.src_path} has been modified")
def on_moved(event):
print(f"ok ok ok, someone moved {event.src_path} to {event.dest_path}")
if __name__ == "__main__":
# <— startup —>
patterns = ["*"]
ignore_patterns = None
ignore_directories = False
case_sensitive = True
my_event_handler = PatternMatchingEventHandler(patterns, ignore_patterns, ignore_directories, case_sensitive)
my_event_handler.on_created = on_created
my_event_handler.on_deleted = on_deleted
my_event_handler.on_modified = on_modified
my_event_handler.on_moved = on_moved
path = sys.argv[1]#"."
go_recursively = True
my_observer = Observer()
my_observer.schedule(my_event_handler, path, recursive=go_recursively)
my_observer.start()
# stop startup
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
# shutdown
my_observer.stop()
my_observer.join()
Nothing fancy, just a proof of concept based on code that I found online.
Anyone have any suggestions?
I'm thinking that I could add the startup .. stop startup to an function in the __init__ and run that at startup.
And that capturing the SIGINT, and when SIGINT is tripped, I can do the observer.stop & join?
Would it be that simple? Am I missing something? Is there a better way to do this in Django?
I don't want to have to stand up a celery server, if I can run this, or something equivalent inside of Django…
I haven't been able to (yet) trackdown STATRELOADER, which appears to be the Django built-in equivalent, so I can't tell if I can repurpose that to do this instead?
I'm open to suggestions…
- Benjamin
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/D8BB20B3-0063-4D93-BB39-A39FD66CD860%40schollnick.net.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment