예제 #1
0
파일: export.py 프로젝트: cemac/forest-barc
def get_screenshot_as_png(obj: Union[LayoutDOM, Document], *, driver: "Optional[WebDriver]" = None, timeout: int = 5,
        resources: Resources = INLINE, width: Optional[int] = None, height: Optional[int] = None) -> Image:
    ''' Get a screenshot of a ``LayoutDOM`` object, custom for BARC

    Args:
        obj (LayoutDOM or Document) : a Layout (Row/Column), Plot or Widget
            object or Document to export.

        driver (selenium.webdriver) : a selenium webdriver instance to use
            to export the image.

        timeout (int) : the maximum amount of time to wait for initialization.
            It will be used as a timeout for loading Bokeh, then when waiting for
            the layout to be rendered.

    Returns:
        image (PIL.Image.Image) : a pillow image loaded from PNG.

    .. warning::
        Responsive sizing_modes may generate layouts with unexpected size and
        aspect ratios. It is recommended to use the default ``fixed`` sizing mode.

    '''

    with tempfile.TemporaryDirectory(prefix="barc", dir=os.path.abspath(os.path.join(os.path.dirname(__file__),'..','static'))) as tmp:
        html = get_layout_html(obj, resources=resources, width=width, height=height)
        os.symlink(os.path.abspath("forest"),os.path.join(tmp,'forest'))
        htmlfile = os.path.join(tmp,'barcfigure.html')
        
        with open(htmlfile, mode="w", encoding="utf-8") as f:
            f.write(html)

        web_driver = driver if driver is not None else create_firefox_webdriver()
        web_driver.maximize_window()
        web_driver.get("file:///" + htmlfile)
        wait_until_render_complete(web_driver, timeout)
        [width, height, dpr] = _maximize_viewport(web_driver)
        png = web_driver.get_screenshot_as_png()
        web_driver.quit()

    return (Image.open(io.BytesIO(png))
                 .convert("RGBA")
                 .crop((0, 0, width*dpr, height*dpr))
                 .resize((width, height)))
예제 #2
0
def test_create_firefox_webdriver() -> None:
    d = biw.create_firefox_webdriver()
    try:
        assert isinstance(d, selenium.webdriver.firefox.webdriver.WebDriver)
    finally:
        d.quit()
예제 #3
0
    days = sorted(set(ita_vax_data['data_somministrazione']))

    print(len(days))

    vax_by_age_dose_nation = ita_vax_data.pivot_table(
        index='fascia_anagrafica',
        values=['prima_dose',
                'seconda_dose'],
        aggfunc='sum')

    row_count = 4

    regioni_vax = sorted(set(ita_vax_data['nome_area']))

    fps = 3
    driver = webdriver.create_firefox_webdriver()

    start_delay = 3 * fps
    end_delay = 10 * fps

    for i, day in enumerate(days):
        time_ita_vax_data = ita_vax_data[ita_vax_data['data_somministrazione'] <= day]

        plot_png = plot_day(time_ita_vax_data, day, i+1, len(days), row_count, driver)

        if i == 0:
            for j in range(start_delay):
                filename = f'race/race_to_vax_{(i + j):03d}.png'
                plot_png.save(filename)
        else:
            filename = f'race/race_to_vax_{(start_delay + i - 1):03d}.png'
예제 #4
0
def test_create_firefox_webdriver() -> None:
    d = biw.create_firefox_webdriver()
    assert isinstance(d, selenium.webdriver.firefox.webdriver.WebDriver)