From 79b45fb8196893e28f3ca79f925dc40d52f01209 Mon Sep 17 00:00:00 2001 From: "K2 (Note)" Date: Sat, 2 Dec 2023 17:02:40 +0100 Subject: [PATCH] Merge from Dev branch (#29) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update cache builder (#24) * Note/dev (#25) * create build_cache.sh * Update CD.yml (#26) * Ferdous dev (#28) * Update help.py * Update about.py with published paper link * Update util_help_tables.py with apple tests * Update util_footer_table.py with better bmws logo * Add files via upload * Delete Bundesministerium_für_Wirtschaft_und_Energie_Logo.svg.png * Update about.py * Update README.md * update page title * fix format and error * fix format == to is * Squashed 'pages/libs/mpxsonar/' changes from 6c083cd..91422cf 91422cf fix merge 673fcc9 change == to is 59f49b0 Patch mpoxsonar (#2) b403feb minor change in dbm 8892a93 Update MpoxSonar 0.5.3 Merge commit 'd20960430509ef4fc45455fdb206e7ef5c8030f5' into note/dev 58c001e fix matching function 668a8a9 qMerge commit '55314730f7bcd1e927c95bb9befc780fdb8ee3c6' into note/dev ef06eca update NCBI download 09b494e Merge commit '70b50bcac89349125d5f077daa004f97079ac953' into note/dev c5854d7 fix count issue bf0fd53 Patch V.0.3.5 (#7) a0572a0 fix delete function 7618df4 Update Dev branch (#5) 63ee752 Update patch 0.5.1 (#1) 541d76a update 0.5.1, fix bugs 4d9fd3b update 0.5.1 9f71aaf Merge branch 'note/dev' of https://github.com/rki-mf1/MpoxRadar into note/dev 7e9afad Merge commit 'f4e9902d0b5fb8806264882d42b61db87589d3de' as 'pages/libs/mpxsonar' 5568533 remove mpxsonar 245d27d update the site dbdb006 update mpoxsonar repo. 9c147cb update NT display 570b4ff fix bug 55cc0b4 Update README.md 72e976f Merge pull request #12 from ferbsx/add-license-1 8b5a311 Create LICENSE.md 6c98df9 The first version to the mpoxradar.net (#11) acb06dd The first version to the mpoxradar.net (#11) b99fb44 terminology correction 9f4c00e replaced file for the correct name f427576 correcting name c14d9aa Update about.py 18333e7 FAQ edit according to alice comment 751c5f7 edit terminology: mpox, MPoxRadar d015854 edit wrong links with anchor tag bc7a09c Merge pull request #10 from ferbsx/injun/dev 268e798 Bugremovung adbb052 Merge pull request #9 from ferbsx/injun/dev e1cab9c Merge remote-tracking branch 'origin/dev' into injun/dev 5c989dc Merge remote-tracking branch 'origin/dev' into injun/dev 3cbcf5b Merge pull request #8 from ferbsx/ivan/dev 473f845 Merge branch 'injun/dev' into ivan/dev a8b966f Merge branch 'injun/dev' into ivan/dev 3b32162 garbage cleaning 4cd7dd5 Update help.py 40d86d8 Update about.py abec293 MPXdatabase dump added 892b0d2 Update util_help_tables.py 2e2d17d Update util_tool_checklists.py f9159ca Update util_footer_table.py 08cbcd2 Update contact.py 518d27c 1. changed structure 2. !!!callbacks doent trigger ee77cd4 csv-file in case of no working database - for developemnt only 3594609 data.py connects to a mpox-database and gets a dictionary of dataframes 94225ad stylized names, texts and titles 076fc28 this is Ivan's tool, which is ahead Injun's (--> trying to make one branck/fork from these two, to then put in dev) 7a177bd merge change 829b200 merge change 80833ec map.py is now unncessary 7efebb8 jorge_tool.py is now unnecessary 59e213c pointing at where to replace the map-figures ca7d045 adding an example to run app.py with different env-paramenters - usefull when developing with accesss to local databases c43399a fixed zoom in non-jorge's map 5b9ab7b added jorge's code 36d5ff6 updated personal notesvim 599909c updated personal notes 3de147b commented out the whole file to not interfere with pages/tool.py and avoid Werkzeug-Exception 98d2171 location_coordinates.csv file from Ivan 99980ab Data.csv file from Ivan b36051c added import os in order to make pages/*.csv relative paths, note absolute paths 8fb0984 jorge's personal notes b9e4854 copy of jorge's tool.py to be merged with dev's tool.py 024927a copy of jorge's data.py for dev-branch e4bd4a0 rephrasing text. from jorge's branch to dev 364ecb3 general .env.template from ivan's to injun's 47d9421 added one of the two data-files from Ivan 80dd223 resize logo e6e9b02 Note/dev (#6) 9e2ec74 Note/dev (#6) 4757c44 new design (from Injun) 12c8197 Merge branch 'dev' of https://github.com/ferbsx/MPXRadar-frontend into dev aac9abb help page added 694caa8 edit Datasource Link cb54534 add page for table, edit for callback 1f79d23 data for geo 71e1e94 make footer&tool.checkout, edit some pages ee6e064 callbacks to the separate file dfed955 added map animation 9026b9f data f0a8727 Q&A on help.py, add photo, edit footer 9c4c7fa web page ceate and edit 0f50ada web page ceate and edit dd44c8b edit from evan/dev dbe41b2 edit from evan/dev 82a9053 map working instruments 96345f4 add style and map.py file 108070d playing with map 02da350 adding dbc components 3f5ef9d update mpxsonar 0.4.3, merge ec3196b update mpxsonar 0.4.3, merge 5de8641 update mpxsonar 0.4.3, merge 5bace10 update mpxsonar 0.4.3, merge 2744ff3 Squashed 'pages/libs/mpxsonar/' changes from 36581b5..0ffa7eb 8d95d44 note/dev (#5) 159896e Note/dev -Update MPXsonar 0.4.2 (#4) fd76d1d Note/dev -Update MPXsonar 0.4.2 (#4) a9c407b map manipulatios 85542e7 pages/home.py 6bea1dd cosmeic changes 3871a65 cosmetic changes 2c3c307 fixed internal address problems 41e3bd3 added an example map 922bcf6 some details fd9050e some details e210173 some details 08761c1 new design details 3d00552 Delete .gitkeep 95ba64a Add files via upload 9c303b6 Create .gitkeep 13801c7 Add files via upload b6fcb62 Merge commit 'f4be82d7efccd85009e4f538b5d52978ba74d4d2' as 'pages/libs/mpxsonar' f4be82d Squashed 'pages/libs/mpxsonar/' content from commit 36581b5 4ef7779 Merge commit 'f4be82d7efccd85009e4f538b5d52978ba74d4d2' as 'pages/libs/mpxsonar' 3943203 remove subtree bugs 5623f35 Update to latest Note/dev (#3) b5cca15 Update UI (#2) be05693 add pages contact, edit app&about pages, add assets folder for imgae files c82a67e making new repo for mpx ABOUT page f56f892 making new repo for mpx ABOUT page 7dfdd5f update MPXSonar 0.3.7 (#1) 9112085 update MPXSonar 0.3.7 (#1) 40a838f update config.yml and *.md db4ba15 setup *.md docs 6de6fe5 setup *.md docs 5a39726 Merge commit '555d93ff42af3d2468eb950ff0d2c8548b8b179e' 0.3.1 into note/dev 555d93f Squashed 'libs/mpxsonar/' changes from 50172ad..ae11fb4 7fc1420 add mpxsonar subtree b0eddcc Squashed 'libs/mpxsonar/' content from commit 50172ad 511b011 Merge commit 'b0eddcc84014b880deddc0839a64bc4435b8237e' as 'libs/mpxsonar' 3c15519 Initial commit git-subtree-dir: pages/libs/mpxsonar git-subtree-split: 91422cfde7b7bdddc4465ec50e52fddd46793a7c --------- Co-authored-by: K2 --------- Co-authored-by: Ferdous Nasri --- .github/workflows/CD.yml | 12 +- .github/workflows/tests.yml | 2 +- README.md | 2 +- app.py | 2 +- assets/BMWK_Logo_en.png | Bin 0 -> 26159 bytes ...\274r_Wirtschaft_und_Energie_Logo.svg.png" | Bin 62135 -> 0 bytes build_cache.sh | 5 + data.py | 16 ++- pages/about.py | 126 ++++++++++-------- pages/app_controller.py | 4 +- pages/libs/mpxsonar/src/mpxsonar/basics.py | 2 +- pages/tool.py | 4 +- pages/util_footer_table.py | 31 +---- pages/util_help_tables.py | 8 +- pyproject.toml | 2 +- 15 files changed, 123 insertions(+), 93 deletions(-) create mode 100644 assets/BMWK_Logo_en.png delete mode 100644 "assets/Bundesministerium_f\303\274r_Wirtschaft_und_Energie_Logo.svg.png" create mode 100644 build_cache.sh diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index a5efc6a..cf3a27f 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -22,7 +22,17 @@ jobs: cd /opt/MpoxRadar/ sudo git checkout dev sudo git pull - + - name: Create a new cache... + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USERNAME }} + key: ${{ secrets.SSH_KEY }} + passphrase: ${{ secrets.SSH_PASSPHRASE }} + port: 22 + script: | + cd /opt/MpoxRadar/ + bash build_cache.sh - name: Restart the application after deployment uses: appleboy/ssh-action@master with: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 825e1e4..2b194a9 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -62,4 +62,4 @@ jobs: - name: Install dependencies run: pip install flake8 poetry - name: Run flake8 - Code style check - run: poetry run flake8 . --config=.flake8 -v + run: poetry run flake8 pages/ --config=.flake8 -v diff --git a/README.md b/README.md index 9cec9f1..aaf399a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # MpoxRadar-frontend -MpoxRadar is a worldwide interactive dashboard for genomic surveillance of Mpox (Monkeypox virus). +MpoxRadar is a worldwide interactive dashboard for genomic surveillance of MPXV (MonkeyPox virus). S{^`4<0-O1Aj5N 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 literal 0 HcmV?d00001 diff --git "a/assets/Bundesministerium_f\303\274r_Wirtschaft_und_Energie_Logo.svg.png" "b/assets/Bundesministerium_f\303\274r_Wirtschaft_und_Energie_Logo.svg.png" deleted file mode 100644 index acc65a0562083e13e6cefa2335453a03ac359eaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62135 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 diff --git a/build_cache.sh b/build_cache.sh new file mode 100644 index 0000000..fa0e25d --- /dev/null +++ b/build_cache.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# eval "$(conda shell.bash hook)" +# conda activate mpxradar +source $CONDA_BASE/bin/activate mpxradar +python data.py diff --git a/data.py b/data.py index 147898e..1d05bf3 100644 --- a/data.py +++ b/data.py @@ -12,6 +12,9 @@ from sqlalchemy import create_engine from sqlalchemy import exc +from pages.app_controller import calculate_mutation_sig +from pages.app_controller import calculate_tri_mutation_sig +from pages.app_controller import create_snp_table from pages.config import CACHE_DIR from pages.config import DB_URL from pages.config import redis_manager @@ -206,6 +209,8 @@ def load_db_from_sql(self, table_name: str) -> (str, dict): :param table_name: name of the DB table to query :return: (path to csv, dtypes dict {column_name: dtype (from column_dtypes)}) """ + # cpu_number= mp.current_process().name.split("-")[-1] # Get the CPU number + # print(cpu_number) start = perf_counter() db_connection = get_database_connection(self.db_name) try: @@ -509,7 +514,7 @@ def load_all_sql_files( # noqa: C901 # check if df_dict is load or not? if redis_manager and redis_manager.exists("df_dict") and not test_db: # if True: - print("Load data from cache") + print("Load data from cache...") # df_dict = decompress_pickle(os.path.join(CACHE_DIR,"df_dict.pbz2")) # df_dict = pickle.loads(redis_manager.get("df_dict")) processed_df_dict = load_Cpickle(os.path.join(path_to_cache, "df_dict.pickle")) @@ -588,3 +593,12 @@ def load_all_sql_files( # noqa: C901 # df_dict["referenceView"].to_pickle(".cache/referenceView.pkl") return processed_df_dict + + +if __name__ == "__main__": + print("Build a new cache") + load_all_sql_files() + create_snp_table() + calculate_tri_mutation_sig() + calculate_mutation_sig() + print("--- Complete ----") diff --git a/pages/about.py b/pages/about.py index 2296d3d..380c0a8 100644 --- a/pages/about.py +++ b/pages/about.py @@ -27,7 +27,7 @@ dbc.Col( [ """ - MonkeyPox (Mpox) is an infectious disease caused by a smallpox virus, recently spreading in multiple countries with over 86,000 cases and declared a global emergency by the World Health Organization """, + MonkeyPox (Mpox) is an infectious disease caused by a smallpox virus, recently spreading in multiple countries with over 88,000 cases and declared a global emergency by the World Health Organization """, dcc.Link( html.A("[1]"), href="https://worldhealthorg.shinyapps.io/mpx_global/", @@ -40,14 +40,14 @@ target="_blank", ), """. This alarming behavior demands action and highlights the need for genomic surveillance and spatio-temporal analyses. - Therefore, the Robert Koch Institute (RKI) together with the Hasso Platter Institute (HPI), joined forces to produce such a dashboard with a strong database background, inspired by their earlier work + Therefore, the Robert Koch Institute (RKI) together with the Hasso Platter Institute (HPI) joined forces to produce such a dashboard with a strong database background, inspired by the earlier work in our group on """, dcc.Link( html.A("CovSonar"), href="https://github.com/rki-mf1/covsonar", target="_blank", ), - """ - a database framework developed at the RKI for SARS-CoV-2. below is a graphical abstract of our work.""", + """ - a database framework developed at the RKI for SARS-CoV-2. Below is a graphical abstract of our work.""", ] ), ), @@ -104,9 +104,11 @@ [ dbc.Row( dbc.Col( - """With this web server, we provide tools to explore and comapre metadata from Mpox sequences available from our data sources (listed below). - Furthermore, we provide an advanced tool for more detailed searches. The chosen data using our tools is visualised and presented in downloadable tables. - As Mpox does not have one defined reference genome, we provide multiple reference genomes to choose between. All sample genomes are pre-processed, aligned to multiple reference genomes, followed by variant calling on our servers to enable quick analysis and searches for our users. We confirm that this website is free and open to all users and there is no login requirement. Below is a simplified overview of our tool: + """With this web server, we provide tools to explore and compare metadata from MPXV sequences available from our data source (listed below). + Furthermore, we provide an advanced tool to enable more detailed queries. The chosen data using our tools is visualised and presented in downloadable tables. + As Mpox does not have one defined reference genome, we provide multiple reference genomes to choose between. All sample genomes are pre-processed, + aligned to multiple reference genomes, followed by variant calling on our servers to enable quick analysis and searches for our users. + We confirm that this website is free and open to all users and there is no login requirement. Below is a simplified technical overview of our tool: """, ), ), @@ -157,7 +159,8 @@ dbc.Col( [ """ - For more information on the tool, we re-direct you to our paper (below under "How to cite?"), and to our GitHub README pages (below under "Link to code"). + For more information on the tool, we re-direct you to our peer-reviewed and published paper (see "How to cite?"), and to our GitHub + README pages (see "Link to code"). We have described the functionalities of our tools in detail in the """, dcc.Link( html.A("help page"), @@ -183,41 +186,57 @@ html.H2(children="Who are we?"), html.Div( [ + dbc.Row( + dbc.Col( + [ + """In this project, we collaborated between three groups: + the Data Analytics & Computational Statistics, Hasso Plattner Institute, University of Potsdam, Germany, and + Bioinformatics and Systems Biology, Robert Koch Institute, Berlin, Germany, + and Centre for Biological Threats and Special Pathogens, Robert Koch Institute, Berlin, Germany. + """, + dcc.Link( + html.A("Feel free to reach out to us!"), + href=("Contact"), + target="_blank", + ), + ] + ), + ), dbc.Row( [ dbc.Col( dbc.Card( [ dbc.CardImg( - src="assets/Prof.Dr.BR.jpeg", + src="assets/FN.jpeg", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P( - "Prof. Dr. Bernhard Renard" - ), + html.P("Ferdous Nasri"), ] ), ], - className="mb-2", style=card_style, + className="mb-2", ), ), dbc.Col( dbc.Card( [ dbc.CardImg( - src="assets/Dr.SF.png", + src="assets/K2.jpg", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P("Dr. Stephan Fuchs"), + html.P( + "Kunaphas Kongkitimanon" + ), ] ), ], @@ -229,20 +248,15 @@ dbc.Card( [ dbc.CardImg( - src="assets/Dr.AJS.jpeg", + src="assets/AW.jpeg", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P( - "Dr. Anna-Juliane Schmachtenberg", - style={ - "font-size": "0.82em" - }, - ), - ], + html.P("Alice Wittig"), + ] ), ], className="mb-2", @@ -253,14 +267,14 @@ dbc.Card( [ dbc.CardImg( - src="assets/AW.jpeg", + src="assets/JSC.png", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P("Alice Wittig"), + html.P("Jorge Sánchez Cortés"), ] ), ], @@ -277,35 +291,33 @@ dbc.Card( [ dbc.CardImg( - src="assets/FN.jpeg", + src="assets/IP.jpeg", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P("Ferdous Nasri"), + html.P("Injun Park"), ] ), ], - style=card_style, className="mb-2", + style=card_style, ), ), dbc.Col( dbc.Card( [ dbc.CardImg( - src="assets/K2.jpg", + src="assets/IT.png", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P( - "Kunaphas Kongkitimanon" - ), + html.P("Ivan Tunov"), ] ), ], @@ -317,14 +329,14 @@ dbc.Card( [ dbc.CardImg( - src="assets/JSC.png", + src="assets/PK.png", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P("Jorge Sánchez Cortés"), + html.P("Pavlo Konoplev"), ] ), ], @@ -336,14 +348,14 @@ dbc.Card( [ dbc.CardImg( - src="assets/IP.jpeg", + src="assets/image_placeholder.jpg", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P("Injun Park"), + html.P("Annika Brinkmann"), ] ), ], @@ -360,14 +372,14 @@ dbc.Card( [ dbc.CardImg( - src="assets/IT.png", + src="assets/image_placeholder.jpg", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P("Ivan Tunov"), + html.P("Andreas Nitsche"), ] ), ], @@ -379,15 +391,20 @@ dbc.Card( [ dbc.CardImg( - src="assets/PK.png", + src="assets/Dr.AJS.jpeg", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P("Pavlo Konoplev"), - ] + html.P( + "Dr. Anna-Juliane Schmachtenberg", + style={ + "font-size": "0.82em" + }, + ), + ], ), ], className="mb-2", @@ -398,14 +415,16 @@ dbc.Card( [ dbc.CardImg( - src="assets/image_placeholder.jpg", + src="assets/Prof.Dr.BR.jpeg", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P("Annika Brinkmann"), + html.P( + "Prof. Dr. Bernhard Y. Renard" + ), ] ), ], @@ -417,14 +436,14 @@ dbc.Card( [ dbc.CardImg( - src="assets/image_placeholder.jpg", + src="assets/Dr.SF.png", top=True, style=img_style, className="align-self-center mt-2", ), dbc.CardBody( [ - html.P("Andreas Nitsche"), + html.P("Dr. Stephan Fuchs"), ] ), ], @@ -488,16 +507,15 @@ html.Div( [ """ - MpoxRadar: a worldwide Mpox genomic surveillance dashboard - Ferdous Nasri, Alice Wittig, Kunaphas Kongkitimanon, Jorge Sánchez Cortés, Annika Brinkmann, Andreas Nitsche, Anna-Juliane Schmachtenberg, Bernhard Y. Renard, Stephan Fuchs - bioRxiv 2023.02.03.526935;(""", + Our work has been published and peer-reviewed in the Nucleic Acids Research (web server issue) in 2023. To cite us, please use the following paper: + 'Ferdous Nasri and others, MpoxRadar: a worldwide MPXV genomic surveillance dashboard, Nucleic Acids Research, Volume 51, Issue W1, + 5 July 2023, Pages W331–W337, """, dcc.Link( - html.A( - "doi: https://doi.org/10.1101/2023.02.03.526935 " - ), - href="https://www.biorxiv.org/content/10.1101/2023.02.03.526935v1", + html.A("https://doi.org/10.1093/nar/gkad325"), + href="https://doi.org/10.1093/nar/gkad325", target="_blank", ), + "'.", ] ), html.Br(), @@ -505,7 +523,8 @@ html.Div( [ """ - We want to give a big thanks to all our test users, especially in the central German Public Health institute, for giving us their valuable feedback and helping us better our tool. Furthermore, we want to thank the creators of """, + We want to give a big thanks to all our test users, especially in the central German Public Health institute, for giving us their valuable feedback + and helping us better our tool. Furthermore, we want to thank the creators of """, dcc.Link( html.A("CovRadar"), href=("https://doi.org/10.1093/bioinformatics/btac411"), @@ -517,7 +536,8 @@ href=("https://github.com/rki-mf1/covsonar"), target="_blank", ), - """ for showing the need for genomic surveillance dashboard and database for SARS-CoV-2, therefore inspiring the initiation of this project. We are always open to feedback and promise a continued support and developement of our tool. """, + """ for showing the need for genomic surveillance dashboard and database for SARS-CoV-2, therefore inspiring the initiation of this project. + We are always open to feedback and promise a continued support and developement of our tool. """, dcc.Link( html.A("Don't hesitate to get in touch."), href=("Contact"), diff --git a/pages/app_controller.py b/pages/app_controller.py index 5162112..745e3ba 100644 --- a/pages/app_controller.py +++ b/pages/app_controller.py @@ -230,7 +230,7 @@ def get_value_by_reference(checked_ref): for ref in checked_ref: print("Query " + ref) _df = sonarBasicsChild.match(DB_URL, reference=ref) - if type(_df) == str: + if type(_df) is str: continue output_df = pd.concat([output_df, _df], ignore_index=True) return output_df @@ -266,7 +266,7 @@ def get_value_by_filter(checked_ref, mut_checklist, seqtech_checklist): _df = sonarBasicsChild.match( DB_URL, profiles=mut_profiles, reference=ref, propdict=propdict ) - if type(_df) == str: + if type(_df) is str: continue output_df = pd.concat([output_df, _df], ignore_index=True) return output_df diff --git a/pages/libs/mpxsonar/src/mpxsonar/basics.py b/pages/libs/mpxsonar/src/mpxsonar/basics.py index a1cfff2..28890e7 100644 --- a/pages/libs/mpxsonar/src/mpxsonar/basics.py +++ b/pages/libs/mpxsonar/src/mpxsonar/basics.py @@ -826,7 +826,7 @@ def exportVCF(cursor, reference, outfile=None, na="*** no match ***"): # noqa: def set_key(dictionary, key, value): if key not in dictionary: dictionary[key] = value - elif type(dictionary[key]) == list: + elif type(dictionary[key]) is list: dictionary[key].append(value) else: dictionary[key] = [dictionary[key], value] diff --git a/pages/tool.py b/pages/tool.py index 7e0499a..bd18829 100644 --- a/pages/tool.py +++ b/pages/tool.py @@ -609,9 +609,9 @@ def update_output_sonar(n_clicks, commands): # noqa: C901 toggle_value = {"display": "block"} elif args.tool == "match": _tmp_output = match_controller(args) - if type(_tmp_output) == int: + if type(_tmp_output) is int: output = _tmp_output - elif type(_tmp_output) == str: + elif type(_tmp_output) is str: output = _tmp_output else: df = _tmp_output diff --git a/pages/util_footer_table.py b/pages/util_footer_table.py index 1701e99..4867b72 100644 --- a/pages/util_footer_table.py +++ b/pages/util_footer_table.py @@ -44,32 +44,13 @@ className="responsive", ), html.Td( - html.Ul( - [ - html.Li([html.Div(children="Supported by:")]), - html.Li( - [ - html.Img( - src=r"assets/Bundesministerium_für_Wirtschaft_und_Energie_Logo.svg.png", - alt="Img_RKI", - style={ - "marginTop": "-10px", - "height": "auto", - "minWidth": "100%", - }, - className="responsive", - ) - ], - ), - html.Li( - [html.Div(children="on the basis of a decision")], - style={"marginTop": "-20px"}, - ), - html.Li([html.Div(children="by the German Bundestag")]), - ], - style={"listStyleType": "none", "textAlign": "center"}, + html.Img( + src=r"assets/BMWK_Logo_en.png", + alt="BMWK_logo", + style={"height": "auto", "minWidth": "100%", "marginTop": "10px"}, + className="responsive", ), - style={"width": "15%"}, + style={"textAlign": "left", "width": "15%"}, className="responsive", ), html.Td( diff --git a/pages/util_help_tables.py b/pages/util_help_tables.py index 1bb4b90..ccabb87 100644 --- a/pages/util_help_tables.py +++ b/pages/util_help_tables.py @@ -32,11 +32,11 @@ row2 = html.Tr( [ html.Td("MacOS"), - html.Td("HighSierra"), - html.Td("Not tested"), - html.Td("Not tested"), + html.Td("Monterey 12.1"), + html.Td("115.0.5790.114"), + html.Td("115.0.3"), html.Td("n/a"), - html.Td("Not tested"), + html.Td("Version 15.2 (17612.3.6.1.6)"), ] ) row3 = html.Tr( diff --git a/pyproject.toml b/pyproject.toml index 9cb8f7b..190169e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "mpxradar-frontend" -version = "0.4.0" +version = "0.4.2" description = "MonkeyPoxRadar" authors = ["Kunaphas.Kong "]