Добавлен объекты для получения разрешения фреймбуффера

Так же добавлена функция для подбора наиболее подходящего среди
доступных разрешений
master-3.5 3.5.8.9
Mike Hiretsky 6 years ago
parent 585133ab60
commit de0e61426c

@ -720,3 +720,43 @@ devfs = Devfs()
udev = Udev()
lvm = Lvm(LvmCommand())
raid = Raid(MdadmCommand())
class HwinfoError(Exception):
pass
class HwinfoTimeout(HwinfoError):
pass
class HwinfoNotExists(HwinfoError):
pass
class Hwinfo(object):
"""
Объект получения информации из hwinfo
"""
command_timeout = 20
@property
def hwinfo_cmd(self):
return files.getProgPath("/usr/sbin/hwinfo")
def framebuffer(self):
"""
Получить вывод hwinfo --framebuffer
"""
return self.run("--framebuffer")
def run(self, *command):
if not self.hwinfo_cmd:
raise HwinfoNotExists()
try:
return files.process(*[self.hwinfo_cmd] + list(command),
**{'timeout':self.command_timeout}).read()
except files.ProcessTimeout:
raise HwinfoTimeout()
def resolutions(self):
"""
Получить допустимые разрешения фреймбуффера
"""
re_modes = re.compile("^\s+Mode 0x[0-9a-f]+:\s+(\d+x\d+)\s",re.M)
return tuple(sorted(unique(re_modes.findall(self.framebuffer()))))

@ -27,7 +27,7 @@ from os import path
import time
from abc import ABCMeta, abstractmethod
from types import GeneratorType
from math import sqrt
try:
@ -602,3 +602,21 @@ class Brokenable(object):
return f(self, *args, **kw)
return wrapper
return decor
def get_best_nearest_resolution(preferred_res, support_res, aspect_only=False):
"""
Получить наилучшее ближайшее к preferred_res разрешенение из support_res.
"""
width, height = map(int, preferred_res.split('x'))
gep = sqrt(height ** 2 + width ** 2)
k = float(width) / float(height)
support_res_int = (tuple(map(int, x.split("x"))) for x in support_res)
if not aspect_only:
support_res_int = [(x,y) for x,y in support_res_int if x <= width and y <= height]
if not support_res_int:
return None
bestRes = min(support_res_int,
key=lambda x: (abs(x[0] / float(x[1]) - k),
abs(gep - sqrt(x[0] ** 2 + x[1] ** 2))))
return "%sx%s" % bestRes

Loading…
Cancel
Save