import os
import subprocess
import pyudev
from pySMART import Device
from flask.ext import restful

class Disk(restful.Resource):
	def get(self):
		return disk_list()


#
# TODO: Migrate to inner class functions
#

def get_block_device_size(device):
	if not device:
		return 0
	try:
		return subprocess.check_output(['blockdev','--getsize64', device])
	except:
		return 0

def disk_list():
	disks = []

	context = pyudev.Context()
	for device in context.list_devices(subsystem="block"):
		if device.device_type == u"disk":
			property_dict = dict(device.items())

			if ('ID_MODEL' in property_dict):
				disk_short_name = property_dict.get('DEVNAME', "Unknown").split('/')[-1]
				disks.append(
				{
					'model':	property_dict.get('ID_MODEL', "Unknown"),
					'name':		disk_short_name,
					'size':		get_block_device_size(property_dict.get('DEVNAME', None)),
					'serial':	property_dict.get('ID_SERIAL_SHORT', "Unknown"),
				})

	return disks