Last active
December 27, 2015 13:09
-
-
Save CRImier/7330722 to your computer and use it in GitHub Desktop.
This Python program is used to manage scanning directories while batch-scanning so that all the files get automatically sorted. Its main objective is to provide path to current chosen directory when called like "pybssort dir" and let users choose, create and manage directories using "pybssort [list|add|del|set]". It requires python-webpy solely …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import os | |
import sys | |
import web | |
web.config.debug = False | |
from web import database | |
BASEPATH = "/home/user/Scans" | |
DIR = "/var/lib/pybssort/" | |
DB_NAME = os.path.join(DIR, "pybssort.db") | |
F_NAME = os.path.join(DIR, "pybssort.ini") | |
def list_contexts(): | |
contexts = db.select('contexts') | |
return contexts | |
def get_names(): | |
return [context['name'] for context in list_contexts()] | |
def print_contexts(): | |
for context in list_contexts(): | |
print context['name']+"\t"+return_path(context['folder']) | |
def add_context(name, folder): | |
name = name.strip() | |
folder = folder.strip('/') | |
folder += "/" | |
if name in get_names() or name == '': | |
return False | |
db.insert('contexts', name=name, folder=folder) | |
set_current_context(name) | |
try: | |
os.mkdir(return_path(folder)) | |
os.chmod(return_path(folder), 0777) | |
except OSError as e: | |
if e.errno == 17: | |
pass | |
else: | |
return False | |
return True | |
def return_path(folder_name): | |
folder = os.path.join(BASEPATH, folder_name) | |
return folder | |
def return_current_path(): | |
folder_name = return_current_context()['folder'] | |
return return_path(folder_name) | |
def del_context(name): | |
names = get_names() | |
if name == 'default' or name not in names: | |
return False | |
if return_current_context()['name'] == name: | |
set_current_context('default') | |
db.delete('contexts', where="name=$name", vars=locals()) | |
return True | |
def set_current_context(name): | |
if name not in get_names(): | |
return False | |
f = open(F_NAME, 'w') | |
f.write(name) | |
f.close() | |
return True | |
def return_current_context(): | |
f = open(F_NAME, 'r') | |
context_name = f.read().strip('\n') | |
f.close() | |
for entry in list_contexts(): | |
if entry['name'] == context_name: | |
return entry | |
def first_run(): | |
create_dir() | |
create_table() | |
create_file() | |
add_context('default', '') | |
def create_dir(): | |
try: | |
os.mkdir(DIR) | |
except OSError as e: | |
if e.errno == 17: | |
pass | |
else: | |
print "For first time you must run this program as root" | |
sys.exit(1) | |
os.chmod(DIR, 0777) | |
def create_table(): | |
query = "CREATE TABLE contexts(name TEXT PRIMARY KEY, folder TEXT NOT NULL);" | |
db.query(query) | |
def create_file(): | |
f = open(F_NAME, 'w') | |
f.close() | |
os.chmod(F_NAME, 0777) | |
if not os.path.isfile(DB_NAME): | |
db = database(dbn='sqlite', db=DB_NAME) | |
first_run() | |
os.chmod(DB_NAME, 0777) | |
else: | |
db = database(dbn='sqlite', db=DB_NAME) | |
if __name__ == "__main__": | |
arguments = ['add', 'list', 'del', 'set', 'dir'] | |
try: | |
assert(len(sys.argv) > 1 and sys.argv[1] in arguments) | |
if sys.argv[1] == 'list': | |
#Usage is 'script list' | |
print_contexts() | |
sys.exit(0) | |
elif sys.argv[1] == 'add': | |
#Usage is 'script add $name $folder_name' | |
assert(len(sys.argv) == 4) | |
if add_context(sys.argv[2], sys.argv[3]): | |
print "OK" | |
sys.exit(0) | |
else: | |
print "Incorrect name or folder name" | |
sys.exit(1) | |
elif sys.argv[1] == 'del': | |
#Usage is 'script del $name' | |
assert(len(sys.argv) == 3) | |
if del_context(sys.argv[2]): | |
print "OK" | |
sys.exit(0) | |
else: | |
print "Incorrect name (you can't delete 'default'!)" | |
sys.exit(1) | |
elif sys.argv[1] == 'set': | |
#Usage is 'script set $name' | |
assert(len(sys.argv) == 3) | |
if set_current_context(sys.argv[2]): | |
print "Default scanning directory is now "+return_current_path() | |
sys.exit(0) | |
else: | |
print "Incorrect name" | |
sys.exit(1) | |
elif sys.argv[1] == 'dir': | |
#Usage is 'script dir' | |
print return_current_path() | |
sys.exit(0) | |
except (AssertionError, KeyError, ValueError): | |
print "Usage examples:" | |
print ">pybssort list" | |
print "default /home/user/Scans/" | |
print ">pybssort add math Math" | |
print ">pybssort list" | |
print "default /home/user/Scans/" | |
print "math /home/user/Scans/Math/" | |
print ">pybssort set math" | |
print "Default scanning directory is now /home/user/Scans/Math/" | |
print ">pybssort dir" | |
print "/home/user/scans/Math/" | |
print ">pybssort add phys Physics" | |
print "Default scanning directory is now /home/user/Scans/Physics/" | |
print ">pybssort set phys" | |
print "Default scanning directory is now /home/user/Scans/Physics/" | |
print ">pybssort dir" | |
print "/home/user/Scans/Physics/ " | |
print ">pybssort list" | |
print "default /home/user/Scans/" | |
print "math /home/user/Scans/Math/" | |
print "phys /home/user/Scans/Physics/" | |
print ">pybssort del math" | |
print "OK" | |
print ">pybssort list" | |
print "default /home/user/Scans/" | |
print "phys /home/user/Scans/Physics/" | |
sys.exit(1) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment