* crafting fixture update * efefays logic implementation done today: * added game.log log basics for the parser. * updated utf-8 headers.
72 lines
3.4 KiB
Python
72 lines
3.4 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Backup Directories, Handle Files...
|
|
"""
|
|
|
|
import os, logging, zipfile
|
|
|
|
def make_zipfile(output_filename, source_dir):
|
|
relroot = os.path.abspath(os.path.join(source_dir, os.pardir))
|
|
with zipfile.ZipFile(output_filename, "w", zipfile.ZIP_DEFLATED) as zip:
|
|
for root, dirs, files in os.walk(source_dir):
|
|
# add directory (needed for empty dirs)
|
|
zip.write(root, os.path.relpath(root, relroot))
|
|
for file in files:
|
|
filename = os.path.join(root, file)
|
|
if os.path.isfile(filename): # regular files only
|
|
arcname = os.path.join(os.path.relpath(root, relroot), file)
|
|
zip.write(filename, arcname)
|
|
|
|
def backup_log_directory(log_directory, backup_directory, compress=True,
|
|
ommit_level=2, verbose=False):
|
|
# @todo: raw copy
|
|
# ommit_level 0: overwrite.
|
|
# ommit_level 1: write if selected compression method not backuped yet
|
|
# ommit_level 2: write only if neither method contains directory.
|
|
nothing_found = True
|
|
# get all directory names in log_directory.
|
|
# zip them into backup_directory
|
|
for directory in os.listdir(log_directory):
|
|
full_dir = os.path.join(log_directory, directory)
|
|
nothing_found = False
|
|
if os.path.isdir(full_dir):
|
|
if os.path.exists(os.path.join(full_dir, 'combat.log'))\
|
|
and os.path.exists(os.path.join(full_dir, 'game.log'))\
|
|
and os.path.exists(os.path.join(full_dir, 'chat.log'))\
|
|
and os.path.exists(os.path.join(full_dir, 'game.net.log')):
|
|
output_filename = '%s.zip' % directory
|
|
if os.path.exists(os.path.join(backup_directory, output_filename))\
|
|
and ((ommit_level >= 1 and compress) or (ommit_level==2 and not compress)):
|
|
logging.warning('Log %s exists as zip backup, ommited.' % output_filename)
|
|
elif os.path.exists(os.path.join(backup_directory, directory))\
|
|
and ((ommit_level == 2 and compress) or (ommit_level>=1 and not compress)):
|
|
logging.warning('Log %s exists as directory backup, ommited.' % directory)
|
|
else:
|
|
# do the backup
|
|
if compress:
|
|
make_zipfile(os.path.join(backup_directory, output_filename),
|
|
full_dir)
|
|
logging.info('Backed up %s' % directory)
|
|
if verbose:
|
|
print "Backed up %s" % directory
|
|
else:
|
|
if verbose:
|
|
print "Directory Raw Backup not implemented yet."
|
|
raise NotImplementedError
|
|
else:
|
|
if verbose:
|
|
print "%s is not a directory." % full_dir
|
|
if verbose and nothing_found:
|
|
print "Nothing to backup found in %s" % log_directory
|
|
|
|
|
|
if __name__ == '__main__':
|
|
print "Performing Log Backup (Dev)"
|
|
log_source = os.path.join(os.path.expanduser('~'),
|
|
'Documents', 'My Games', 'StarConflict', 'logs')
|
|
log_dest = os.path.join(os.path.expanduser('~'),
|
|
'Documents', 'My Games', 'sc')
|
|
backup_log_directory(log_source, log_dest, verbose=True, compress=True)
|
|
|