quickdev16/scripts/query_romsize.py
2016-07-16 17:15:16 +02:00

131 lines
3.7 KiB
Python

import sqlite3
import os
import sys
import getpass
import socket
import traceback
import paramiko
def distance(a, b):
c = {}
n = len(a)
m = len(b)
for i in range(0, n + 1):
c[i, 0] = i
for j in range(0, m + 1):
c[0, j] = j
for i in range(1, n + 1):
for j in range(1, m + 1):
x = c[i - 1, j] + 1
y = c[i, j - 1] + 1
if a[i - 1] == b[j - 1]:
z = c[i - 1, j - 1]
else:
z = c[i - 1, j - 1] + 1
c[i, j] = min(x, y, z)
return c[n, m]
paramiko.util.log_to_file('rom_sftp.log')
if socket.gethostname() == 'slap':
path = "/home/david/Devel/arch/avr/code/snesram/roms/"
username = "david"
hostname = "slap"
elif socket.gethostname() == 'box':
path = "/Users/david/Devel/arch/avr/code/snesram/roms/"
username = "david"
hostname = "burst"
else:
sys.exit()
def shellquote(s):
return "'" + s.replace("'", "'\\''") + "'"
def main():
port = 22
password = getpass.getpass('Password for %s@%s: ' % (username, hostname))
hostkeytype = None
hostkey = None
host_keys = paramiko.util.load_host_keys(
os.path.expanduser('~/.ssh/known_hosts'))
if host_keys.has_key(hostname):
hostkeytype = host_keys[hostname].keys()[0]
hostkey = host_keys[hostname][hostkeytype]
print 'Using host key of type %s' % hostkeytype
try:
print "Connect %s:%s" % (hostname, port)
t = paramiko.Transport((hostname, port))
t.connect(username=username, password=password, hostkey=hostkey)
sftp = paramiko.SFTPClient.from_transport(t)
# dirlist on remote host
dirlist = sftp.listdir('.')
print "Dirlist:", dirlist
conn = sqlite3.connect('roms_cleanup.sqlite3')
c = conn.cursor()
for i in [(1,), (2,), (4,), (8,), (16,)]:
dirname = os.path.join(path, "%02i" % i)
if not os.path.isdir(dirname):
os.mkdir(dirname)
print "#" * 60
print "%i MBit" % i
print "#" * 60
c.execute('''SELECT
rom_name,
rom_mb,
file_name
FROM
roms
WHERE
rom_mb = ?
AND
rom_hirom = 0
AND
rom_sram = 0
AND
rom_type = 0
AND
rom_region like "Europe%"
ORDER BY file_name
''', i)
last_name = str()
for row in c:
name, size, filename = row
d = distance(
os.path.basename(filename), os.path.basename(last_name))
if d < 7:
print "Skip ", filename
continue
filename_dst = os.path.join(
dirname, os.path.basename(filename))
print "Remote: %s -> %s" % (filename, filename_dst)
last_name = filename
try:
sftp.get(filename, filename_dst)
except Exception, e:
print '*** Caught exception: %s: %s' % (e.__class__, e)
traceback.print_exc()
print "Done"
except Exception, e:
print '*** Caught exception: %s: %s' % (e.__class__, e)
traceback.print_exc()
try:
t.close()
except:
pass
sys.exit(1)
t.close()
if __name__ == '__main__':
main()