def compile(args): """ Description: ------------ Compile a markdown file to a valid HTML page. Attributes: ---------- :param args: """ project_path = args.path or os.getcwd() sys.path.append(project_path) reports_path = utils.get_report_path(project_path) with open(os.path.join(reports_path, "%s.md" % args.name), "w") as md: md_dta = md.read() page = Report() page.py.markdown.resolve(md_dta) try: settings = __import__("ui_settings", fromlist=['object']) if not os.path.exists(settings.VIEWS_FOLDER): # If it is not an absolute path settings.VIEWS_FOLDER = os.path.join(reports_path, '..', '..', settings.VIEWS_FOLDER) output = page.outs.html_file(path=settings.VIEWS_FOLDER, name=args.name, options={"split": split_files, "css_route": '/css', "js_route": '/js'}) except: output = page.outs.html_file(name=args.name, options={"split": False}) print(output)
def create_page(): page = Report() page.headers.dev() page.theme = ThemeBlue.BlueGrey() tickers_info = { 'BAC': "Bank of America", 'GS': "Goldman Sachs", 'JPM': "JPMorgan Chase", 'SAN.MC': "Banco Santander", 'C.MX': "Citigroup Inc.", 'HSBC-PA': "HSBC Holdings PLC" } title = page.ui.title("Flask - Advanced example 1") ticker = page.ui.fields.select( cpns.select.from_dict(tickers_info), label="Tickers", multiple=True, html_code="ticker_value") from_dt = page.ui.fields.date(value="M-1", html_code="from_date", label="From") to_dt = page.ui.fields.today(html_code="to_date", label="To") button = page.ui.buttons.colored("Click") text = page.ui.calendars.pill("1Y", group="chart_time") text_6m = page.ui.calendars.pill("6M", group="chart_time") text_2m = page.ui.calendars.pill("2M", group="chart_time") text_1m = page.ui.calendars.pill("1M", group="chart_time") sub_title = page.ui.title("Financial Sector 2020") buttons = page.ui.div([text, text_6m, text_2m, text_1m]) chart = page.ui.charts.chartJs.line([], x_axis='Date') chart.options.scales.y_axis().ticks.toNumber() chart.options.scales.y_axis().add_label("Stock Price (USD)") chart.options.scales.x_axes().add_label("Date") chart.options.tooltips.callbacks.labelCurrency("$", digit=4) table = page.ui.tables.aggrid([]) button.click([ page.body.loading(), page.js.post("/test_event", components=[ticker, from_dt, to_dt]).onSuccess([ chart.build(events.data["chart"]), table.js.setColumnDefs(events.data["columns"]), table.js.setRowData(events.data["table"]), page.body.loading(False)])]) text.click([from_dt.input.build(text.dom.content), button.dom.events.trigger("click")]) text_6m.click([from_dt.input.build(text_6m.dom.content), button.dom.events.trigger("click")]) text_2m.click([from_dt.input.build(text_2m.dom.content), button.dom.events.trigger("click")]) text_1m.click([from_dt.input.build(text_1m.dom.content), button.dom.events.trigger("click")]) powered = page.ui.rich.powered() hr = page.ui.layouts.hr() box = page.ui.div() box.extend([title, powered, hr, ticker, from_dt, to_dt, button, sub_title, buttons, chart, table]) box.style.doc() return page
def get_page(mod, template=False): """ Description: ------------ Get the page object from the imported module Attributes: ---------- :param mod: Module. The Python imported module used to build the page :param template: Boolean """ if hasattr(mod, 'get_page'): try: from epyk_studio.core.Page import Report page = Report() page.json_config_file = mod.__name__ except: page = Report() page.json_config_file = mod.__name__ if template and hasattr(mod, 'INPUTS'): page.inputs = {i: "%%(%s)s" % i for i in mod.INPUTS} mod.get_page(page) return page return mod.page
def index(to_json=False): rptObj = Report() rptObj.ui.title('Welcome To Epyk Engine', (120, 'px')).css('text-align', 'center') # regNtwrk, edgesReg = EpykMain.getScripts() result = rptObj.outs._to_html_obj() result['header'] = rptObj.headers if to_json: return json.dumps(result) return HtmlTmplBase.STATIC_PAGE % result
def create_page(): page = Report() page.headers.dev() page.theme = ThemeBlue.BlueGrey() tickers_info = { 'BAC': "Bank of America", 'GS': "Goldman Sachs", 'JPM': "JPMorgan Chase", 'SAN.MC': "Banco Santander", 'C.MX': "Citigroup Inc.", 'HSBC-PA': "HSBC Holdings PLC" } title = page.ui.title("Flask - Advanced example 2") ticker = page.ui.fields.select(cpns.select.from_dict(tickers_info), label="Tickers", multiple=True, html_code="ticker_value") from_dt = page.ui.fields.date(value="M-1", html_code="from_date", label="From") to_dt = page.ui.fields.today(html_code="to_date", label="To") button = page.ui.buttons.colored("Click") sub_title = page.ui.title("Financial Sector") pivot = page.ui.tables.pivots.plotly() button.click([ page.body.loading(), page.js.post("/test_event", components=[ticker, from_dt, to_dt]).onSuccess([ pivot.build(events.data["table"]), page.body.loading(False) ]) ]) powered = page.ui.rich.powered() hr = page.ui.layouts.hr() box = page.ui.div() box.extend( [title, powered, hr, ticker, from_dt, to_dt, button, sub_title, pivot]) box.style.configs.doc() return page
def refresh(view_name): """ Description: ------------ This will transpile only the selected report. Transpilation will generate HTML content from the python code using Epyk framework Attributes: ---------- :param view_name: """ mod = __import__(view_name) page = Report() mod.get_page(page) print(page.outs.html_file(path='views', name=view_name))
async def dynamic(request: Request): """ Description: ------------ :param request: """ from epyk.core.Page import Report page = Report() page.headers.dev() div = page.ui.div("Hellow World!") button = page.ui.button("Click Me") div.style.css.color = 'red' button.click([page.js.alert("Clicked")]) return page.outs.html()
def home(): """ Report creation on the fly in Flask """ from epyk.core.Page import Report rptObj = Report() list = rptObj.ui.list() for pyfile in os.listdir("reports"): list.add_item( rptObj.ui.link(pyfile, url="/report/%s" % pyfile[:-3]).css({ "padding": '2px 0', 'display': 'block' })) return rptObj.outs.html()
def refresh(view_name): """ Description: ------------ This will transpile only the selected report. Transpilation will generate HTML content from the python code using Epyk framework Attributes: ---------- :param view_name: """ mod = __import__(view_name) if hasattr(mod, 'get_page'): page = Report() mod.get_page(page) page.outs.publish(server="vue", app_path=out_path, module="MyModule", selector='mymodule', target_folder=folder_target, auto_route=True) else: mod.page.outs.publish(server="vue", app_path=out_path, module="MyModule", selector='mymodule', target_folder=folder_target, auto_route=True)
from epyk.core.Page import Report from epyk.core.data import events from epyk.core.data import datamap # Create a basic report object page = Report() page.headers.dev() side = page.ui.navigation.side() data = [{ "id": 0, "group": 0, "content": 'item 0', "start": "2020-06-29", 'type': 'point' }, { "id": 0, "group": 0, "content": 'item 0', "start": "2020-06-17", "end": "2020-06-21" }, { "id": 1, "group": 0, "content": 'item 1', "start": "2020-06-10", "end": "2020-06-20", 'type': 'background' }, {
from epyk.core.Page import Report from epyk.core.css.themes import ThemeBlue # Create a basic report object page = Report() page.headers.dev() page.verbose = True # Display the system logs page.theme = ThemeBlue.BlueGrey() page.body.add_template(defined_style="doc") # Create an input text field. input = page.ui.input(placeholder="Write your text and press show") number = page.ui.input(placeholder="Write a number and press show (Xs)") # Define the popup object. danger = page.ui.network.warning() danger.options.time = None danger.options.close = False # Button to display the popup. button1 = page.ui.button("Show") button1.click([ danger.build(input.dom.content) ]) # Button to display the popup with a timer. button2 = page.ui.button("Show (Xs)") danger.options.config_js({"time": number.dom.content}) print("ok")
def create_page(): global DATA_CACHE page = Report() page.headers.dev() DATA_CACHE = page.py.requests.csv(data_urls.OWID_BIRTH_OUT_MARRIAGE, store_location=r"C:\tmps") data = pd.DataFrame(DATA_CACHE, columns=[ 'Entity', 'Year', 'Births outside of marriage (% of all births)' ]) data['Births outside of marriage (% of all births)'] = pd.to_numeric( data['Births outside of marriage (% of all births)']) mean_per_years = data.groupby([ "Year" ])["Births outside of marriage (% of all births)"].mean().to_dict() template = page.body.add_template(defined_style="doc") template.style.css.background = page.theme.greys[0] filters, width = [], 80 for k in DATA_CACHE[0].keys(): name = NAMES[k] filters.append( page.ui.buttons.filter(name, is_number=True, width=(width, 'px'), html_code=name)) gauge = page.ui.charts.apex.gauge(mean_per_years["2010"], "2010", height=100) gauge.colors(["red", "blue"]) gauge2 = page.ui.charts.apex.gauge(mean_per_years["2011"], "2011", height=100) gauge2.colors(["blue"]) gauge3 = page.ui.charts.apex.gauge(mean_per_years["2012"], "2012", height=100) gauge4 = page.ui.charts.apex.gauge(mean_per_years["2013"], "2013", height=100) gauge4.colors(["purple"]) img = page.ui.img("https://img.stackshare.io/service/1002/tornado.png", width=100, height=100) img.style.css.fixed(top=(0, "px"), right=(24, "%")) page.ui.titles.head("Birth outside marriage trend") page.ui.titles.headline("Yearly KPI") page.ui.titles.underline(width=100) row = page.ui.row([gauge, gauge2, gauge3, gauge4]) refresh = page.ui.buttons.colored("Update") refresh.style.css.margin_top = 10 filters.append(refresh) row.options.responsive = False row.options.autoSize = False columns = page.ui.div(filters, width=(width, 'px')) table = page.ui.table(DATA_CACHE) table.style.css.width_calc(110) table.style.css.float = "right" table.config.paginationSize = 10 page.ui.titles.headline("Raw data") page.ui.titles.underline(width=100) container = page.ui.div([columns, table]) page.ui.texts.references.github(data_urls.OWID_BIRTH_OUT_MARRIAGE) container.style.css.display = "inline-block" refresh.click([ page.js.post("/data", components=filters).onSuccess( [table.build(events.data["table"])]), gauge.build(page.js.math.random(1, 100)), gauge2.build(page.js.math.random(1, 100)), gauge3.build(page.js.math.random(1, 100)), gauge4.build(page.js.math.random(1, 100)), ]) page.ui.layouts.hr() page.ui.rich.powered() return page
from epyk.core.py import Pyk from epyk.core.Page import Report pyk_rpt = Pyk.requires( r'C:\Users\nelso\PycharmProjects\epyk-ui\epyk\tests\pyk_report.py') rpt_obj = Report() rpt_obj.ui.text("Here we have a text followed by a normal button") rpt_obj.register(pyk_rpt.button) rpt_obj.ui.text("Then we have an import button") rpt_obj.register(pyk_rpt.imp) print(rpt_obj.outs.html_file())
from epyk.core.Page import Report from epyk.core.data import components from epyk.core.css.themes import ThemeBlue from epyk.core.data import events # Create a basic report object page = Report() page.headers.dev() template = page.body.add_template(defined_style="doc") template.style.css.background = "white" page.theme = ThemeBlue.BlueGrey() categories = ["Shopping", "Meeting"] page.ui.title("My todo list") check_list = page.ui.lists.checks(width=(100, "%")) check_list.options.delete = True check_list.style.css.border = True check_list.style.css.padding = 5 item = page.ui.inputs.left(placeholder="Add your item", width=(None, '')) category = page.ui.select(components.select.from_list(categories)) button = page.ui.buttons.colored("Add") page.css.customText('''.test:hover {color: green !IMPORTANT}''') container = page.ui.div() for c in [item, category, button]: container.add(page.ui.layouts.inline(c)) container[1].style.css.padding_left = 5 container[1].style.css.padding_right = 5
from epyk.core.Page import Report from epyk.tests import data_urls # Create a basic report object page = Report() page.headers.dev() page.body.set_background() page.imports().google_products(['tables']) data_rest_1 = page.py.requests.csv(data_urls.DATA_EARTHQUAKE) t1 = page.ui.tables.google.table(data_rest_1)
from epyk.core.Page import Report rptObj = Report() REPORT_OBJECT = rptObj rptObj.title('Welcome to Epyk')
from epyk.core.Page import Report import config # Create a basic report object rpt = Report() # Create a list of badges rpt.ui.lists.badges([{ 'label': 'Python', 'value': 12 }, { 'label': 'R', 'value': 3 }]) # Create a bespoke list p = rpt.ui.lists.points() for d in [{ 'label': 'Python', 'url': 'https://www.python.org/' }, { 'label': 'R' }]: p.add_item(rpt.ui.link(d['label'], d.get('url'))) rpt.outs.browser.codepen(path=config.OUTPUT_PATHS)
from epyk.core.Page import Report # Create a basic report object page = Report() page.headers.dev() b = page.ui.navbar(title="Epyk") b.move() # b += page.ui.link("Test") # Console component c = page.ui.rich.console( "This is a log section for all the events in the different buttons *", options={"timestamp": True}) content = page.ui.contents(top=50) # t = page.ui.title("test", 1) t = page.ui.title("test", 4) t = page.ui.title("test", 3) t = page.ui.title("test") content.move() page.ui.sliders.progressbar(40) page.ui.slider([1, 2, 3, 4, 5, 6, 7]) page.ui.vignets.bubble({ "value": 23.890, "title": "Title", 'url': '#'
from epyk.core.Page import Report import config # Create an empty report in the webpage rptObj = Report() # Add another sparkline with as a line type #rptObj.ui.charts.dc.line("line", [random.randint(-100, 100) for i in range(20)]) # Add a line return rptObj.ui.layouts.new_line() # Add another sparkline with as a bar type rptObj.ui.charts.dc.line([{"name": "test", "count": 34}]) # Transpile to Javascriot and create a report in codepen (python will automatically open the default browser) rptObj.outs.browser.codepen(path=config.OUTPUT_PATHS)
def create_page(): page = Report() page.theme = ThemeBlue.BlueGrey() page.body.style.css.background = "linear-gradient(45deg, #00f 1%, #fff 1%, #fff 49%, #00f 49%, #00f 51%, #fff 51%, #fff 99%, #00f 99%)" page.body.style.css.background_size = "20px 20px" page.body.style.css.background_position = "0 0" page.body.style.css.text_align = "center" page.body.style.css.padding_top = 10 page.body.style.css.padding_bottom = 10 page.body.style.css.min_height = "100%" container = page.ui.div(width=(100, '%'), height=(100, '%')) container.style.css.background = "white" container.style.css.max_width = "600px" container.style.css.margin = "auto" container.style.css.padding = "0 10px" container.style.configs.shadow() title = page.ui.titles.head("Pseudorandom Number Generator in Python") title.style.css.display = "inline-block" container.add(title) sub_title0 = page.ui.titles.title("Mersenne Twister") paragraph = page.ui.panels.sliding(''' The Mersenne Twister is a pseudorandom number generator (PRNG). It is by far the most widely used general-purpose PRNG.[1] Its name derives from the fact that its period length is chosen to be a Mersenne prime. The Mersenne Twister was developed in 1997 by Makoto Matsumoto [ja] (松本 眞) and Takuji Nishimura (西村 拓士).[2] It was designed specifically to rectify most of the flaws found in older PRNGs. The most commonly used version of the Mersenne Twister algorithm is based on the Mersenne prime 219937−1. The standard implementation of that, MT19937, uses a 32-bit word length. There is another implementation (with five variants[3]) that uses a 64-bit word length, MT19937-64; it generates a different sequence. ''', sub_title0) container.add(paragraph) container.add(page.ui.layouts.hr()) sub_title = page.ui.titles.title("Parameters") container.add(sub_title) seed1 = page.ui.fields.input(label="seed", html_code="seed") container.add(seed1) n = page.ui.fields.input(label="Samples", html_code="n") container.add(n) valid = page.ui.buttons.colored("Run Python") valid_js = page.ui.buttons.colored("Run Javascript") valid_js.style.css.margin_left = 10 container.add(page.ui.div([valid, valid_js])) container.add(page.ui.layouts.hr()) py_title = page.ui.titles.section("Python Results") container.add(py_title) line = page.ui.charts.chartJs.line([], y_columns=["y"], x_axis=["x"], height=160) bar = page.ui.charts.chartJs.bar([], y_columns=["c"], x_axis=["b"], height=160) container.add(page.ui.row([line, bar]).css({"background": 'white'})) js_title = page.ui.titles.section("Javascript Results") container.add(js_title) js_line = page.ui.charts.chartJs.line([], y_columns=["y"], x_axis=["x"], height=160) container.add(js_line) valid.click([ page.js.objects.time("window.time_py"), page.js.post("/compute", [seed1, n]).onSuccess([ line.build(events.data["line"]), bar.build(events.data["bar"]), page.js.console.perf("window.time_py", label="Python Processing: "), page.js.print("Python computed", 2000, cssAttrs={"bottom": "10px", 'right': "10px", 'position': 'fixed'}) ]), ]) valid_js.click([ page.js.objects.list.new([], "js_data"), page.js.objects.time("window.time_py"), expr.for_(n, [ page.js.objects.new({}, "row"), page.js.objects.get("row").setattr("y", page.js.math.random()).r, page.js.objects.get("row").setattr("x", page.js.objects.get("i")).r, page.js.objects.list.get("js_data").push(page.js.objects.get("row")) ]), js_line.build(page.js.objects.list.get("js_data")), page.js.console.perf("window.time_py", label="Javascript Processing: "), page.js.print("Javascript computed", 2000, cssAttrs={"bottom": "10px", 'right': "10px", 'position': 'fixed'}) ]) return page
from epyk.core.Page import Report page = Report() page.headers.dev() page.verbose = True path = page.ui.input(placeholder="Set your path here") qrcode = page.ui.qrcode() # Change the qrcode options qrcode.options.colorDark = "orange" qrcode.options.size = 50 path.enter([qrcode.build(path.dom.content)]) button = page.ui.button("Google QRCode") button.click([qrcode.js.makeCode("https://www.google.com/")]) button = page.ui.button("Clear") button.click([qrcode.js.clear()])
def create_page(): page = Report() page.headers.dev() page.body.add_template(defined_style="doc") page.theme = ThemeBlue.BlueGrey() title = page.ui.title("Python") page.ui.layouts.underline() title.options.editable = True sub_title = page.ui.titles.subtitle("The Python Community") page.ui.menu(sub_title, post="/bar") p = page.ui.paragraph(''' The [Python Software Foundation](https://www.python.org/psf/) and the global Python community welcome and encourage participation by everyone. Our community is based on mutual respect, tolerance, and encouragement, and we are working to help each other live up to these principles. ''', options={"markdown": True}) page.ui.menu(p) table = page.ui.tables.tabulator(mocks.languages) page.ui.tables.menu(table, post="/table") page.ui.titles.subtitle("Zoom on a package") pkg_name = page.ui.fields.input("epyk", label="Package name", html_code="package") bar_chart = page.ui.charts.chartJs.bar(y_columns=["download"], x_axis="name") menu_bar = page.ui.charts.menu(bar_chart, post={ "url": "/chart", "components": [pkg_name] }) pie_chart = page.ui.charts.chartJs.pie(y_columns=["value"], x_axis="type") menu_pie = page.ui.charts.menu(pie_chart, post={ "url": "/pie", "components": [pkg_name] }) row = page.ui.row([[menu_bar, bar_chart], [menu_pie, pie_chart]], position="top") row.options.responsive = False row.options.autoSize = False sub_title2 = page.ui.titles.subtitle("Conferences and Workshops") sub_title2.options.editable = True p2 = page.ui.paragraph(''' There are a number of conferences held each year where the Python community gathers together (listed alphabetically): ''', options={"markdown": True}) page.ui.menu(p2, save_funcs=[page.js.alert(p2.dom.content)], update_funcs=[p2.build("Updated paragraph")], profile=True) sq = page.ui.lists.squares(["DjangoCon Europe"]) page.ui.lists.menu(sq) page.ui.layouts.hr().css({"margin-top": '20px'}) page.ui.titles.subtitle("Report powered by") page.ui.rich.powered() page.ui.icons.fixed("fas fa-file-download").click([ std.var("backboneData", global_scope=True).addComponent(sub_title), page.js.clipboard( std.var("backboneData", global_scope=True).stringify()), page.js.window.download( page.js.window.btoa( std.var("backboneData", global_scope=True).stringify()), "configuration.json") # page.js.location.download(page.js.location.getUrlFromData(std.var("backboneData", global_scope=True).stringify())) ]) page.body.onReady([ std.var("backboneData", value={}, global_scope=True), ]) return page
""" """ import collections from epyk.core.js import Imports from epyk.core.Page import Report #Imports.installed_packages() report = Report() imports = Imports.ImportManager(report=report) modules = collections.OrderedDict() print(imports.getModules(modules, 'c3')) i = imports.cleanImports(['c3'], Imports.JS_IMPORTS) print(i) i = imports.cssResolve(['c3']) print(i) f = imports.getFiles(['c3'], ['c3']) print(f['css'][0]['file']['script']) # p = imports.getPackage('jqueryui', static_path=r"..\outs") p = imports.getFullPackage('font-awesome', static_path=r"..\outs")
from epyk.core.Page import Report from epyk.core.css.themes import ThemeDark import config # Create a basic report object page = Report() page.headers.dev() # Change the theme of the report page.theme = ThemeDark.Dark() # Change the first color of this theme (overrride) page.theme.colors[-1] = "yellow" # Add icon # The path for the icon is defind in config page.ui.images.circular("epykIcon.PNG", path=config.IMG_PATH) page.ui.layouts.new_line() # Avatar with a status page.ui.images.avatar("Epyk", status='out') # Avatar with an image page.ui.images.avatar(image="epykIcon.PNG", path=config.IMG_PATH, status=False) # Add badges page.ui.layouts.new_line() page.ui.images.badge("Test badge", "Label", icon="fas fa-align-center")