-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpush2db.py
executable file
·53 lines (42 loc) · 1.51 KB
/
push2db.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python2
"""push2db.py
Usage:
./push2db.py DOC_PATH SOURCE URL AUTHOR TITLE YEAR SCHOOL [META]
Example:
./push2db.py something.pdf FRI www 'Someone' 'Something' 2015 'Faculty of Computer and Information Science'
Meta information is read from stdin because it can contain just about anything.
"""
import sys
import os
import MySQLdb as mdb
import settings
SQL_INSERT = u"INSERT INTO docDB (url, avtor, naslov, leto, fakulteta, data, filename) VALUES (%s, %s, %s, %s, %s, %s, '');"
SQL_UPDATE_FILENAME = u"UPDATE docDB SET filename=%s WHERE id = %s;"
SQL_EXISTS = u"SELECT * FROM docDB WHERE url = %s;"
def push(path, source, *fields):
conn = mdb.connect(settings.DB_HOST, settings.DB_USER,
settings.DB_PASS, settings.DB_DATABASE,
charset='utf8')
with conn:
cur = conn.cursor()
cur.execute(SQL_EXISTS, (fields[0], ))
if len(cur.fetchall()):
os.remove(path)
return
cur.execute(SQL_INSERT, fields)
doc_id = cur.lastrowid
filename = '{}.{}'.format(doc_id, path.split('.')[-1])
new_path = os.path.join(settings.DOC_PATH, source, filename)
try:
os.rename(path, new_path)
cur.execute(SQL_UPDATE_FILENAME, (new_path, doc_id))
except:
print path, '->', new_path
raise
if __name__ == '__main__':
print sys.argv
filename, source, url, author, title, year, school = sys.argv[1:8]
meta = '{}'
if len(sys.argv) > 8:
meta = sys.argv[8]
push(os.path.expanduser(filename), source, url, author.decode('utf-8'), title.decode('utf-8'), year, school.decode('utf-8'), meta)