aboutsummaryrefslogtreecommitdiff
path: root/wqflask
AgeCommit message (Collapse)Author
2022-03-16Add code generating the new genotype fileszsloan
Also made a large number of other fixes that proved necessary during testing
2022-03-16Generate JSON file for target genotypeszsloan
Also store parents/type metadata from source genofiles
2022-03-16Fix the way target/source genofiles were being processed + some other changeszsloan
- I was mixing up source/target genofiles previously; the JSON file is for the source genofiles - references to the app context are removed in favor of just taking input as arguments or environment variables - Updated example commands
2022-03-16Add function for mapping strain to sample pos + begin creating ↵zsloan
generate_new_genofiles function
2022-03-16Add function for getting strain name from sample namezsloan
2022-03-16Change EOL from CRLF to LFzsloan
2022-03-16Minor changes/bug fixeszsloan
- Removed some unused code - Strip marker genotype to avoid newline character at end - Convert zip to list for marker genotypes - Add typing to group_samples - Rename strain_genofile to source_genofile
2022-03-16Add in-progress gen_ind_genofiles.pyzsloan
gen_ind_genofiles.py is a command line script to generate genotype files for groups of individuals/samples, taking a source .geno or .json file and a target 'dummy' .geno file as input
2022-03-14instantiate plotly objectAlexander Kabui
2022-03-14add custom configs for scree plotAlexander Kabui
2022-03-14add scree plot dataAlexander Kabui
2022-03-14add scree plot layoutAlexander Kabui
2022-03-14add plotlyAlexander Kabui
2022-03-14init scree plot templateAlexander Kabui
2022-03-14Warn when someone uploads a csv file that has columns not in the dbBonfaceKilz
* wqflask/wqflask/metadata_edits.py: Import "extract_invalid_csv_headers" and "get_allowable_sampledata_headers". (display_phenotype_metadata): Pass the allowable headers to the template. (update_phenotype): If a user uploads data with a column header that's not in the db, don't upload the file, and send a warning message. * wqflask/wqflask/templates/edit_phenotype.html: List the allowable headers in the template.
2022-03-14Remove button for "Edit Privileges"BonfaceKilz
This is a WIP.
2022-03-14Reword link text for downloading csv sample dataBonfaceKilz
2022-03-12Use "database_connection" within a context-managerBonfaceKilz
Using "database_connection" within a context-manager makes sure that the SQL connection that is created is closed. * wqflask/wqflask/metadata_edits.py (display_probeset_metadata): Connect to the db within a context-manager. (update_phenotype): Ditto. (update_probeset): Ditto. (approve_data): Ditto.
2022-03-12Remove unused importsBonfaceKilz
2022-03-12Close a connection after it's useBonfaceKilz
* wqflask/wqflask/metadata_edits.py (approve_data): Explicitly close a connection after it is used.
2022-03-12Use updated `update_sample_data` from gn3BonfaceKilz
2022-03-12Use updated `delete_sample_data` from gn3BonfaceKilz
2022-03-12Use updated `insert_sample_data` from gn3BonfaceKilz
2022-03-12Fix broken f-stringsBonfaceKilz
* wqflask/wqflask/metadata_edits.py (approve_data): Update query strings.
2022-03-12Replace `db.traits` with `db.sample_data`BonfaceKilz
* wqflask/wqflask/metadata_edits.py: Replace imports that start with `db.traits` with `db.sample_data`.
2022-03-12display_diffs.html: Display the csv columns header in the diffs pageBonfaceKilz
2022-03-12metadata_edits.py: Use `csv_diff` and `remove_insignificant_edits`BonfaceKilz
* wqflask/wqflask/metadata_edits (update_phenotype): The logic was for generating csv_diff and removing insignificant values in the edits was moved to gn3; use those functions instead of the manual way.
2022-03-12metadata_edits.py: Use "create_dirs_if_not_exists" for creating dirsBonfaceKilz
2022-03-11Fix error with calling database_connection in gen_dropdown_menuzsloan
2022-03-11Add imports to database.py for 4a7e2c1602ed82aabd7d04953067ba49cb1cebffzsloan
2022-03-11Break dependence on `wqflask.utility.tools` to fix circular importsFrederick Muriuki Muriithi
Remove the `wqflask.utility.tools` and retrieve the `SQL_URI` setting directly from the environment or the settings file. This breaks the circular imports and makes the `wqflask.database` module standalone. Move the `parse_db_url` function to the `wqflask.database` module, where it is more sensible to be.
2022-03-10Use context manager with database connectionFrederick Muriuki Muriithi
Use the `with` context manager with database connections and cursors to ensure that they are closed once they are no longer needed. Where it was not feasible to use the `with` context manager without a huge refactor/rewrite, the cursors and connections are closed manually.
2022-03-10Use one-step process for the partial correlations computationspartial_corr_ui_reworkFrederick Muriuki Muriithi
This commit gets rid of the multi-step partial correlations process replacing it with a single-step process. Summary of changes: * wqflask/wqflask/collect.py: Add function to format the trait details in a format that is usable for the partial correlations system. * wqflask/wqflask/database.py: Provide function to create a connection to the database * wqflask/wqflask/partial_correlations_views.py: Rework the code to enable the one-step process for the partial correlations computations * wqflask/wqflask/static/new/javascript/partial_correlations.js: Get rid of code that supported the multi-step process * wqflask/wqflask/templates/collections/view.html: Remove inconsistent UI elements. Attach traits info in a form usable for the partial correlations * wqflask/wqflask/templates/partial_correlations.html: delete html template * wqflask/wqflask/templates/partial_correlations/pcorrs_error.html: provide a html template to display errors in the partial correlations computation process * wqflask/wqflask/templates/partial_correlations/pcorrs_poll_results.html: UI template to provide user with feedback as the computations continue in the background * wqflask/wqflask/templates/partial_correlations/pcorrs_results_presentation.html: UI template to present the results of successful computation * wqflask/wqflask/templates/partial_correlations/pcorrs_select_operations.html: UI template to trigger the partial correlations computations * wqflask/wqflask/templates/tool_buttons.html: Add the partial correlations button to the template to ensure a consistent look and feel
2022-03-07Fix/caching (#679)Alexander Kabui
* unlink file for JSONDecodeError * fix for avoiding caching empty dicts * fix for checking null dicts
2022-02-28Fix fulltext search for certain searcheszsloan
Hyphens in fulltext searches were causing problems, but a recent commit I made to fix the issue apparently had some side effects for other types of searches, in addition to make such searches someewhat slower Apparently the issue wasn't just the hyphens, but also the text to either side of the hyphen being lower than the minimum word length (which is either 2 or 3 for us, can't remember). To try and address this, I did a regular expression check for a pattern with text of <3 legnth to either side of a hyphen, and when that's the case I add quotes from the search term plus an asterisk, which seeems to be necessary to get it to not treat the hyphen as a delimiter and to correctly detect the search term
2022-02-28Add distinct to fix issue where GeneRIF search returns duplicateszsloan
2022-02-26Remove CSS from partial_correlations.csszsloan
This CSS is overwritten by CSS from trait_list.css and show_trait.css
2022-02-26Add container divzsloan
2022-02-26Add checkbox and index columnszsloan
2022-02-26Include DataTables imports and necessary CSSzsloan
2022-02-26Add JS initializing DataTableszsloan
2022-02-24Fix ProbeSet query for aliaseszsloan
ProbeSet queries previously weren't dealing with aliases correctly, because it was doing a MATCH/AGAINST against the ProbeSet.alias field, but that field usually contains a list of gene symbols separated by semi-colons (so it wouldn't detect the alias unless there was only a single alias. To fix this, I added some LIKE conditions, searching for the possible variations. This is a little awkward, because I needed to make sure to avoid a situation where, for example, an alias like 'LPD-1' matches a search for 'PD-1'. I don't think the way it currently works is efficient, but I don't know of any good alternative without changing the way we store aliases in the database.
2022-02-24Fix alias queryzsloan
2022-02-24Change parser.py to also detect hyphen in search termszsloan
2022-02-23Fix Heatmap GN3 URLzsloan
2022-02-23Improve Heatmap options' appearancezsloan
Moved the Heatmap display area above the table selection options (since it didn't make sense to have it below those) Added a button for clearing the Heatmap area and hiding the Heatmap options Added some margins to the Heatmap options
2022-02-23Show heatmap options when heatmap is runzsloan
Heatmap options are now shown after the user clicks the button I also reordered the Heatmap and Partial Correlation buttons, since it's awkward to get the Heatmap options to display well if its button is second. We'll probably completely rework this later, but for now this looks a little less ugly.
2022-02-23Reposition Partial Correlations and Heatmap buttonszsloan
Moved Partial Correlations and Generate Heatmap buttons to be lined up below the other buttons and hide the Heatmap orientation selection (JS will be added to show it after Heatmap is run)
2022-02-23Add top margin to Partial Correlations buttonzsloan
Later this button should just be included with the other function buttons. There's no need for it to be in a separate form, since it should be able to take the same trait list input as all the other collection page functions (with just the action url for the form changing)
2022-02-21Fix incorrect dataset trait data cachingzsloan
Trait data caching wasn't working correctly because it didn't account for the samplelist, causing caching to work incorrect in any situation where the target dataset's samplelist wasn't the same as that of the trait being correlated against. Trait data is stored as a dictionary where the keys are trait IDs and values are *lists* of sample values. This means that the caching needs to account for the exact same set of samples; otherwise you'll end up with samples being mismatched (since "the third sample with a value" for one dataset's trait might not be the same as "the third sample with a value" for another dataset's trait). To fix this, I added the samplelist to the functions that generate and fetch the hash file. This will require more cache files, though, so this should probably be reexamined later to make the code work with only a single cache file for each dataset.