reformat examples in README.md and docs/config.py

This commit is contained in:
2020-11-04 15:13:51 +01:00
parent 013881b69b
commit 0b0f21d112
2 changed files with 151 additions and 103 deletions

View File

@@ -31,7 +31,8 @@ With *auto_create* set to True, possibly missing subdirectories in *dst_re* are
Set the mode of moved/copied files/directories with *filemode* and *dirmode*. Ownership of moved/copied files/directories is set with *user* and *group*. Mode and ownership is also set to automatically created subdirectories. Set the mode of moved/copied files/directories with *filemode* and *dirmode*. Ownership of moved/copied files/directories is set with *user* and *group*. Mode and ownership is also set to automatically created subdirectories.
Use *logname* in log messages. Use *logname* in log messages.
```python ```python
rule = Rule(action="move", rule = Rule(
action="move",
src_re="^/src_path/(?P<path>.*).to_move$", src_re="^/src_path/(?P<path>.*).to_move$",
dst_re="/dst_path/\g<path>", dst_re="/dst_path/\g<path>",
auto_create=False, auto_create=False,
@@ -41,7 +42,8 @@ rule = Rule(action="move",
user=None, user=None,
group=None) group=None)
fm = FileManager(rules=[rule], fm = FileManager(
rules=[rule],
logname="FileManager") logname="FileManager")
``` ```
FileManager provides a task **fm.task**. FileManager provides a task **fm.task**.
@@ -53,7 +55,8 @@ pyinotifyd has different schedulers to schedule tasks with an optional delay. Th
TaskScheduler schedules *task* with an optional *delay* in seconds. Use the *files* and *dirs* arguments to schedule tasks only for files and/or directories. TaskScheduler schedules *task* with an optional *delay* in seconds. Use the *files* and *dirs* arguments to schedule tasks only for files and/or directories.
Use *logname* in log messages. All arguments except for *task* are optional. Use *logname* in log messages. All arguments except for *task* are optional.
```python ```python
s = TaskScheduler(task=task, s = TaskScheduler(
task=task,
files=True, files=True,
dirs=False, dirs=False,
delay=0, delay=0,
@@ -74,7 +77,8 @@ s1 = ShellScheduler(cmd="/usr/local/bin/task.sh {maskname} {pathname} {src_pathn
EventMap maps event types to tasks. It is possible to set a list of tasks to run multiple tasks on a single event. If the task of an event type is set to None, it is ignored. EventMap maps event types to tasks. It is possible to set a list of tasks to run multiple tasks on a single event. If the task of an event type is set to None, it is ignored.
This is an example: This is an example:
```python ```python
event_map = EventMap({"IN_CLOSE_NOWRITE": [s.schedule, s1.schedule], event_map = EventMap({
"IN_CLOSE_NOWRITE": [s.schedule, s1.schedule],
"IN_CLOSE_WRITE": s.schedule}) "IN_CLOSE_WRITE": s.schedule})
``` ```
The following event types are available: The following event types are available:
@@ -97,7 +101,8 @@ The following event types are available:
### Watches ### Watches
Watch watches *path* for event types in *event_map* and execute the corresponding task(s). If *rec* is True, a watch will be added on each subdirectory in *path*. If *auto_add* is True, a watch will be added automatically on newly created subdirectories in *path*. Watch watches *path* for event types in *event_map* and execute the corresponding task(s). If *rec* is True, a watch will be added on each subdirectory in *path*. If *auto_add* is True, a watch will be added automatically on newly created subdirectories in *path*.
```python ```python
watch = Watch(path="/tmp", watch = Watch(
path="/tmp",
event_map=event_map, event_map=event_map,
rec=False, rec=False,
auto_add=False) auto_add=False)
@@ -106,7 +111,8 @@ watch = Watch(path="/tmp",
### PyinotifydConfig ### PyinotifydConfig
pyinotifyd expects an instance of PyinotifydConfig named **pyinotifyd_config** that holds its config options. The options are a list of *watches*, the *loglevel* (see https://docs.python.org/3/library/logging.html#levels) and the *shutdown_timeout*. pyinotifyd will wait *shutdown_timeout* seconds for pending tasks to complete during shutdown. pyinotifyd expects an instance of PyinotifydConfig named **pyinotifyd_config** that holds its config options. The options are a list of *watches*, the *loglevel* (see https://docs.python.org/3/library/logging.html#levels) and the *shutdown_timeout*. pyinotifyd will wait *shutdown_timeout* seconds for pending tasks to complete during shutdown.
```python ```python
pyinotifyd_config = PyinotifydConfig(watches=[watch], pyinotifyd_config = PyinotifydConfig(
watches=[watch],
loglevel=logging.INFO, loglevel=logging.INFO,
shutdown_timeout=30) shutdown_timeout=30)
``` ```
@@ -128,80 +134,98 @@ systemctl start pyinotifyd.service
async def task(event, task_id): async def task(event, task_id):
logging.info(f"{task_id}: execute example task: {event}") logging.info(f"{task_id}: execute example task: {event}")
s = TaskScheduler(task=task, s = TaskScheduler(
task=task,
files=True, files=True,
dirs=True) dirs=True)
event_map = EventMap(default_task=s.schedule) event_map = EventMap(
default_task=s.schedule)
watch = Watch(path="/tmp", watch = Watch(
path="/tmp",
event_map=event_map, event_map=event_map,
rec=True, rec=True,
auto_add=True) auto_add=True)
pyinotifyd_config = PyinotifydConfig(watches=[watch], pyinotifyd_config = PyinotifydConfig(
watches=[watch],
loglevel=logging.INFO, loglevel=logging.INFO,
shutdown_timeout=5) shutdown_timeout=5)
``` ```
### Schedule Shell commands for specific events on files ### Schedule Shell commands for specific events on files
```python ```python
s = ShellScheduler(cmd="/usr/local/sbin/task.sh {pathname}", files=True, dirs=False) s = ShellScheduler(
cmd="/usr/local/sbin/task.sh {pathname}",
files=True,
dirs=False)
event_map = EventMap({"IN_WRITE_CLOSE": s.schedule}) event_map = EventMap(
{"IN_WRITE_CLOSE": s.schedule})
watch = Watch(path="/tmp", watch = Watch(
path="/tmp",
event_map=event_map, event_map=event_map,
rec=True, rec=True,
auto_add=True) auto_add=True)
pyinotifyd_config = PyinotifydConfig(watches=[watch], pyinotifyd_config = PyinotifydConfig(
watches=[watch],
loglevel=logging.INFO, loglevel=logging.INFO,
shutdown_timeout=5) shutdown_timeout=5)
``` ```
### Move, copy or delete newly created files after a delay ### Move, copy or delete newly created files after a delay
```python ```python
move_rule = Rule(action="move", move_rule = Rule(
action="move",
src_re="^/src_path/(?P<path>.*)\.to_move$", src_re="^/src_path/(?P<path>.*)\.to_move$",
dst_re="/dst_path/\g<path>", dst_re="/dst_path/\g<path>",
auto_create=True, auto_create=True,
filemode=0o644, filemode=0o644,
dirmode=0o755) dirmode=0o755)
copy_rule = Rule(action="copy", copy_rule = Rule(
action="copy",
src_re="^/src_path/(?P<path>.*)\.to_copy$", src_re="^/src_path/(?P<path>.*)\.to_copy$",
dst_re="/dst_path/\g<path>", dst_re="/dst_path/\g<path>",
auto_create=True, auto_create=True,
filemode=0o644, filemode=0o644,
dirmode=0o755) dirmode=0o755)
delete_rule = Rule(action="delete", delete_rule = Rule(
action="delete",
src_re="^/src_path/(?P<path>.*)\.to_delete$", src_re="^/src_path/(?P<path>.*)\.to_delete$",
rec=False) rec=False)
fm = FileManager(rules=[move_rule, copy_rule, delete_rule]) fm = FileManager(
rules=[move_rule, copy_rule, delete_rule])
s = TaskScheduler(task=fm.task, s = TaskScheduler(
task=fm.task,
delay=30, delay=30,
files=True, files=True,
dirs=False) dirs=False)
event_map = EventMap({"IN_CLOSE_WRITE": s.schedule, event_map = EventMap({
"IN_CLOSE_WRITE": s.schedule,
"IN_DELETE": s.cancel, "IN_DELETE": s.cancel,
"IN_DELETE_SELF": s.cancel, "IN_DELETE_SELF": s.cancel,
"IN_MODIFY": s.cancel, "IN_MODIFY": s.cancel,
"IN_MOVED_TO": s.schedule, "IN_MOVED_TO": s.schedule,
"IN_UNMOUNT": s.cancel}) "IN_UNMOUNT": s.cancel})
watch = Watch(path="/src_path", watch = Watch(
path="/src_path",
event_map=event_map, event_map=event_map,
rec=True, rec=True,
auto_add=True) auto_add=True)
# note that shutdown_timeout should be greater than the greatest scheduler delay, # note that shutdown_timeout should be greater than the greatest scheduler delay,
# otherwise pending tasks may get cancelled during shutdown. # otherwise pending tasks may get cancelled during shutdown.
pyinotifyd_config = PyinotifydConfig(watches=[watch], pyinotifyd_config = PyinotifydConfig(
watches=[watch],
loglevel=logging.INFO, loglevel=logging.INFO,
shutdown_timeout=35) shutdown_timeout=35)
``` ```

View File

@@ -7,19 +7,34 @@
#async def custom_task(event, task_id): #async def custom_task(event, task_id):
# logging.info(f"{task_id}: execute example task: {event}") # logging.info(f"{task_id}: execute example task: {event}")
# #
#s = TaskScheduler(task=custom_task, files=True, dirs=False) #s = TaskScheduler(
# task=custom_task,
# files=True,
# dirs=False)
##################################################### #####################################################
# Example usage of TaskScheduler with FileManager # # Example usage of TaskScheduler with FileManager #
##################################################### #####################################################
#rules=[{"action": "move", #rules=[{
# "action": "move",
# "src_re": r"^(?P<path>.*)", # "src_re": r"^(?P<path>.*)",
# "dst_re": r"\g<path>.processed", # "dst_re": r"\g<path>.processed",
# "auto_create": True}] # "auto_create": True,
#fm = FileManager(rules=rules) # "filemode": 0o755,
#s = TaskScheduler(task=fm.task, delay=10, files=True, dirs=False) # "dirmode": 0o644,
# "user": "root",
# "goup": "root"}]
#
#fm = FileManager(
# rules=rules)
#
#s = TaskScheduler(
# task=fm.task,
# delay=10,
# files=True,
# dirs=False)
##################################### #####################################
@@ -27,14 +42,16 @@
##################################### #####################################
#cmd = "/usr/local/bin/task.sh {maskname} {pathname} {src_pathname}" #cmd = "/usr/local/bin/task.sh {maskname} {pathname} {src_pathname}"
#s = ShellScheduler(cmd=cmd) #s = ShellScheduler(
# cmd=cmd)
################### ###################
# Example watch # # Example watch #
################### ###################
#event_map = EventMap({"IN_ACCESS": None, #event_map = EventMap({
# "IN_ACCESS": None,
# "IN_ATTRIB": None, # "IN_ATTRIB": None,
# "IN_CLOSE_NOWRITE": None, # "IN_CLOSE_NOWRITE": None,
# "IN_CLOSE_WRITE": s.schedule, # "IN_CLOSE_WRITE": s.schedule,
@@ -49,7 +66,12 @@
# "IN_OPEN": None, # "IN_OPEN": None,
# "IN_Q_OVERFLOW": None, # "IN_Q_OVERFLOW": None,
# "IN_UNMOUNT": s.cancel}) # "IN_UNMOUNT": s.cancel})
#watch = Watch(path="/tmp", event_map=event_map, rec=True, auto_add=True) #
#watch = Watch(
# path="/tmp",
# event_map=event_map,
# rec=True,
# auto_add=True)
############################### ###############################
@@ -57,4 +79,6 @@
############################### ###############################
#pyinotifyd_config = PyinotifydConfig( #pyinotifyd_config = PyinotifydConfig(
# watches=[watch], loglevel=logging.INFO, shutdown_timeout=30) # watches=[watch],
# loglevel=logging.INFO,
# shutdown_timeout=30)