#!/usr/bin/env python

import sys
import os
import stat
import pwd
import grp

def usage():
	sys.stderr.write('No options - just give me a list of files\n')
	sys.stderr.write('The output will be columnar, with fields in the following order:\n')
	sys.stderr.write('\taccess time\n')
	sys.stderr.write('\tinode change time\n')
	sys.stderr.write('\tmodification time\n')
	sys.stderr.write('\tuid\n')
	sys.stderr.write('\tusername\n')
	sys.stderr.write('\tgid\n')
	sys.stderr.write('\tgroupname\n')
	sys.stderr.write('\tsize\n')
	sys.stderr.write('\tpermissions bits\n')
	sys.stderr.write('\tfilename (which may contain whitespace)\n')
	sys.exit(0)

if not sys.argv[1:]:
	usage()

def get_username(uid):
	try:
		pwent = pwd.getpwuid(uid)
	except:
		return '#'+str(uid)
	return pwent[0]

def get_groupname(gid):
#>>> import grp
#>>> print grp.getgrgid(1000)
#>>> ('drb', '!', 1000, ['graziano', 'ccantwel'])
	try:
		grent = grp.getgrgid(gid)
	except:
		return '#'+str(gid)
	return grent[0]

#print len(sys.argv[1:])

for filename in sys.argv[1:]:
	try:
		statbuf = os.lstat(filename)
	except:
		sys.stderr.write('fstat failed: %s\n' % filename)
		continue

	first=1
	for field in [stat.ST_ATIME, \
		stat.ST_CTIME, \
		stat.ST_MTIME, \
		stat.ST_UID, \
		stat.ST_GID, \
		stat.ST_SIZE, \
		stat.ST_MODE]:

		if first:
			first=0
		else:
			sys.stdout.write(' ')

		if field == stat.ST_UID:
			sys.stdout.write('%s %s' % (str(statbuf[field]), get_username(statbuf[field])))
		elif field == stat.ST_GID:
			sys.stdout.write('%s %s' % (str(statbuf[field]), get_groupname(statbuf[field])))
		else:
			sys.stdout.write(str(statbuf[field]))
	sys.stdout.write(' %s\n' % filename)

