Skip to content
Snippets Groups Projects
Commit 078d448a authored by Andres Maldonado's avatar Andres Maldonado
Browse files

[pica-db-backup-rotation] Drop 'getopt', replace it by 'argparse'

parent ea81d028
No related branches found
No related tags found
No related merge requests found
Pipeline #59171 failed
......@@ -74,3 +74,14 @@ On se synchronise simplement avec le dépôt et on lance le Docker Compose :
```
$ docker-compose up -d
```
## Notes diverses
### `getopt` et `argparse`
Initialement, `fake_backups.py` utilisait le module `getopt` pour parser les arguments reçus. Cependant, `getopt` pose quelques problèmes:
* Exécuter juste `./fake_backups.py` ne déclenche pas une exception
* Si on lance `./fake_backups.py -n -f /tmp`, `getopt` va interpreter ça comme «une option `-n` avec un argument `-f` et un argument `/tmp`» au lieu de «une option `-n` sans argument et une option `-f` avec un argument `/tmp`», donc pas d'exception non plus
`getopt` a donc été remplacé par `argparse`, qui est beaucoup plus flexible et [facile à utiliser](https://docs.python.org/3.7/howto/argparse.html). `argparse` corrige les deux erreurs mentionnées précédemment et nous simplifie la vie en s'occupant lui même de faire des vérifications qui avant étaient implémentées dans `fake_backups.py` (par exemple, vérifier que l'argument de `-n` est un entier)
#!/usr/bin/python3
from datetime import datetime, timedelta
import getopt
import argparse
import os
import sys
import time
def main(argv):
def main():
folder = False
numberOfBackups = False
parser = argparse.ArgumentParser(description="Generate dummy backup files, for debug purposes")
parser.add_argument("-f", metavar="<folder>", help="destination folder", required=True)
parser.add_argument("-n", metavar="<num_backups>", help="number of dummy backups to generate (default: %(default)s)", type=int, default=10)
args = parser.parse_args()
# Checks if the correct parameters were given when launched via command line
try:
opts, args = getopt.getopt(argv, "f:n:")
except getopt.GetoptError:
print('usage: fake_backups.py -f <folder> -n <number of backups>')
if not os.path.isdir(args.f):
print('Please specify a valid path for argument -f <folder>.')
sys.exit(2)
for opt, arg in opts:
if opt in ('-f'):
# -f must be a folder
if os.path.isdir(arg):
folder = arg
else:
print('Please specify a valid path for argument -f <folder>.')
sys.exit(2)
elif opt in ('-n'):
# -n must be an integer
try:
numberOfBackups = int(arg)
except ValueError:
print('Please specify a valid number for argument -n <number of backups>.')
if folder and numberOfBackups:
i = 0
# Creates numberOfBackups empty files named with the name of the service + the current date minus number of iterations
start = time.time()
while(i < numberOfBackups):
d = datetime.today() - timedelta(hours=i)
filename = d.strftime('%Y.%m.%d.%H%M%S')
file = open(folder + '/' + filename + '.tar.gz', 'w')
file.close()
i += 1
end = time.time()
time_elapsed = end - start
print('[' + folder + '/' + ']')
i = 0
# Creates args.n empty files named with the name of the service + the current date minus number of iterations
start = time.time()
while(i < args.n):
d = datetime.today() - timedelta(hours=i)
filename = d.strftime('%Y.%m.%d.%H%M%S')
file = open(args.f + '/' + filename + '.tar.gz', 'w')
file.close()
i += 1
end = time.time()
time_elapsed = end - start
print('[' + args.f + '/]')
# Displays the time needed to generate all files
print(str(i) + ' files generated in ' + str(time_elapsed) + ' seconds.')
if __name__ == "__main__":
main(sys.argv[1:])
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment