def test_new_code_reference_link(self): md_file = MdUtils(file_name="Test_file", title="") text = "mdutils library" reference_tag = "mdutils library" expected_value = '[``' + text + '``][' + reference_tag + ']' created_value = md_file.new_reference_link( link="https://github.com/didix21/mdutils", text=text, reference_tag=reference_tag, bold_italics_code='c') self.assertEqual(expected_value, created_value)
def write_league_md(league, my_ros_dudes, my_ros_ranks, unowned_ros_dudes, unowned_ros_ranks, def_advice, kick_advice, weekly_team, weekly_tiers, potential_stream_names, potential_stream_pos, potential_stream_tiers, starters): from mdutils.mdutils import MdUtils md_file = 'league_' + league['nickname'].replace(' ', '') mdFile = MdUtils(file_name=md_file, title=league['nickname']) mdFile.new_header(level=2, title='ROS Valuations', add_table_of_contents='n') mdFile.new_header(level=3, title='Your Roster', add_table_of_contents='n') list_of_strings = ["Player", "Value"] for p, v in zip(my_ros_dudes, my_ros_ranks): list_of_strings.extend([p, str(v)]) mdFile.new_table(columns=2, rows=int(len(list_of_strings) / 2), text=list_of_strings, text_align='center') mdFile.new_header(level=3, title='Available Free Agents', add_table_of_contents='n') list_of_strings = ["Player", "Value"] for p, v in zip(unowned_ros_dudes, unowned_ros_ranks): list_of_strings.extend([p, str(v)]) mdFile.new_table(columns=2, rows=int(len(list_of_strings) / 2), text=list_of_strings, text_align='center') mdFile.new_header(level=2, title='Weekly Tiers', add_table_of_contents='n') mdFile.new_header(level=3, title='Suggested Starting Lineup', add_table_of_contents='n') mdFile.new_header(level=3, title='Substitutions Necessary', add_table_of_contents='n') mdFile.new_header(level=3, title='Skill Streams Available', add_table_of_contents='n') mdFile.new_header(level=2, title='Weekly Streaming Advice', add_table_of_contents='n') mdFile.new_header(level=3, title='Defenses', add_table_of_contents='n') mdFile.new_header(level=3, title='Kickers', add_table_of_contents='n') mdFile.create_md_file() return md_file
def create_markdown(region): """ Create markdown file which Kevin's figures are embedded. """ region_short = regionNames[region] mdFile = MdUtils(file_name=today) mdFile.new_line('---') mdFile.new_line(f'title: \"{today}\"') mdFile.new_line(f'date: "{today}"') mdFile.new_line('description: "Some amazing findings in here!"') mdFile.new_line(f'region: "{region}"') mdFile.write('\n---\n') mdFile.new_paragraph( '**Figure 1.** The non-residential mobility index is a measure of the average amount of time spent outside of home, based on smartphone mobility data (the index is scaled so that levels in the baseline period from Jan 3 to Feb 6, 2020 represent 100).' ) # <img src="mobilityAlone_1yr.png" style="width:2400px;height:1200px"/> img_path = f"/figures/{region_short}/{today}/mobilityAlone_1yr.png" width1, height1 = get_img_size(img_path) mdFile.new_paragraph( Html.image(path=img_path, size=f'{width1}x{height1}', align='center')) mdFile.new_paragraph( f'**Figure 2.** Association between non-residential mobility and COVID-19 case growth across 7 Canadian provinces, March 15, 2020 to {today_text}.' ) img_2_path = f"/figures/{region_short}/{today}/mobility_byMonth.png" width2, height2 = get_img_size(img_2_path) mdFile.new_paragraph( Html.image(path=img_2_path, size=f'{width2}x{height2}', align='center')) mdFile.new_paragraph( 'Weekly COVID-19 growth rate (Y = cases in given week / cases in prior week) is strongly associated with the non-residential mobility in the prior 2-week period (X). The point where the regression line (black) crosses the line representing no COVID-19 case growth (red line) is the average Canadian mobility threshold. The Canadian mobility threshold is lower in spring, fall and winter of 2020, compared to the summer of 2020.', align="center") mdFile.new_paragraph( f'**Figure 3.** Left panel: Variation in mobility (circles) and the estimated mobility threshold (purple dash), for 5 Canadian provinces with the most cases, March 15, 2020 to {today_text}, 2021. Right panel: Association between mobility gap and COVID-19 growth rate.' ) img_3_path = f"/figures/{region_short}/{today}/mobilityGap_both.png" width3, height3 = get_img_size(img_3_path) mdFile.new_paragraph( Html.image(path=img_3_path, size=f'{width3}x{height3}', align='center')) mdFile.new_paragraph( 'The mobility threshold is the estimated level of mobility needed to control COVID-19 case growth. This threshold is highest in summer and in less populated provinces. When mobility decreased below the mobility threshold (blue dots), weekly COVID-19 cases counts decreased. In November 2020, Manitoba was the only province that implemented a lockdown that had successfully crossed the mobility threshold and has led to reductions in COVID-19 case growth. Other provinces waited until December 2020.', align="center") mdFile.create_md_file() Path(f'{today}.md').rename( f'./web_output/reports/{region_short}/{today}.md') with open(f'./web_output/reports/{region_short}/{today}.md', "r") as f: lines = f.readlines() with open(f'./web_output/reports/{region_short}/{today}.md', "w") as f: for line in lines[4:]: f.write(line)
def generate_report(): report = MdUtils(file_name=f'./report.md') report.new_header(level=1, title='Выделение признаков символов') report.new_line(text='Выполнил Ахманов Алексей Б18-514') report.new_line(text=f'Алфавит - {ALPHABET}') for letter in ALPHABET: letter_folder_path = f'./{folder_helper.IMAGES_FOLDER_PATH}/letter_{letter}' os.makedirs(letter_folder_path, exist_ok=True) letter_image_path = f'{letter_folder_path}/{letter}.png' letter_image = Image.new(mode=constants.GRAYSCALE_MODE, size=(FONT_SIZE, FONT_SIZE), color=WHITE) result = ImageDraw.Draw(im=letter_image, mode=constants.GRAYSCALE_MODE) result.text(xy=(0, 0), text=letter, font=FONT, fill=0, anchor='lt') letter_image = cut_empty_rows_and_cols(letter_image) letter_image.save(letter_image_path) report.new_header(level=2, title=f'Буква {letter}') report.new_line(report.new_inline_image(text=letter, path=letter_image_path)) thresholded = simple_threshold(letter_image, 100) report.new_line(text=f'Вес черного - {black_weight(thresholded)}') report.new_line(text=f'Удельный вес черного - {normalized_black_weight(thresholded)}') center = gravity_center(thresholded) report.new_line(text=f'Координаты центра масс - ({center[0]}, {center[1]})') normalized_center = normalized_gravity_center(thresholded) report.new_line(text=f'Нормированные координаты центра масс - ({normalized_center[0]}, {normalized_center[1]})') report.new_line(text=f'Центральный горизонтальный осевой момент - {central_horizontal_axial_moment(thresholded)}') report.new_line(text=f'Центральный вертикальный осевой момент - {central_vertical_axial_moment(thresholded)}') report.new_line(text=f'Нормированный центральный горизонтальный осевой момент -' f'{normalized_central_horizontal_axial_moment(thresholded)}') report.new_line(text=f'Нормированный центральный вертикальный осевой момент -' f'{normalized_central_vertical_axial_moment(thresholded)}') h_levels, h_projections = horizontal_projection(thresholded) pyplot.plot(h_levels, h_projections) pyplot.title(f'Horizontal projection {letter}') path = f'{letter_folder_path}/horizontal_projection_{letter}.png' pyplot.savefig(path) pyplot.close() report.new_line(report.new_inline_image(text=letter, path=path)) v_levels, v_projections = vertical_projection(thresholded) pyplot.plot(v_levels, v_projections) pyplot.title(f'Vertical projection {letter}') path = f'{letter_folder_path}/vertical_projection_{letter}.png' pyplot.savefig(path) pyplot.close() report.new_line(report.new_inline_image(text=letter, path=path)) report.new_line() report.create_md_file()
def test_create_default_table(self): md_file = MdUtils("file_name") table = Table() result_table = '\n|**Test**|**Descripción**|**Estado**|\n| --- | --- | --- ' \ '|\n|Test 1|Carga de configuración correcta|<font color="green">OK</font>|\n' \ '|Test 2|Lectura de Configuración|<font color="red">NOK</font>|\n' \ '|Test 3|Lectura de Soporte|<font color="green">OK</font>|\n' \ '|Test 4|Modificación de entradas y lectura de salidas de cantón|<font color="green">' \ 'OK</font>|'\ '\n|Test 5|Lectura de estados de Pedal de Rearme y Aviso|<font color="green">OK</font>|\n' \ '|Test 6|Actualización de datos de unidades de vía|<font color="green">OK</font>|\n' \ '|Test 7|Fallos en carga de configuración - Campo IdApp Erróneo|<font color="green">' \ 'OK</font>|' \ '\n' \ '|Test 8|Fallos en carga de configuración - Campo VersTAbla Erróneo' \ '|<font color="red">NOK</font>|'\ '\n|Test 9|Fallos en carga de configuración - Campo IdUc Erróneo|<font color="red">' \ 'NOK</font>|' \ '\n|Test 10|Fallos en carga de configuración - Campo Addresses Erróneo' \ '|<font color="red">NOK</font>|\n' \ '|Test 11|Fallos en carga de configuración - Campo NumTc Erróneo' \ '|<font color="red">NOK</font>|\n' \ '|Test 12|Fallos en carga de configuración - Campo NumUv Erróneo' \ '|<font color="red">NOK</font>|\n' \ '|Test 13|Fallos en carga de configuración - Campo CRC Erróneo|<font color="red">NOK</font>|\n' text_array = ['**Test**', '**Descripción**', '**Estado**', 'Test 1', 'Carga de configuración correcta', md_file.textUtils.text_color("OK", 'green'), 'Test 2', 'Lectura de Configuración', md_file.textUtils.text_color("NOK", 'red'), 'Test 3', 'Lectura de Soporte', md_file.textUtils.text_color("OK", 'green'), 'Test 4', 'Modificación de entradas y lectura de salidas de cantón', md_file.textUtils.text_color("OK", 'green'), 'Test 5', 'Lectura de estados de Pedal de Rearme y Aviso', md_file.textUtils.text_color("OK", 'green'), 'Test 6', 'Actualización de datos de unidades de vía', md_file.textUtils.text_color("OK", 'green'), 'Test 7', 'Fallos en carga de configuración - Campo IdApp Erróneo', md_file.textUtils.text_color("OK", 'green'), 'Test 8', 'Fallos en carga de configuración - Campo VersTAbla Erróneo', md_file.textUtils.text_color("NOK", 'red'), 'Test 9', 'Fallos en carga de configuración - Campo IdUc Erróneo', md_file.textUtils.text_color("NOK", 'red'), 'Test 10', 'Fallos en carga de configuración - Campo Addresses Erróneo', md_file.textUtils.text_color("NOK", 'red'), 'Test 11', 'Fallos en carga de configuración - Campo NumTc Erróneo', md_file.textUtils.text_color("NOK", 'red'), 'Test 12', 'Fallos en carga de configuración - Campo NumUv Erróneo', md_file.textUtils.text_color("NOK", 'red'), 'Test 13', 'Fallos en carga de configuración - Campo CRC Erróneo', md_file.textUtils.text_color("NOK", 'red')] self.assertEqual(table.create_table(columns=3, rows=14, text=text_array), result_table)
def test_insert_code(self): md_file = MdUtils(file_name='Test_file') code = ("mdFile.new_header(level=1, title='Atx Header 1')\n" "mdFile.new_header(level=2, title='Atx Header 2')\n" "mdFile.new_header(level=3, title='Atx Header 3')\n" "mdFile.new_header(level=4, title='Atx Header 4')\n" "mdFile.new_header(level=5, title='Atx Header 5')\n" "mdFile.new_header(level=6, title='Atx Header 6')\n") expects = '\n\n```\n' + code + '\n```' self.assertEqual(md_file.insert_code(code), expects) language = 'python' expects = '\n\n```' + language + '\n' + code + '\n```' self.assertEqual(md_file.insert_code(code, language), expects)
def test_new_reference_link_when_reference_tag_not_defined_and_align_is_defined( self): md_file = MdUtils(file_name="Test_file", title="") text = "mdutils library" try: md_file.new_reference_link( link="https://github.com/didix21/mdutils", text=text, align='center') except TypeError: return self.fail()
def test_new_header(self): file_name = 'Test_file' md_file = MdUtils(file_name) string_headers_expected = "\n# Header 0\n\n## Header 1\n\n### Header 2\n\n#### Header 3\n\n" \ "##### Header 4\n\n###### Header 5\n" string_headers = "" for x in range(6): string_headers += md_file.new_header(level=(x + 1), title='Header ' + str(x), style='atx') self.assertEqual(string_headers, string_headers_expected) md_file.create_md_file() file_result = md_file.read_md_file(file_name) self.assertEqual(file_result, '\n\n\n' + string_headers_expected)
def generateReadme(): mdFile = MdUtils(file_name="LOCAL_README.md") mdFile.new_header(level=1, title="Compilation Of DSC-RAIT resources") mdFile.new_paragraph( "This is a ``README.md`` file generated by asmrPy to test it's capabilities. Stay tuned for more updates!" ) for d in db.resources.find(): mdFile.new_header(level=2, title=d['domain']) for l in d['links']: mdFile.new_paragraph(text=f"{l['info']}: {l['link']}") mdFile.create_md_file() text = mdFile.read_md_file(file_name="LOCAL_README.md") return text
def create_markdown(file_path, title): mdFile = MdUtils(file_name=file_path, title= title) mdFile.new_line(" [@wikidata:" + wd_id + "]") mdFile.new_line() mdFile.new_header(1, "Highlights") mdFile.new_header(1, "Comments") mdFile.new_header(1, "Links") mdFile.new_line(" * [Scholia Profile](https://scholia.toolforge.org/work/" + wd_id + ")") mdFile.new_line(" * [Wikidata](https://www.wikidata.org/wiki/" + wd_id + ")") mdFile.new_line(" * [TABernacle](https://tabernacle.toolforge.org/?#/tab/manual/" + wd_id + "/P921%3BP4510)") mdFile.new_line() mdFile.create_md_file()
def _write_action_group_page(self, action_group: ActionGroup): group_path = f'{self.tool_prefix}/{action_group.name}' md = MdUtils(file_name=group_path, title=action_group.name) writer = Writer(md) writer.write_description(action_group.description) writer.write_command_usage(self, action_group=action_group) self._write_tool_command_arguments_and_options(writer) writer.write_actions_table(action_group.actions, action_group=action_group) md.create_md_file() os.makedirs(group_path, exist_ok=True) for action in action_group.actions: self._write_action_page(action, action_group=action_group)
def run(username, name, job, company, accounts): mdFile = MdUtils(file_name='README', title=title) add_introduction(mdFile, username, name, job, company) add_analytics(mdFile, username) if accounts is not None: add_accounts_url(mdFile, accounts) mdFile.create_md_file() print('✅ Github profile README.md file created successfully for {}'.format( username))
def create_file(files): data = get_data(files) md_file = MdUtils(file_name='repositories') md_file.new_header(level=1, title='Repositories') grouped_by_type = groupby(data, key=itemgetter('type')) for key, value in grouped_by_type: value_sorted = sorted(value, key=lambda x: x['name']) md_file.new_header(level=2, title=key) if key == 'Reading': write_reading_entries(value_sorted, md_file) else: for item in value_sorted: write_item(item, md_file) md_file.new_line() md_file.create_md_file()
def create_report(self, reports, sorted_tools): outfile = f"{self.outdir}/reports/Report.md" title = f"PENSEC - Report of {self.target.hostname}" reportfile = MdUtils(file_name=outfile, title=title) # "Execute Summary" reportfile.new_header(level=3, title="Common Statistics") for tool in sorted_tools: tool.write_report_summary(reportfile, reports) # "Technical Details" for tool in sorted_tools: tool.write_report(reportfile, reports) reportfile.create_md_file() self.logger.info("Report saved in " + outfile)
def run(username, name, job, company, hardskills, accounts): mdFile = MdUtils(file_name='README', title=title) add_introduction(mdFile, username, name, job, company) if hardskills is not None: add_hardskills(mdFile, hardskills) add_analytics(mdFile, username) if accounts is not None: add_accounts_url(mdFile, accounts) mdFile.create_md_file() print('\nтЬЕ \033[1mGithub profile README.md file created successfully for {} user!\033[0m'.format(username))
def _write_action_page(self, action: Action, action_group: Optional[ActionGroup] = None): group_str = f'{action_group.name}/' if action_group else '' md = MdUtils( file_name=f'{self.tool_prefix}/{group_str}{action.action_name}', title=action.action_name) writer = Writer(md) writer.write_description(action.description) writer.write_command_usage(self, action_group=action_group, action=action) writer.write_arguments(f'action `{action.action_name}`', action.optional_args, action.required_args) self._write_tool_command_arguments_and_options(writer) md.create_md_file()
def init_report(self): """ Prepares report directory for report content """ # Dir where the per-product-version report is kept prodver_report_dir = self.report_dir / self.product / self.version logger.debug(f"Initializing report dir {prodver_report_dir}") prodver_report_dir.mkdir(parents=True, exist_ok=True) # The per-product-version report markdown file itself self.report_index = MdUtils( file_name=str(prodver_report_dir / "README"), title=f"Vulnerability Report for {self.product} {self.version}") # Initialize license table headers self.vuln_table = [ "Component", f"Vulnerability{' ' * 15}", "Source Location" ]
def generate_singular_templates(bib_data): """ Parses a .bibtex file and creates a singular markdown write-up template for each entry. Args: bib_data: A pybtex parsed file Returns: Outputs singular markdown write-up templates """ for entry in tqdm(bib_data.entries.values()): title = entry.fields['title'] year = entry.fields['year'] url = entry.fields['url'] authors = str(entry.persons['author'][0]) if 'journal' in entry.fields: journal = entry.fields['journal'] file_name = authors.lower() + '-' + str(year) if 'journal' in locals(): title = authors + ', ' + title + ', ' + year + ', ' + journal else: title = authors + ', ' + title + ', ' + year mdfile = MdUtils(file_name=file_name, title=title) # Add the correct header information mdfile.new_header(level=1, title='TLDR') mdfile.new_header(level=1, title='Links') mdfile.new_line('Paper - ' + mdfile.new_inline_link(text='Link to Paper', link=url)) mdfile.new_header(level=1, title='Summary') mdfile.new_header(level=1, title='Comments') mdfile.new_header(level=1, title='Reference') mdfile.insert_code(entry.to_string(bib_format='bibtex')) mdfile.create_md_file()
def gen_kwargs_markdown(mapping: T_HandlerKwargMapping, output_file_path: str, extra_head: str = ""): md_file = MdUtils(file_name=output_file_path) if extra_head: md_file.write(extra_head) md_file.new_header(level=1, title="") for event_name, kwargs in mapping.items(): md_file.new_header(level=2, title=event_name) parameter_table = ["参数名称", "类型"] for kwarg in kwargs: row = [kwarg.name] if isinstance(kwarg.type_, str): row.append(kwarg.type_) else: # if get_origin(parameter.annotation) is Union: # # group_msg = group_message # continue row.append(kwarg.type_) parameter_table.extend(row) # debug(parameter_table) if len(parameter_table) > 2: md_file.new_table( columns=2, rows=int(len(parameter_table) / 2), text=parameter_table, text_align="center", ) md_file.create_md_file() print(f"成功生成{output_file_path}文件")
def createMdFromSqlTable(self, sqlTableFieldDescData, mdTableDesc=None): """ Args: sqlTableFieldDescData (list) : Should use the result of sqlConn.selectTable(sqlConn.fieldDescQuery) where sqlConn is type of class : SqlConn. Markdown table description (dict) which is { tableName : list of strings (list) ,... } """ mdTableDesc = self.getMdTableDesc() if not mdTableDesc else mdTableDesc tableNameSet = set() resultDict = {} for item in sqlTableFieldDescData: if item[0] not in tableNameSet: tableNameSet.add(item[0]) resultDict[item[0]] = [] originalDesc = {} if item[0] in mdTableDesc: originalDesc = mdTableDesc[item[0]]['columnDescSet'] pk = item[1] colName = item[2] colChName = originalDesc[ item[2]][0] if item[2] in originalDesc else '' dataType = item[3] notNull = item[4] desc = originalDesc[item[2]][1] if item[2] in originalDesc else '' resultDict[item[0]].extend( [pk, colName, colChName, dataType, notNull, desc]) for tableName, contentList in resultDict.items(): mdFile = MdUtils(self.path + 'SQL-Table-' + tableName) rowList = [ 'PrimaryKey', '欄位名稱', '欄位中文名稱', '欄位類型', 'NOT NULL', '詳細說明' ] rowList.extend(contentList) mdFile.new_table(columns=6, rows=int(len(rowList) / 6), text=rowList, text_align='center') mdFile.create_md_file()
def init_reports(self): """ Prepares report directory for report content """ # Dir where global license info is kept self.lic_data_dir = self.report_dir / "license-data" self.lic_data_dir.mkdir(exist_ok=True) # Dir where the per-product-version report is kept prodver_report_dir = self.report_dir / self.product / self.version prodver_report_dir.mkdir(parents=True, exist_ok=True) # The per-product-version report markdown file itself self.report_index = MdUtils( file_name=str(prodver_report_dir / "README"), title=f"Suspect License Report for {self.product} {self.version}") # Initialize license table headers self.lic_table = ["Component", "Version", "License(s)"]
def test_new_reference_image_markdown_data(self): md_file = MdUtils(file_name="Test_file", title="") expected_image_1 = '![image_1][reference]' expected_image_2 = '![image_2]' image_1 = md_file.new_reference_image(text='image_1', path='../image.png', reference_tag="reference") image_2 = md_file.new_reference_image(text='image_2', path='../image_2.png') expected_created_data = "\n\n\n" \ " \n{}".format(expected_image_1) + \ " \n{}".format(expected_image_2) + \ "\n\n\n" \ "[image_2]: ../image_2.png\n" \ "[reference]: ../image.png\n" md_file.new_line(image_1) md_file.new_line(image_2) md_file.create_md_file() actual_created_data = MarkDownFile.read_file("Test_file") self.assertEqual(expected_created_data, actual_created_data)
def makeMd(): main() lastDate = 0 lastMonth = 0 lastYear = 0 lastTime = "" os.chdir(saveLocation) mdOutputLocation = saveLocation + 'logbook.md' if os.path.exists(mdOutputLocation): #If file output.txt exists, remove it. If it doesn't, create it os.remove(mdOutputLocation) mdFile = MdUtils(file_name='logbook',title='My Logbook') with open(outputFileLocation, "r") as textDoc: lines = textDoc.readlines() for line in lines: firstTwoDigits = line[:2] if firstTwoDigits.isdigit(): date = line[:2] month = line[3:5] year = line[6:10] lastTime = line[11:19] if year != lastYear: mdFile.new_header(level=1, title=year) lastYear = year if month != lastMonth: monthWorded = monthToWords(month) mdFile.new_header(level=2, title=monthWorded) lastMonth = month if date != lastDate: mdFile.new_header(level=3, title=date) lastDate = date if (firstTwoDigits.isdigit() == False) and (line != "\n"): entryContent = lastTime + " - " + line mdFile.new_paragraph(entryContent) mdFile.create_md_file() print("md file created")
def publish_event_page(logs, website_src_path): # Generate the about file. mdFile = MdUtils( file_name=os.path.join(website_src_path, "content", "log"), title="Container Event Logging", ) status_table = ["Container Action", "Time (UTC)"] for entry in logs: container_status = (("~~" + entry[0].attrs["Config"]["Image"].split("/")[0] + "~~") if entry[2] == "destroyed" else ("**" + entry[0].attrs["Config"]["Image"].split("/")[0] + "**")) status_table.extend([ container_status, strf_time_diff(datetime.now(), entry[1]) + " ago" ]) mdFile.new_line() mdFile.new_table(columns=2, rows=len(logs) + 1, text=status_table, text_align="center") mdFile.new_header(level=5, title="Status Update Time") tz_table = ["TZ", "Time"] for city, tz in timezones.items(): tz_table.extend([city, datetime.now().astimezone(tz).strftime(fmt)]) mdFile.new_table(columns=2, rows=len(timezones) + 1, text=tz_table, text_align="center") mdFile.create_md_file() return None
def create_md_result_file(path, rucksack, timestamp, result_uuid): dir_result = os.path.join(path, f"{result_uuid}-result.md") md_file = MdUtils(file_name=dir_result, title='Orbis Experiment') md_file.new_line("Your Experiments are completed") md_file.new_line("Metadata link: " + md_file.new_inline_link( link=f"{result_uuid}-rooksack.json")) md_file.new_line() result = rucksack.result_summary() if "binary_classification" in result: values = result["binary_classification"] result_rows = [ "Annotator", "Dataset", "Micro F1 score", "Micro Precision", "Micro Recall", "Macro F1 score", "Macro Precision", "Macro Recall", "Total True Positive", "Total False Positive", "Total False Negative", "Total Items", "Entities", "Timestamp", "Orbis Version" ] result_rows.extend([ rucksack.config['aggregation']['service']['name'] if 'aggregation' in rucksack.config else 'None', rucksack.config['aggregation']['input']['data_set']['name'] if 'aggregation' in rucksack.config else 'None', f"{values['micro']['f1_score']:.4f}", f"{values['micro']['recall']:.4f}", f"{values['micro']['precision']:.4f}", f"{values['macro']['f1_score']:.4f}", f"{values['macro']['recall']:.4f}", f"{values['macro']['precision']:.4f}", f"{values['total_tp']:.4f}", f"{values['total_fp']:.4f}", f"{values['total_fn']:.4f}", f"{values['total_item_sum']:.4f}", " ".join(values['entities']), timestamp, orbis_version ]) md_file.new_table(columns=15, rows=2, text=result_rows, text_align='center') else: md_file.new_line("No results!!!") md_file.create_md_file()
def report(self, reports): report_dict = reports[Tool.Dependencies.NMAP_SERVICES] self.logger.info("Creating report for " + self.name) obj = {} for f in self.files: with open(f, "r") as scanfile: for s in scanfile.read().split("\n\n")[:-1]: scan = json.loads(s) if 'RESULTS_EXPLOIT' in scan and 'SEARCH' in scan: obj[scan["SEARCH"]] = { "exploits": scan["RESULTS_EXPLOIT"] } #temp outfile = f"{self.reportdir}/{self.name}.md" title = f"PENSEC - {self.name.capitalize()} Report" reportfile = MdUtils(file_name=outfile, title=title) reportfile.new_header(level=1, title="Common Statistics") reportfile.new_paragraph(f"X exploits found\n") reportfile.create_md_file() self.logger.info("Report saved in " + outfile) #report_dict["searchsploit_info"] = obj return obj
def publish_status_page(running_containers, website_src_path): # Generate the about file. mdFile = MdUtils( file_name=os.path.join(website_src_path, "content", "status"), title="System Status", ) status_table = ["Container", "Status"] for container in sorted( running_containers, key=lambda c: c.attrs["Config"]["Image"].split("/")[0]): status_table.extend([ container.attrs["Config"]["Image"].split("/")[0], container.attrs["State"]["Status"], ]) mdFile.new_line() mdFile.new_table( columns=2, rows=len(running_containers) + 1, text=status_table, text_align="center", ) mdFile.new_header(level=5, title="Status Update Time") tz_table = ["TZ", "Time"] for city, tz in timezones.items(): tz_table.extend([city, datetime.now().astimezone(tz).strftime(fmt)]) mdFile.new_table(columns=2, rows=len(timezones) + 1, text=tz_table, text_align="center") mdFile.create_md_file() return None
def initialize_doc(linkdict = None): """Initializes a markdown document in docs/script_docs named after this script with a correctly updated date. :param linkdict: A dictionary with keys in [prev,next,parent]. The corresponding values are the names of the files that we should link to, which are assumed to exist in the script docs directory. Do not provide the .md extension. :returns: a mdutils mdfile object. Must be written (invoke `mdfile.create_md_file`) in order to manifest a real file. """ filename = pathlib.Path(__main__.__file__).stem mdFile = MdUtils(file_name = os.path.join(pathname,filename),title = "Script documentation for file: "+ filename+", Updated on:" +str(datetime.datetime.now())) if linkdict is not None: mdFile.write(" \n") linklocs = OrderedDict([("parent","left"),("prev","left"),("next","left")]) for l in linklocs.keys(): if l not in linkdict.keys(): print("File has no {}, skipping".format(l)) continue else: filename = linkdict[l] assert os.path.exists(os.path.join(pathname,filename+".md")), ("The file {}.md does not exist in the script_docs folder.".format(filename)) file_text = "{} file: ".format(l)+mdFile.new_inline_link(text = filename,link = "./{}.md".format(filename)) mdFile.new_line(file_text,align = linklocs[l],bold_italics_code = 'b') return mdFile
def write_md(json_obj, md_fn, overwrite=True, wire_obj=True): if (not overwrite): if (os.path.isfile(md_fn)): return; print('->', md_fn) md_title = json_obj['title'] mdFile = MdUtils(file_name=md_fn,title=md_title) desc = md_title if 'description' in json_obj: desc = json_obj['description'] mdFile.new_paragraph(desc); if wire_obj: mdFile.new_paragraph('All wire objects have a set of basic attributes ```{object_id, action, type, persist, data}```. The ```data``` attribute defines the object-specific attributes'); mdFile.new_header(level=2, title=f'\n{md_title} Attributes', style='setext', add_table_of_contents='n') object_table(mdFile, md_title, json_obj) if not 'properties' in json_obj: mdFile.create_md_file() return if not 'data' in json_obj['properties']: mdFile.create_md_file() return mdFile.new_header(level=3, title=f'{md_title} Data Attributes', add_table_of_contents='n') if '$ref' in json_obj['properties']['data']: obj_name = json_obj['properties']['data']['$ref'][len('#/definitions/'):] object_table(mdFile, md_title, json_obj['definitions'][obj_name], json_obj['definitions']) else: object_table(mdFile, md_title, json_obj['properties']['data'], json_obj['definitions']) mdFile.create_md_file()
def asMarkdown(self) -> MarkdownDocument: """Return document as markdown.""" # TODO: example, needs to be dynamic mdFile = MdUtils(file_name="file1.md", title="Schema") mdFile.new_header(level=1, title=self.title) # document meta headings documentMeta = ["Information", "Value"] # document meta rows documentMeta.extend(["Schema Id", self.id]) documentMeta.extend(["Title", self.title]) mdFile.new_table(columns=2, rows=3, text=documentMeta) # TODO: generate code snippet sections like those in the gantree docs as of 2020/03/29 mdFile.new_paragraph('```jsonc\n{\n "example": "text"\n}\n```') props = self.schema["properties"] resolved = resolve_all(props, None) print("resolved:", resolved) # style is set 'atx' format by default. # list_of_strings = ["Name", "Value"] # for x in range(5): # list_of_strings.extend(["Schema ID", schema_id]) # mdFile.new_line() # mdFile.new_table( # columns=2, rows=6, text=list_of_strings, text_align="center" # ) filename = mdFile.file_name content = mdFile.file_data_text return {"filename": filename, "content": content}