예제 #1
0
def check_one(selected, auto_flag = False, argv_flag = False):
    # Check a single item
    tools.os_clear_screen(sysstr)
    print("\n=== Checking now, results will be shown below...\n")
    print(roms.get_name(selected) + ":\n")
    if argv_flag:
        checking = "check_update." + selected
    else:
        checking = "check_update." + roms.check_list[selected]
    temp2 = eval(checking)(False, bs4_parser)
    if temp2:
        if argv_flag:
            checked = selected
        else:
            checked = roms.check_list[selected]
        tools.check_for_update(checked, temp2, term_cols)
        tools.save_to_json(temp2, "save.json")
    print("\n%s\n"%("*" * term_cols))
    if temp2:
        print("=== Check completed!")
        check_res = ("\n*** Press the Enter key ")
        exit_st = 0
    else:
        print("=== Check Failed!")
        check_res = ("\n*** Enter \"0\" to try again, enter other ")
        exit_st = 1
    if auto_flag:
        return input("\n*** Press the Enter key to continue: ")
    if argv_flag:
        return
    return input(check_res + "to return to the main interface: "), exit_st
예제 #2
0
def getdata(name):
    EXP_FILENAME = (os.path.join(EXP_FOLDERNAME, name + '.json'))

    EXP_TIME_SECOND = 10

    handler = SerialHandler('/dev/ttyACM3', 115200)

    #handler.current_state = {'time': 0}
    #current_state = handler.current_state

    handler.start()
    handler.wait_until_alive()

    start_time = time.time()
    value = []
    g = []
    while True:
        value.append(handler.current_state)
        time.sleep(0.01)

        if (time.time() - start_time) > EXP_TIME_SECOND:
            break

    handler.stop()
    handler.join()

    results = {}
    results['value'] = value
    tools.save_to_json(results, EXP_FILENAME)
    return value
예제 #3
0
def start_polling(updateUrl, max_results):
    data = s.get(avia_url + updateUrl).json()

    # время на опрос, если больше этого количества секунд пройдет, просто вернем то, что уже есть
    time_to_polling = 10
    # хитрая магия - на самом деле просто разжевываем, что нам яндекс ответил
    while (data == None or int(data['progress']['current']) < int(
            data['progress']['all'])) and (time_to_polling > 0) and (int(
                data['progress']['current']) < max_results):
        #2017-12-02T19:35:07
        form = '%Y-%m-%dT%H:%M:%S'
        timeobj = {'time': datetime.now().strftime(form)}
        # превращаем timeobj в строку вида 'time=2017-12-02T19%3A35%3A07'
        timeobj = urlencode(timeobj, quote_via=quote_plus)
        # склеиваем url для запроса (почему так? - так яндекс хочет)
        url = avia_url + updateUrl + '?' + timeobj + '&cont=1'
        try:
            # делаем запрос, пытаемся распарсить json
            data = s.get(url).json()
        except:
            # в случае экзепшена ничего не делаем, живем дальше
            pass
        tools.log(data['progress']['current'], 'from', data['progress']['all'])

        # интервал запросов к яндексу для обновления результатов поиска в секундах
        polling_interval = 1
        # спим столько секунд
        time.sleep(polling_interval)
        # уменьшаем оставшееся время
        time_to_polling -= polling_interval

    # если в итоге у нас ничего не получилось получить от яндекса в качестве результатов поиска,
    # или там что-то странное и нет поля 'progress'
    # то просто возвращаем None
    if data is None or 'progress' not in data:
        tools.log('SEARCH ENDED WITH EMPTY RESULTS OR EXCEPTION')
        return None

    # для отладки сохраняем то, что нам яндекс вернул, как результаты поиска
    tools.save_to_json(data, '_data.json')

    # если по каким-то причинам не нашлось билетов, то вернем пустой dictionary
    if data['progress'] == 0:
        return {}

    return data
예제 #4
0
def get_suggests(query):
    # пример: из объекта {'query':'мос'} получится строка 'query=%D0%BC%D0%BE%D1%81'
    q = urlencode({'query': query}, quote_via=quote_plus)
    # код языка, на котором будут подсказки
    lang_code = 'en'
    # url для запроса подсказок мест по имени
    url = 'https://suggests.avia.yandex.ru/v2/avia?format=tickets&lang=' + lang_code + '&national_version=ru&avia=true&need_country=true&have_airport_field=true&hidden_field=true&' + q

    # GET запрос, сразу парсим json в объект
    data = s.get(url).json()
    # для отладки сохраняли когда-то ответ сервера в файлик
    #tools.save_to_json(data, '_suggests.json')

    # трансформируем эту штуку, полученную от яндекса в массив дикшинари вида
    res = [{'name': x[1], 'info': x[2]} for x in data[1]]

    # кэшируем места по их point_key в дикшинари places
    for p in res:
        places[p['info']['point_key']] = p

    # тут же сохраняем places в файл
    tools.save_to_json(places, 'placesCache.json')
    '''
	каждый объект массива res перед return'ом это такой дикшинари
	{
		'name': 'Домодедово', 
		'info': {
			'country_title': 'Россия', 
			'point_code': 'DME', 
			'city_title': 'Москва', 
			'hidden': 0, 
			'have_airport': 1, 
			'point_key': 's9600216', 
			'added': 0, 
			'region_title': 
			'Москва и Московская область', 
			'missprint': 0
		}
	}
	'''

    # возвращаем только три первых подсказки из массива
    return res[:3]
예제 #5
0
def getdata(name):
    EXP_FILENAME =(os.path.join(EXP_FOLDERNAME, name + '.json'))

    EXP_TIME_SECOND = 20
    if __name__ == '__main__':

        handler = SerialHandler('/dev/ttyACM3', 115200)

        handler.current_state = {'time': 0}
        current_state = handler.current_state

        handler.start()
        start_time = time.time()
        timestamps = []
        while True:
            ## check if received new data
            if current_state['time'] != handler.current_state['time']:
                elasped = time.time() - start_time
                timestamps.append(elasped)
                print(elasped)

                current_state = handler.current_state

            time.sleep(0.0001)

            if (time.time() - start_time) > EXP_TIME_SECOND:
                break

        handler.stop()
        handler.join()
    import numpy as np
    mean_latency=np.mean(np.diff(timestamps))
    freq.append(1/mean_latency)
    results = {}
    results['timestamps'] = timestamps
    tools.save_to_json(results, EXP_FILENAME)
예제 #6
0

getdata('photosensor')


# In[54]:


getdata('photoresistor')


# In[55]:


getdata('RGB_sensor')


# In[57]:


calculated_data={}
calculated_data['data frequency'] =freq
tools.save_to_json(calculated_data,experimental_data)


# In[56]:


freq

예제 #7
0
class DiskUsage:
    """
    Personalize and visualize the disk space usage in the terminal
    """
    def __init__(self,
                 path: str = "",
                 exclude: list = None,
                 details: bool = False,
                 every: bool = False) -> None:
        self.path = path
        self.exclude = []
        if exclude:
            self.exclude = exclude
        self.details = details
        self.every = every
        self._platform = platform.system(
        )  # Check on which platform vizex operates

    def print_charts(self, options: Options = None) -> None:
        """
        Prints the charts based on user selection type
        
        Args:
            options (Options): colors and symbols for printing
        """
        if not options:
            options = Options()

        if self.path:
            parts = self.grab_specific(self.path[0])
        else:
            parts = self.grab_partitions(exclude=self.exclude,
                                         every=self.every)

        chart = HorizontalBarChart(options)
        for partname in parts:
            self.print_disk_chart(chart, partname, parts[partname])

    def print_disk_chart(self, ch: Chart, partname: str, part: dict) -> None:
        """Prints the disk data as a chart
        
        Args:
            ch (Chart): to print
            partname (str): partition title
            part (dict): partition data to be visualized
        """
        pre_graph_text = self.create_stats(part)

        footer = None
        if self.details:
            footer = self.create_details_text(part)

        maximum = part["total"]
        current = part["used"]
        post_graph_text = create_usage_warning(part['percent'], 80, 60)

        ch.chart(
            post_graph_text=post_graph_text,
            title=partname,
            pre_graph_text=pre_graph_text,
            footer=footer,
            maximum=maximum,
            current=current,
        )
        print()

    def grab_root(self) -> dict:
        """
        Grab the data for the root partition

        return:
            (dict) with column titles as keys
        """
        return {
            "total": psutil.disk_usage("/").total,
            "used": psutil.disk_usage("/").used,
            "free": psutil.disk_usage("/").free,
            "percent": psutil.disk_usage("/").percent,
            "fstype": psutil.disk_partitions(all=False)[0][2],
            "mountpoint": "/",
        }

    def grab_partitions(self, exclude: list, every: bool) -> dict:
        """Grabs data for all the partitions.
        
        Args:
            exclude (list): of partitions to exclude
            every (bool): if all the partitions should be grabbed
        """
        disks = {}

        # If we don't need every part we grab root separately
        if not every and self._platform != 'Windows':
            disks['root'] = self.grab_root()
        disk_parts = psutil.disk_partitions(all=every)

        for disk in disk_parts[1:]:

            # Exclude mounpoints created by snap
            if disk.device.startswith("/dev/loop"):
                continue

            # Check that tmp is not slipping as partition
            if disk.mountpoint.startswith("/tmp"):
                continue

            # Check that part name is not in the excluded list
            if self.exclude and disk[1].split("/")[-1] in exclude:
                continue

            try:
                if psutil.disk_usage(disk[1]).total > 0:
                    disks[disk[1].split("/")[-1]] = {
                        "total": psutil.disk_usage(disk[1]).total,
                        "used": psutil.disk_usage(disk[1]).used,
                        "free": psutil.disk_usage(disk[1]).free,
                        "percent": psutil.disk_usage(disk[1]).percent,
                        "fstype": disk.fstype,
                        "mountpoint": disk.mountpoint,
                    }
            except Exception as e:
                print(e)
                continue
        return disks

    def grab_specific(self, disk_path: str) -> dict:
        """
        Grabs data for the partition of the user specified path

        Args:
            disk_path (str): to the partition to grab
        """
        disks = {
            disk_path: {
                "total": psutil.disk_usage(disk_path).total,
                "used": psutil.disk_usage(disk_path).used,
                "free": psutil.disk_usage(disk_path).free,
                "percent": psutil.disk_usage(disk_path).percent,
                "fstype": "N/A",
                "mountpoint": "N/A",
            }
        }
        return disks

    def create_details_text(self, disk: dict) -> str:
        """
        Creates a string representation of a disk
        
        Args:
            disk (dict): text to print
        """
        return f"fstype={disk['fstype']}\tmountpoint={disk['mountpoint']}"

    def create_stats(self, disk: dict) -> str:
        """
        Creates statistics as string for a disk
        
        Args:
            disk (dict): stats to print
        """
        r = ints_to_human_readable(disk)
        return f"Total: {r['total']}\t Used: {r['used']}\t Free: {r['free']}"

    def save_data(self, filename: str) -> None:
        """
        Outputs disks/partitions data as a CSV file
        
        Args:
            filename (str): for the saved file
        """
        data = self.grab_partitions(self.exclude, self.every)
        if (file_type := filename.split(".")[-1].lower()) == 'csv':
            save_to_csv(data, filename)
        elif file_type == 'json':
            save_to_json(data, filename)
예제 #8
0
def check_all_auto(argv_flag = False):
    # Automatically check all
    '''
    This mode does not perform the operation of downloading the MD5 file 
    to obtain the hash check value (fast_flag is True) 
    to improve the checking speed.
    (Will not block the hash that can be taken directly from the page)
    '''
    # Read saved Rom update status dictionary from json file
    saved = tools.read_from_json("save.json")
    if not saved:
        saved = {}
    # ~ Some URLs are not accessible right now 
    # ~ (At least in my area is like this).
    # ~ such as: aex
    # ~ But I will not ignore them anymore.
    # ~ If you don't want to output these check failure messages,
    # ~ Please write the corresponding function name in this tuple.
    skip_tuple = ("mokee")
    temp3 = failed_list = {}
    j = 1
    check_2nd = ""
    while True:
        tools.os_clear_screen(sysstr)
        print("\n=== Automatically check all Rom updates, "
              "please wait...")
        print("\n=== Checking %s of %s %s...\n"
              %(j, len(roms.check_list), check_2nd))
        print(roms.get_name(str(j)) + ":\n")
        new_flag = False
        checking = "check_update." + roms.check_list[str(j)]
        temp2 = eval(checking)(True, bs4_parser)
        if temp2:
            checked = roms.check_list[str(j)]
            new_flag = tools.check_for_update(checked, temp2, term_cols)
            # Merging dictionaries
            # (this method is limited to Python version 3.5 and above)
            temp3 = {**temp3, **temp2}
            # Other ways of :
            # 1.Dictionary analysis 
            # (the most stupid, the slowest, most reliable method):
            # ~ for key,value in temp2.items():
                # ~ temp3[key] = value
            # 2.element stitching 
            # (Python3 can not be omitted "dictionary to list" step):
            # ~ temp3 = dict(list(temp3.items()) + list(temp2.items()))
        elif roms.check_list[str(j)] not in skip_tuple:
            if check_2nd == "(Second check)":
                failed_list[str(j)] = roms.check_list[str(j)]
            else:
                check_2nd = "(Second check)"
                continue
        check_2nd = ""
        if new_flag:
            print("\n%s\n"%("*" * term_cols))
            temp = input("*** Enter \"0\" to view details, "
                         "enter other to continue: ")
            if temp == "0":
                check_one(str(j), auto_flag = True)
        j+=1
        if j > len(roms.check_list):
            saved = {**saved, **temp3}
            tools.save_to_json(saved, "save.json")
            tools.os_clear_screen(sysstr)
            print("\n%s\n"%("*" * term_cols))
            print("=== Check completed!\n")
            if len(failed_list) != 0:
                print("*** Check failed items:")
                for key,value in failed_list.items():
                    print("\n*** === %s. %s"
                          %(key, roms.list_all[value]))
                print()
            else:
                print("=== No error occurred during the check.\n")
            if not argv_flag:
                input("*** Press the Enter key to "
                      "return to the main interface: ")
            break
예제 #9
0
def start_search(chat, params=None, caption=None, callback_query_id=None):
    '''
	метод для запуска поиска
	'''

    # если ждем капчу, не запускаем поиск
    if chat.captcha is not None:
        return False

    # если поиск уже идет, то говорим пользователю, что это так и не запускаем новый
    if chat.searching_now:
        # если есть на что отвечать, если кнопку нажали и колбэк пришел,
        # 	айди которого передано в callback_query_id, то отвечаем на него
        if callback_query_id is not None:
            global tg
            tg.answerCallbackQuery(callback_query_id,
                                   'Another search is performing')

        if caption is not None:
            # значит поиск был запущен из Subscription
            # ждем, пока текущий поиск завершится
            while chat.searching_now:
                time.sleep(1)
        else:
            # не запускаем поиск
            return False

    # ставим флаг, что сейчас идет поиск
    chat.searching_now = True

    # если конкретных параметров не передали, подтягиваем параметры чата
    if params is None:
        params = chat.params

    # запоминаем строку параметров поиска
    query_str = params.query_str()

    # если с параметрами что-то не так, говорим об этом пользователю
    if not params.is_ready_for_search():
        chat.send_message("Configure search parameters first.")
        # поиск завершился без результатов
        return search_done(chat, None, query_str)

    # если что-то там хотим отправить перед поиском, то отправляем (caption - просто строка)
    if caption is not None:
        chat.send_message(caption)

    data = None
    try:
        # пытаемся получить результаты поиска в переменную data
        data = yandexAvia.get_flights(
            params.origin,
            params.destination,
            params.date_for_search(),
            on_search_started=on_search_started,
            on_search_started_args=(callback_query_id, chat, params))
    except Exception as ex:
        # логаем экзепшен, если он вылез
        tools.log("EXCEPTION:\n", ex)

    # если yandexAvia.get_flights() вернул None или был какой-то экзепшен
    if data is None:
        # говорим пользователю, что что-то не так пошло
        chat.send_message(
            "For some mysterious reasons I couldn't start search.")
        tools.log("COULDN'T START SEARCH")
        # поиск завершился без результатов
        return search_done(chat, None, query_str)

    # если yandexAvia.get_flights() вернул что-то типа { 'captcha' : { ... } }
    if 'captcha' in data:
        # запоминаем капчу для этого чата
        chat.captcha = data['captcha']
        # докидываем в объект капчи строку параметров поиска, для которого она вылезла
        chat.captcha['search_parameters'] = params
        # отправляем картиночку капчи пользователю с просьбой разгадать ее
        url = chat.captcha['src']
        tg.sendPhoto(chat.chatId, url,
                     'I\'m sorry for this but you have to submit captcha')
        # поиск завершился без результатов
        return search_done(chat, None, query_str)

    if not data:  # equals to empty dict
        # поиск завершен с пустыми результатами
        return search_done(chat, {}, query_str)

    # трансформируем структуру данных, которые вернул яндекс, в структуру, которую хотим видеть мы
    # fares - массив билетов (каждый билет может содержать несколько перелетов)
    fares = data['variants']['fares']
    # каждый из вариантов билетов трансформируем
    formatted = [format_fare(f, data) for f in fares]

    #закоменчен фильтр для поиска только прямых рейсов (с одним полетом)
    #formatted = filter(lambda x: len(x['flights']) == 1, formatted)

    # сортируем билеты по возрастанию цены
    formatted = sorted(formatted,
                       key=lambda elem: elem['price']['tariff']['value'])

    # сохраним то, что получилось в файлик, чтобы можно было посмотреть при желании
    tools.save_to_json(formatted, '_formatted.json')
    # вызываем метод о завершении поиска
    return search_done(chat, formatted, query_str, params.searching_message_id)
    '''