borgend/__main__.py

Mon, 07 Feb 2022 11:38:54 +0200

author
Tuomo Valkonen <tuomov@iki.fi>
date
Mon, 07 Feb 2022 11:38:54 +0200
changeset 145
2e8b9a3caa56
parent 142
ad1d4a29ec75
permissions
-rwxr-xr-x

py2app has problems with relative paths, so revert them

0
f5aecaad0bcf Some rough drafting
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
1 #!/usr/local/bin/python3
89
51cc2e25af38 Added author information headers and content information to source files
Tuomo Valkonen <tuomov@iki.fi>
parents: 87
diff changeset
2 #
51cc2e25af38 Added author information headers and content information to source files
Tuomo Valkonen <tuomov@iki.fi>
parents: 87
diff changeset
3 # Borgend by Tuomo Valkonen, 2018
51cc2e25af38 Added author information headers and content information to source files
Tuomo Valkonen <tuomov@iki.fi>
parents: 87
diff changeset
4 #
0
f5aecaad0bcf Some rough drafting
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
5
79
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
6 # Common modules
41
e2641cb9ca6d --no-tray command line option for running on non-MacOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents: 40
diff changeset
7 import os
45
aa2a95dc6093 Further improvements to state reporting; indicate busyness if repository lock cannot be acquired
Tuomo Valkonen <tuomov@iki.fi>
parents: 43
diff changeset
8 import sys
41
e2641cb9ca6d --no-tray command line option for running on non-MacOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents: 40
diff changeset
9 import argparse
43
8f3ac19f11b6 Use platform package to detect whether to:
Tuomo Valkonen <tuomov@iki.fi>
parents: 41
diff changeset
10 import platform
80
a409242121d5 Better package-like organisation
Tuomo Valkonen <tuomov@iki.fi>
parents: 79
diff changeset
11 import logging
79
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
12 # Own modules needed at this stage
145
2e8b9a3caa56 py2app has problems with relative paths, so revert them
Tuomo Valkonen <tuomov@iki.fi>
parents: 142
diff changeset
13 import borgend.branding as branding
2e8b9a3caa56 py2app has problems with relative paths, so revert them
Tuomo Valkonen <tuomov@iki.fi>
parents: 142
diff changeset
14 import borgend.locations as locations
49
db33dfa64ad6 Improved scheduler
Tuomo Valkonen <tuomov@iki.fi>
parents: 46
diff changeset
15
db33dfa64ad6 Improved scheduler
Tuomo Valkonen <tuomov@iki.fi>
parents: 46
diff changeset
16 #
41
e2641cb9ca6d --no-tray command line option for running on non-MacOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents: 40
diff changeset
17 # Argument processing
e2641cb9ca6d --no-tray command line option for running on non-MacOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents: 40
diff changeset
18 #
e2641cb9ca6d --no-tray command line option for running on non-MacOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents: 40
diff changeset
19
92
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
20 epilog_format="""
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
21 Configuration file location:
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
22
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
23 %s
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
24
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
25 Log directory:
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
26
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
27 %s/
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
28 """
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
29
79
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
30 parser=argparse.ArgumentParser(
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
31 description=branding.appname_stylised + ": BorgBackup scheduler, queue, and tray icon.",
92
a1d3721ef5fa Show log directory in --help
Tuomo Valkonen <tuomov@iki.fi>
parents: 89
diff changeset
32 epilog=epilog_format % (locations.cfgfile, locations.logs_dir),
79
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
33 formatter_class=argparse.RawDescriptionHelpFormatter)
41
e2641cb9ca6d --no-tray command line option for running on non-MacOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents: 40
diff changeset
34
79
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
35 parser.add_argument(
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
36 '--no-tray',
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
37 dest='notray',
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
38 action='store_true',
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
39 help='Do not show the tray icon')
41
e2641cb9ca6d --no-tray command line option for running on non-MacOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents: 40
diff changeset
40
79
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
41 parser.add_argument(
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
42 '--debug',
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
43 dest='debug',
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
44 action='store_true',
b075b3db3044 Cleaned up module organisation to simplify borgend.py and not have to import it in other modules.
Tuomo Valkonen <tuomov@iki.fi>
parents: 78
diff changeset
45 help='Set logging level to debug')
73
4f0e9cf8f230 Added --debug switch to enable debug logging level
Tuomo Valkonen <tuomov@iki.fi>
parents: 52
diff changeset
46
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
47 def main():
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
48 args=parser.parse_args()
41
e2641cb9ca6d --no-tray command line option for running on non-MacOS systems
Tuomo Valkonen <tuomov@iki.fi>
parents: 40
diff changeset
49
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
50 # Done parsing args, import our own modules, and launch everything
145
2e8b9a3caa56 py2app has problems with relative paths, so revert them
Tuomo Valkonen <tuomov@iki.fi>
parents: 142
diff changeset
51 import borgend.config as config
2e8b9a3caa56 py2app has problems with relative paths, so revert them
Tuomo Valkonen <tuomov@iki.fi>
parents: 142
diff changeset
52 import borgend.dreamtime as dreamtime
2e8b9a3caa56 py2app has problems with relative paths, so revert them
Tuomo Valkonen <tuomov@iki.fi>
parents: 142
diff changeset
53 import borgend.loggers as loggers
2e8b9a3caa56 py2app has problems with relative paths, so revert them
Tuomo Valkonen <tuomov@iki.fi>
parents: 142
diff changeset
54 from borgend.scheduler import Scheduler
2e8b9a3caa56 py2app has problems with relative paths, so revert them
Tuomo Valkonen <tuomov@iki.fi>
parents: 142
diff changeset
55 from borgend.repository import Repository
2e8b9a3caa56 py2app has problems with relative paths, so revert them
Tuomo Valkonen <tuomov@iki.fi>
parents: 142
diff changeset
56 from borgend.backup import Backup
31
b4b4bb7a2ec5 More logging detail
Tuomo Valkonen <tuomov@iki.fi>
parents: 10
diff changeset
57
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
58 logger=loggers.mainlogger
34
9fce700d42de Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents: 33
diff changeset
59
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
60 if args.debug:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
61 logger.setLevel(logging.DEBUG)
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
62
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
63 tray = None
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
64 repos=[]
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
65 backups=[]
34
9fce700d42de Log window and other logging improvements
Tuomo Valkonen <tuomov@iki.fi>
parents: 33
diff changeset
66
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
67 try:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
68 dreamtime.start_monitoring()
1
4cdc9c1f6b28 basic scheduler structure draft, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
69
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
70 scheduler = Scheduler()
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
71 scheduler.start()
76
4b08fca3ce34 Dreamtime scheduling: discount system sleep periods
Tuomo Valkonen <tuomov@iki.fi>
parents: 74
diff changeset
72
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
73 repoconfigs=config.settings['repositories']
74
4f56142e7497 Separated repository configuration form backup configuration;
Tuomo Valkonen <tuomov@iki.fi>
parents: 73
diff changeset
74
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
75 logger.info('Initialising repositories')
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
76 for i in range(len(repoconfigs)):
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
77 r=Repository(i, repoconfigs[i])
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
78 repos.append(r)
74
4f56142e7497 Separated repository configuration form backup configuration;
Tuomo Valkonen <tuomov@iki.fi>
parents: 73
diff changeset
79
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
80 backupconfigs=config.settings['backups']
1
4cdc9c1f6b28 basic scheduler structure draft, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
81
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
82 logger.info('Initialising backups')
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
83 for i in range(len(backupconfigs)):
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
84 b=Backup(i, backupconfigs[i], scheduler)
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
85 backups.append(b)
3
4cad934aa9ce Can launch borg now; output not yet processed
Tuomo Valkonen <tuomov@iki.fi>
parents: 2
diff changeset
86
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
87 if args.notray or platform.system()!='Darwin':
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
88 # Wait for scheduler to finish
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
89 run=scheduler.join
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
90 else:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
91 # This is needed for Ctrl+C to work.
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
92 # TODO: proper exit handler, which seems to require
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
93 # ditching/forking/extending rumps to extend the NSApp class
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
94 from PyObjCTools.AppHelper import installMachInterrupt
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
95 installMachInterrupt()
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
96 # Start UI, and let it handle exit control
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
97 from borgend.ui import BorgendTray
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
98 tray=BorgendTray(backups);
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
99 run=tray.run
85
56a000d15965 On startup, for better scheduling, obtain previous backup time with 'borg list'
Tuomo Valkonen <tuomov@iki.fi>
parents: 82
diff changeset
100
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
101 for r in repos:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
102 r.start()
85
56a000d15965 On startup, for better scheduling, obtain previous backup time with 'borg list'
Tuomo Valkonen <tuomov@iki.fi>
parents: 82
diff changeset
103
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
104 for b in backups:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
105 b.start()
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
106
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
107 run()
85
56a000d15965 On startup, for better scheduling, obtain previous backup time with 'borg list'
Tuomo Valkonen <tuomov@iki.fi>
parents: 82
diff changeset
108
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
109 except Exception as err:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
110 # TODO: Should write errors here to stderr;
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
111 # perhaps add an extra stderr logger for error level messages
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
112 logger.exception("Exception fell through: exiting")
9
aa121291eb0e Rumps/Mac UI stuff is fucked and disables ^C etc.; threading doesn't help
Tuomo Valkonen <tuomov@iki.fi>
parents: 8
diff changeset
113
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
114 finally:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
115 logger.debug("Exiting")
9
aa121291eb0e Rumps/Mac UI stuff is fucked and disables ^C etc.; threading doesn't help
Tuomo Valkonen <tuomov@iki.fi>
parents: 8
diff changeset
116
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
117 for b in backups:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
118 b.terminate()
82
4e7678dd7b42 Enable Ctrl+C in MacOS UI mode.
Tuomo Valkonen <tuomov@iki.fi>
parents: 80
diff changeset
119
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
120 for r in repos:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
121 r.terminate()
9
aa121291eb0e Rumps/Mac UI stuff is fucked and disables ^C etc.; threading doesn't help
Tuomo Valkonen <tuomov@iki.fi>
parents: 8
diff changeset
122
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
123 if tray:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
124 tray.quit()
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
125 else:
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
126 logging.shutdown()
9
aa121291eb0e Rumps/Mac UI stuff is fucked and disables ^C etc.; threading doesn't help
Tuomo Valkonen <tuomov@iki.fi>
parents: 8
diff changeset
127
135
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
128 if __name__ == "__main__":
45c1a38f8709 Rewrite setup.py; seems to help with py2app
Tuomo Valkonen <tuomov@iki.fi>
parents: 134
diff changeset
129 sys.exit(main())

mercurial