How to use names method in pandera

Best Python code snippet using pandera_python

cc_toolchain_config.bzl

Source:cc_toolchain_config.bzl Github

copy

Full Screen

1# Copyright 2019 The Bazel Authors. All rights reserved.2#3# Licensed under the Apache License, Version 2.0 (the "License");4# you may not use this file except in compliance with the License.5# You may obtain a copy of the License at6#7# http://www.apache.org/licenses/LICENSE-2.08#9# Unless required by applicable law or agreed to in writing, software10# distributed under the License is distributed on an "AS IS" BASIS,11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.12# See the License for the specific language governing permissions and13# limitations under the License.14"""A Starlark cc_toolchain configuration rule"""15load(16 "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",17 "action_config",18 "artifact_name_pattern",19 "env_entry",20 "env_set",21 "feature",22 "feature_set",23 "flag_group",24 "flag_set",25 "tool",26 "tool_path",27 "variable_with_value",28 "with_feature_set",29)30load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")31all_compile_actions = [32 ACTION_NAMES.c_compile,33 ACTION_NAMES.cpp_compile,34 ACTION_NAMES.linkstamp_compile,35 ACTION_NAMES.assemble,36 ACTION_NAMES.preprocess_assemble,37 ACTION_NAMES.cpp_header_parsing,38 ACTION_NAMES.cpp_module_compile,39 ACTION_NAMES.cpp_module_codegen,40 ACTION_NAMES.clif_match,41 ACTION_NAMES.lto_backend,42]43all_cpp_compile_actions = [44 ACTION_NAMES.cpp_compile,45 ACTION_NAMES.linkstamp_compile,46 ACTION_NAMES.cpp_header_parsing,47 ACTION_NAMES.cpp_module_compile,48 ACTION_NAMES.cpp_module_codegen,49 ACTION_NAMES.clif_match,50]51preprocessor_compile_actions = [52 ACTION_NAMES.c_compile,53 ACTION_NAMES.cpp_compile,54 ACTION_NAMES.linkstamp_compile,55 ACTION_NAMES.preprocess_assemble,56 ACTION_NAMES.cpp_header_parsing,57 ACTION_NAMES.cpp_module_compile,58 ACTION_NAMES.clif_match,59]60codegen_compile_actions = [61 ACTION_NAMES.c_compile,62 ACTION_NAMES.cpp_compile,63 ACTION_NAMES.linkstamp_compile,64 ACTION_NAMES.assemble,65 ACTION_NAMES.preprocess_assemble,66 ACTION_NAMES.cpp_module_codegen,67 ACTION_NAMES.lto_backend,68]69all_link_actions = [70 ACTION_NAMES.cpp_link_executable,71 ACTION_NAMES.cpp_link_dynamic_library,72 ACTION_NAMES.cpp_link_nodeps_dynamic_library,73]74def _windows_msvc_impl(ctx):75 toolchain_identifier = "msvc_x64"76 host_system_name = "local"77 target_system_name = "local"78 target_cpu = "x64_windows"79 target_libc = "msvcrt"80 compiler = "msvc-cl"81 abi_version = "local"82 abi_libc_version = "local"83 cc_target_os = None84 builtin_sysroot = None85 cxx_builtin_include_directories = [86 "/usr/local/include",87 "/usr/local/lib/clang/7.0.0/include",88 "/usr/include/x86_64-linux-gnu",89 "/usr/include",90 "/usr/include/c++/4.9",91 "/usr/include/x86_64-linux-gnu/c++/4.9",92 "/usr/include/c++/4.9/backward",93 ]94 cpp_link_nodeps_dynamic_library_action = action_config(95 action_name = ACTION_NAMES.cpp_link_nodeps_dynamic_library,96 implies = [97 "nologo",98 "shared_flag",99 "linkstamps",100 "output_execpath_flags",101 "input_param_flags",102 "user_link_flags",103 "default_link_flags",104 "linker_subsystem_flag",105 "linker_param_file",106 "msvc_env",107 "no_stripping",108 "has_configured_linker_path",109 "def_file",110 ],111 tools = [tool(path = "")],112 )113 cpp_link_static_library_action = action_config(114 action_name = ACTION_NAMES.cpp_link_static_library,115 implies = [116 "nologo",117 "archiver_flags",118 "input_param_flags",119 "linker_param_file",120 "msvc_env",121 ],122 tools = [tool(path = "")],123 )124 assemble_action = action_config(125 action_name = ACTION_NAMES.assemble,126 implies = [127 "compiler_input_flags",128 "compiler_output_flags",129 "nologo",130 "msvc_env",131 "sysroot",132 ],133 tools = [tool(path = "")],134 )135 preprocess_assemble_action = action_config(136 action_name = ACTION_NAMES.preprocess_assemble,137 implies = [138 "compiler_input_flags",139 "compiler_output_flags",140 "nologo",141 "msvc_env",142 "sysroot",143 ],144 tools = [tool(path = "")],145 )146 c_compile_action = action_config(147 action_name = ACTION_NAMES.c_compile,148 implies = [149 "compiler_input_flags",150 "compiler_output_flags",151 "default_compile_flags",152 "nologo",153 "msvc_env",154 "parse_showincludes",155 "user_compile_flags",156 "sysroot",157 "unfiltered_compile_flags",158 ],159 tools = [tool(path = "")],160 )161 cpp_compile_action = action_config(162 action_name = ACTION_NAMES.cpp_compile,163 implies = [164 "compiler_input_flags",165 "compiler_output_flags",166 "default_compile_flags",167 "nologo",168 "msvc_env",169 "parse_showincludes",170 "user_compile_flags",171 "sysroot",172 "unfiltered_compile_flags",173 ],174 tools = [tool(path = "")],175 )176 cpp_link_executable_action = action_config(177 action_name = ACTION_NAMES.cpp_link_executable,178 implies = [179 "nologo",180 "linkstamps",181 "output_execpath_flags",182 "input_param_flags",183 "user_link_flags",184 "default_link_flags",185 "linker_subsystem_flag",186 "linker_param_file",187 "msvc_env",188 "no_stripping",189 ],190 tools = [tool(path = "")],191 )192 cpp_link_dynamic_library_action = action_config(193 action_name = ACTION_NAMES.cpp_link_dynamic_library,194 implies = [195 "nologo",196 "shared_flag",197 "linkstamps",198 "output_execpath_flags",199 "input_param_flags",200 "user_link_flags",201 "default_link_flags",202 "linker_subsystem_flag",203 "linker_param_file",204 "msvc_env",205 "no_stripping",206 "has_configured_linker_path",207 "def_file",208 ],209 tools = [tool(path = "")],210 )211 action_configs = [212 assemble_action,213 preprocess_assemble_action,214 c_compile_action,215 cpp_compile_action,216 cpp_link_executable_action,217 cpp_link_dynamic_library_action,218 cpp_link_nodeps_dynamic_library_action,219 cpp_link_static_library_action,220 ]221 msvc_link_env_feature = feature(222 name = "msvc_link_env",223 env_sets = [224 env_set(225 actions = all_link_actions +226 [ACTION_NAMES.cpp_link_static_library],227 env_entries = [env_entry(key = "LIB", value = "")],228 ),229 ],230 )231 shared_flag_feature = feature(232 name = "shared_flag",233 flag_sets = [234 flag_set(235 actions = [236 ACTION_NAMES.cpp_link_dynamic_library,237 ACTION_NAMES.cpp_link_nodeps_dynamic_library,238 ],239 flag_groups = [flag_group(flags = ["/DLL"])],240 ),241 ],242 )243 determinism_feature = feature(244 name = "determinism",245 enabled = True,246 flag_sets = [247 flag_set(248 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],249 flag_groups = [250 flag_group(251 flags = [252 "/wd4117",253 "-D__DATE__=\"redacted\"",254 "-D__TIMESTAMP__=\"redacted\"",255 "-D__TIME__=\"redacted\"",256 ],257 ),258 ],259 ),260 ],261 )262 sysroot_feature = feature(263 name = "sysroot",264 flag_sets = [265 flag_set(266 actions = [267 ACTION_NAMES.assemble,268 ACTION_NAMES.preprocess_assemble,269 ACTION_NAMES.c_compile,270 ACTION_NAMES.cpp_compile,271 ACTION_NAMES.cpp_header_parsing,272 ACTION_NAMES.cpp_module_compile,273 ACTION_NAMES.cpp_module_codegen,274 ACTION_NAMES.cpp_link_executable,275 ACTION_NAMES.cpp_link_dynamic_library,276 ACTION_NAMES.cpp_link_nodeps_dynamic_library,277 ],278 flag_groups = [279 flag_group(280 flags = ["--sysroot=%{sysroot}"],281 iterate_over = "sysroot",282 expand_if_available = "sysroot",283 ),284 ],285 ),286 ],287 )288 unfiltered_compile_flags_feature = feature(289 name = "unfiltered_compile_flags",290 flag_sets = [291 flag_set(292 actions = [293 ACTION_NAMES.preprocess_assemble,294 ACTION_NAMES.c_compile,295 ACTION_NAMES.cpp_compile,296 ACTION_NAMES.cpp_header_parsing,297 ACTION_NAMES.cpp_module_compile,298 ACTION_NAMES.cpp_module_codegen,299 ],300 flag_groups = [301 flag_group(302 flags = ["%{unfiltered_compile_flags}"],303 iterate_over = "unfiltered_compile_flags",304 expand_if_available = "unfiltered_compile_flags",305 ),306 ],307 ),308 ],309 )310 copy_dynamic_libraries_to_binary_feature = feature(name = "copy_dynamic_libraries_to_binary")311 input_param_flags_feature = feature(312 name = "input_param_flags",313 flag_sets = [314 flag_set(315 actions = [316 ACTION_NAMES.cpp_link_dynamic_library,317 ACTION_NAMES.cpp_link_nodeps_dynamic_library,318 ],319 flag_groups = [320 flag_group(321 flags = ["/IMPLIB:%{interface_library_output_path}"],322 expand_if_available = "interface_library_output_path",323 ),324 ],325 ),326 flag_set(327 actions = all_link_actions,328 flag_groups = [329 flag_group(330 flags = ["%{libopts}"],331 iterate_over = "libopts",332 expand_if_available = "libopts",333 ),334 ],335 ),336 flag_set(337 actions = all_link_actions +338 [ACTION_NAMES.cpp_link_static_library],339 flag_groups = [340 flag_group(341 iterate_over = "libraries_to_link",342 flag_groups = [343 flag_group(344 iterate_over = "libraries_to_link.object_files",345 flag_groups = [flag_group(flags = ["%{libraries_to_link.object_files}"])],346 expand_if_equal = variable_with_value(347 name = "libraries_to_link.type",348 value = "object_file_group",349 ),350 ),351 flag_group(352 flag_groups = [flag_group(flags = ["%{libraries_to_link.name}"])],353 expand_if_equal = variable_with_value(354 name = "libraries_to_link.type",355 value = "object_file",356 ),357 ),358 flag_group(359 flag_groups = [flag_group(flags = ["%{libraries_to_link.name}"])],360 expand_if_equal = variable_with_value(361 name = "libraries_to_link.type",362 value = "interface_library",363 ),364 ),365 flag_group(366 flag_groups = [367 flag_group(368 flags = ["%{libraries_to_link.name}"],369 expand_if_false = "libraries_to_link.is_whole_archive",370 ),371 flag_group(372 flags = ["/WHOLEARCHIVE:%{libraries_to_link.name}"],373 expand_if_true = "libraries_to_link.is_whole_archive",374 ),375 ],376 expand_if_equal = variable_with_value(377 name = "libraries_to_link.type",378 value = "static_library",379 ),380 ),381 ],382 expand_if_available = "libraries_to_link",383 ),384 ],385 ),386 ],387 )388 fastbuild_feature = feature(389 name = "fastbuild",390 flag_sets = [391 flag_set(392 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],393 flag_groups = [flag_group(flags = ["/Od", "/Z7"])],394 ),395 flag_set(396 actions = all_link_actions,397 flag_groups = [398 flag_group(399 flags = ["", "/INCREMENTAL:NO"],400 ),401 ],402 ),403 ],404 implies = ["generate_pdb_file"],405 )406 user_compile_flags_feature = feature(407 name = "user_compile_flags",408 flag_sets = [409 flag_set(410 actions = [411 ACTION_NAMES.preprocess_assemble,412 ACTION_NAMES.c_compile,413 ACTION_NAMES.cpp_compile,414 ACTION_NAMES.cpp_header_parsing,415 ACTION_NAMES.cpp_module_compile,416 ACTION_NAMES.cpp_module_codegen,417 ],418 flag_groups = [419 flag_group(420 flags = ["%{user_compile_flags}"],421 iterate_over = "user_compile_flags",422 expand_if_available = "user_compile_flags",423 ),424 ],425 ),426 ],427 )428 archiver_flags_feature = feature(429 name = "archiver_flags",430 flag_sets = [431 flag_set(432 actions = [ACTION_NAMES.cpp_link_static_library],433 flag_groups = [434 flag_group(435 flags = ["/OUT:%{output_execpath}"],436 expand_if_available = "output_execpath",437 ),438 ],439 ),440 ],441 )442 default_link_flags_feature = feature(443 name = "default_link_flags",444 enabled = True,445 flag_sets = [446 flag_set(447 actions = all_link_actions,448 flag_groups = [flag_group(flags = ["/MACHINE:X64"])],449 ),450 ],451 )452 static_link_msvcrt_feature = feature(name = "static_link_msvcrt")453 dynamic_link_msvcrt_debug_feature = feature(454 name = "dynamic_link_msvcrt_debug",455 flag_sets = [456 flag_set(457 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],458 flag_groups = [flag_group(flags = ["/MDd"])],459 ),460 flag_set(461 actions = all_link_actions,462 flag_groups = [flag_group(flags = ["/DEFAULTLIB:msvcrtd.lib"])],463 ),464 ],465 requires = [feature_set(features = ["dbg"])],466 )467 dbg_feature = feature(468 name = "dbg",469 flag_sets = [470 flag_set(471 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],472 flag_groups = [flag_group(flags = ["/Od", "/Z7"])],473 ),474 flag_set(475 actions = all_link_actions,476 flag_groups = [477 flag_group(478 flags = ["", "/INCREMENTAL:NO"],479 ),480 ],481 ),482 ],483 implies = ["generate_pdb_file"],484 )485 opt_feature = feature(486 name = "opt",487 flag_sets = [488 flag_set(489 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],490 flag_groups = [flag_group(flags = ["/O2"])],491 ),492 ],493 implies = ["frame_pointer"],494 )495 supports_interface_shared_libraries_feature = feature(496 name = "supports_interface_shared_libraries",497 enabled = True,498 )499 user_link_flags_feature = feature(500 name = "user_link_flags",501 flag_sets = [502 flag_set(503 actions = all_link_actions,504 flag_groups = [505 flag_group(506 flags = ["%{user_link_flags}"],507 iterate_over = "user_link_flags",508 expand_if_available = "user_link_flags",509 ),510 ],511 ),512 ],513 )514 default_compile_flags_feature = feature(515 name = "default_compile_flags",516 enabled = True,517 flag_sets = [518 flag_set(519 actions = [520 ACTION_NAMES.assemble,521 ACTION_NAMES.preprocess_assemble,522 ACTION_NAMES.linkstamp_compile,523 ACTION_NAMES.c_compile,524 ACTION_NAMES.cpp_compile,525 ACTION_NAMES.cpp_header_parsing,526 ACTION_NAMES.cpp_module_compile,527 ACTION_NAMES.cpp_module_codegen,528 ACTION_NAMES.lto_backend,529 ACTION_NAMES.clif_match,530 ],531 flag_groups = [532 flag_group(533 flags = [534 "/DCOMPILER_MSVC",535 "/DNOMINMAX",536 "/D_WIN32_WINNT=0x0601",537 "/D_CRT_SECURE_NO_DEPRECATE",538 "/D_CRT_SECURE_NO_WARNINGS",539 "/bigobj",540 "/Zm500",541 "/EHsc",542 "/wd4351",543 "/wd4291",544 "/wd4250",545 "/wd4996",546 ],547 ),548 ],549 ),550 ],551 )552 msvc_compile_env_feature = feature(553 name = "msvc_compile_env",554 env_sets = [555 env_set(556 actions = [557 ACTION_NAMES.c_compile,558 ACTION_NAMES.cpp_compile,559 ACTION_NAMES.cpp_module_compile,560 ACTION_NAMES.cpp_module_codegen,561 ACTION_NAMES.cpp_header_parsing,562 ACTION_NAMES.assemble,563 ACTION_NAMES.preprocess_assemble,564 ],565 env_entries = [env_entry(key = "INCLUDE", value = "")],566 ),567 ],568 )569 preprocessor_defines_feature = feature(570 name = "preprocessor_defines",571 enabled = True,572 flag_sets = [573 flag_set(574 actions = [575 ACTION_NAMES.assemble,576 ACTION_NAMES.preprocess_assemble,577 ACTION_NAMES.c_compile,578 ACTION_NAMES.cpp_compile,579 ACTION_NAMES.cpp_header_parsing,580 ACTION_NAMES.cpp_module_compile,581 ],582 flag_groups = [583 flag_group(584 flags = ["/D%{preprocessor_defines}"],585 iterate_over = "preprocessor_defines",586 ),587 ],588 ),589 ],590 )591 generate_pdb_file_feature = feature(592 name = "generate_pdb_file",593 requires = [594 feature_set(features = ["dbg"]),595 feature_set(features = ["fastbuild"]),596 ],597 )598 output_execpath_flags_feature = feature(599 name = "output_execpath_flags",600 flag_sets = [601 flag_set(602 actions = all_link_actions,603 flag_groups = [604 flag_group(605 flags = ["/OUT:%{output_execpath}"],606 expand_if_available = "output_execpath",607 ),608 ],609 ),610 ],611 )612 dynamic_link_msvcrt_no_debug_feature = feature(613 name = "dynamic_link_msvcrt_no_debug",614 flag_sets = [615 flag_set(616 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],617 flag_groups = [flag_group(flags = ["/MD"])],618 ),619 flag_set(620 actions = all_link_actions,621 flag_groups = [flag_group(flags = ["/DEFAULTLIB:msvcrt.lib"])],622 ),623 ],624 requires = [625 feature_set(features = ["fastbuild"]),626 feature_set(features = ["opt"]),627 ],628 )629 disable_assertions_feature = feature(630 name = "disable_assertions",631 enabled = True,632 flag_sets = [633 flag_set(634 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],635 flag_groups = [flag_group(flags = ["/DNDEBUG"])],636 with_features = [with_feature_set(features = ["opt"])],637 ),638 ],639 )640 has_configured_linker_path_feature = feature(name = "has_configured_linker_path")641 supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)642 no_stripping_feature = feature(name = "no_stripping")643 linker_param_file_feature = feature(644 name = "linker_param_file",645 flag_sets = [646 flag_set(647 actions = all_link_actions +648 [ACTION_NAMES.cpp_link_static_library],649 flag_groups = [650 flag_group(651 flags = ["@%{linker_param_file}"],652 expand_if_available = "linker_param_file",653 ),654 ],655 ),656 ],657 )658 ignore_noisy_warnings_feature = feature(659 name = "ignore_noisy_warnings",660 enabled = True,661 flag_sets = [662 flag_set(663 actions = [ACTION_NAMES.cpp_link_static_library],664 flag_groups = [flag_group(flags = ["/ignore:4221"])],665 ),666 ],667 )668 no_legacy_features_feature = feature(name = "no_legacy_features")669 parse_showincludes_feature = feature(670 name = "parse_showincludes",671 flag_sets = [672 flag_set(673 actions = [674 ACTION_NAMES.preprocess_assemble,675 ACTION_NAMES.c_compile,676 ACTION_NAMES.cpp_compile,677 ACTION_NAMES.cpp_module_compile,678 ACTION_NAMES.cpp_header_parsing,679 ],680 flag_groups = [flag_group(flags = ["/showIncludes"])],681 ),682 ],683 )684 static_link_msvcrt_no_debug_feature = feature(685 name = "static_link_msvcrt_no_debug",686 flag_sets = [687 flag_set(688 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],689 flag_groups = [flag_group(flags = ["/MT"])],690 ),691 flag_set(692 actions = all_link_actions,693 flag_groups = [flag_group(flags = ["/DEFAULTLIB:libcmt.lib"])],694 ),695 ],696 requires = [697 feature_set(features = ["fastbuild"]),698 feature_set(features = ["opt"]),699 ],700 )701 treat_warnings_as_errors_feature = feature(702 name = "treat_warnings_as_errors",703 flag_sets = [704 flag_set(705 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],706 flag_groups = [flag_group(flags = ["/WX"])],707 ),708 ],709 )710 windows_export_all_symbols_feature = feature(name = "windows_export_all_symbols")711 no_windows_export_all_symbols_feature = feature(name = "no_windows_export_all_symbols")712 include_paths_feature = feature(713 name = "include_paths",714 enabled = True,715 flag_sets = [716 flag_set(717 actions = [718 ACTION_NAMES.assemble,719 ACTION_NAMES.preprocess_assemble,720 ACTION_NAMES.c_compile,721 ACTION_NAMES.cpp_compile,722 ACTION_NAMES.cpp_header_parsing,723 ACTION_NAMES.cpp_module_compile,724 ],725 flag_groups = [726 flag_group(727 flags = ["/I%{quote_include_paths}"],728 iterate_over = "quote_include_paths",729 ),730 flag_group(731 flags = ["/I%{include_paths}"],732 iterate_over = "include_paths",733 ),734 flag_group(735 flags = ["/I%{system_include_paths}"],736 iterate_over = "system_include_paths",737 ),738 ],739 ),740 ],741 )742 linkstamps_feature = feature(743 name = "linkstamps",744 flag_sets = [745 flag_set(746 actions = all_link_actions,747 flag_groups = [748 flag_group(749 flags = ["%{linkstamp_paths}"],750 iterate_over = "linkstamp_paths",751 expand_if_available = "linkstamp_paths",752 ),753 ],754 ),755 ],756 )757 targets_windows_feature = feature(758 name = "targets_windows",759 enabled = True,760 implies = ["copy_dynamic_libraries_to_binary"],761 )762 linker_subsystem_flag_feature = feature(763 name = "linker_subsystem_flag",764 flag_sets = [765 flag_set(766 actions = all_link_actions,767 flag_groups = [flag_group(flags = ["/SUBSYSTEM:CONSOLE"])],768 ),769 ],770 )771 static_link_msvcrt_debug_feature = feature(772 name = "static_link_msvcrt_debug",773 flag_sets = [774 flag_set(775 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],776 flag_groups = [flag_group(flags = ["/MTd"])],777 ),778 flag_set(779 actions = all_link_actions,780 flag_groups = [flag_group(flags = ["/DEFAULTLIB:libcmtd.lib"])],781 ),782 ],783 requires = [feature_set(features = ["dbg"])],784 )785 frame_pointer_feature = feature(786 name = "frame_pointer",787 flag_sets = [788 flag_set(789 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],790 flag_groups = [flag_group(flags = ["/Oy-"])],791 ),792 ],793 )794 compiler_output_flags_feature = feature(795 name = "compiler_output_flags",796 flag_sets = [797 flag_set(798 actions = [ACTION_NAMES.assemble],799 flag_groups = [800 flag_group(801 flag_groups = [802 flag_group(803 flags = ["/Fo%{output_file}", "/Zi"],804 expand_if_available = "output_file",805 expand_if_not_available = "output_assembly_file",806 ),807 ],808 expand_if_not_available = "output_preprocess_file",809 ),810 ],811 ),812 flag_set(813 actions = [814 ACTION_NAMES.preprocess_assemble,815 ACTION_NAMES.c_compile,816 ACTION_NAMES.cpp_compile,817 ACTION_NAMES.cpp_header_parsing,818 ACTION_NAMES.cpp_module_compile,819 ACTION_NAMES.cpp_module_codegen,820 ],821 flag_groups = [822 flag_group(823 flag_groups = [824 flag_group(825 flags = ["/Fo%{output_file}"],826 expand_if_not_available = "output_preprocess_file",827 ),828 ],829 expand_if_available = "output_file",830 expand_if_not_available = "output_assembly_file",831 ),832 flag_group(833 flag_groups = [834 flag_group(835 flags = ["/Fa%{output_file}"],836 expand_if_available = "output_assembly_file",837 ),838 ],839 expand_if_available = "output_file",840 ),841 flag_group(842 flag_groups = [843 flag_group(844 flags = ["/P", "/Fi%{output_file}"],845 expand_if_available = "output_preprocess_file",846 ),847 ],848 expand_if_available = "output_file",849 ),850 ],851 ),852 ],853 )854 nologo_feature = feature(855 name = "nologo",856 flag_sets = [857 flag_set(858 actions = [859 ACTION_NAMES.c_compile,860 ACTION_NAMES.cpp_compile,861 ACTION_NAMES.cpp_module_compile,862 ACTION_NAMES.cpp_module_codegen,863 ACTION_NAMES.cpp_header_parsing,864 ACTION_NAMES.assemble,865 ACTION_NAMES.preprocess_assemble,866 ACTION_NAMES.cpp_link_executable,867 ACTION_NAMES.cpp_link_dynamic_library,868 ACTION_NAMES.cpp_link_nodeps_dynamic_library,869 ACTION_NAMES.cpp_link_static_library,870 ],871 flag_groups = [flag_group(flags = ["/nologo"])],872 ),873 ],874 )875 smaller_binary_feature = feature(876 name = "smaller_binary",877 enabled = True,878 flag_sets = [879 flag_set(880 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],881 flag_groups = [flag_group(flags = ["/Gy", "/Gw"])],882 with_features = [with_feature_set(features = ["opt"])],883 ),884 flag_set(885 actions = all_link_actions,886 flag_groups = [flag_group(flags = ["/OPT:ICF", "/OPT:REF"])],887 with_features = [with_feature_set(features = ["opt"])],888 ),889 ],890 )891 compiler_input_flags_feature = feature(892 name = "compiler_input_flags",893 flag_sets = [894 flag_set(895 actions = [896 ACTION_NAMES.assemble,897 ACTION_NAMES.preprocess_assemble,898 ACTION_NAMES.c_compile,899 ACTION_NAMES.cpp_compile,900 ACTION_NAMES.cpp_header_parsing,901 ACTION_NAMES.cpp_module_compile,902 ACTION_NAMES.cpp_module_codegen,903 ],904 flag_groups = [905 flag_group(906 flags = ["/c", "%{source_file}"],907 expand_if_available = "source_file",908 ),909 ],910 ),911 ],912 )913 def_file_feature = feature(914 name = "def_file",915 flag_sets = [916 flag_set(917 actions = all_link_actions,918 flag_groups = [919 flag_group(920 flags = ["/DEF:%{def_file_path}", "/ignore:4070"],921 expand_if_available = "def_file_path",922 ),923 ],924 ),925 ],926 )927 msvc_env_feature = feature(928 name = "msvc_env",929 env_sets = [930 env_set(931 actions = [932 ACTION_NAMES.c_compile,933 ACTION_NAMES.cpp_compile,934 ACTION_NAMES.cpp_module_compile,935 ACTION_NAMES.cpp_module_codegen,936 ACTION_NAMES.cpp_header_parsing,937 ACTION_NAMES.assemble,938 ACTION_NAMES.preprocess_assemble,939 ACTION_NAMES.cpp_link_executable,940 ACTION_NAMES.cpp_link_dynamic_library,941 ACTION_NAMES.cpp_link_nodeps_dynamic_library,942 ACTION_NAMES.cpp_link_static_library,943 ],944 env_entries = [945 env_entry(key = "PATH", value = ""),946 env_entry(key = "TMP", value = ""),947 env_entry(key = "TEMP", value = ""),948 ],949 ),950 ],951 implies = ["msvc_compile_env", "msvc_link_env"],952 )953 features = [954 no_legacy_features_feature,955 nologo_feature,956 has_configured_linker_path_feature,957 no_stripping_feature,958 targets_windows_feature,959 copy_dynamic_libraries_to_binary_feature,960 default_compile_flags_feature,961 msvc_env_feature,962 msvc_compile_env_feature,963 msvc_link_env_feature,964 include_paths_feature,965 preprocessor_defines_feature,966 parse_showincludes_feature,967 generate_pdb_file_feature,968 shared_flag_feature,969 linkstamps_feature,970 output_execpath_flags_feature,971 archiver_flags_feature,972 input_param_flags_feature,973 linker_subsystem_flag_feature,974 user_link_flags_feature,975 default_link_flags_feature,976 linker_param_file_feature,977 static_link_msvcrt_feature,978 static_link_msvcrt_no_debug_feature,979 dynamic_link_msvcrt_no_debug_feature,980 static_link_msvcrt_debug_feature,981 dynamic_link_msvcrt_debug_feature,982 dbg_feature,983 fastbuild_feature,984 opt_feature,985 frame_pointer_feature,986 disable_assertions_feature,987 determinism_feature,988 treat_warnings_as_errors_feature,989 smaller_binary_feature,990 ignore_noisy_warnings_feature,991 user_compile_flags_feature,992 sysroot_feature,993 unfiltered_compile_flags_feature,994 compiler_output_flags_feature,995 compiler_input_flags_feature,996 def_file_feature,997 windows_export_all_symbols_feature,998 no_windows_export_all_symbols_feature,999 supports_dynamic_linker_feature,1000 supports_interface_shared_libraries_feature,1001 ]1002 artifact_name_patterns = [1003 artifact_name_pattern(1004 category_name = "object_file",1005 prefix = "",1006 extension = ".obj",1007 ),1008 artifact_name_pattern(1009 category_name = "static_library",1010 prefix = "",1011 extension = ".lib",1012 ),1013 artifact_name_pattern(1014 category_name = "alwayslink_static_library",1015 prefix = "",1016 extension = ".lo.lib",1017 ),1018 artifact_name_pattern(1019 category_name = "executable",1020 prefix = "",1021 extension = ".exe",1022 ),1023 artifact_name_pattern(1024 category_name = "dynamic_library",1025 prefix = "",1026 extension = ".dll",1027 ),1028 artifact_name_pattern(1029 category_name = "interface_library",1030 prefix = "",1031 extension = ".if.lib",1032 ),1033 ]1034 make_variables = []1035 tool_paths = [1036 tool_path(name = "ar", path = ""),1037 tool_path(name = "ml", path = ""),1038 tool_path(name = "cpp", path = ""),1039 tool_path(name = "gcc", path = ""),1040 tool_path(name = "gcov", path = "wrapper/bin/msvc_nop.bat"),1041 tool_path(name = "ld", path = ""),1042 tool_path(name = "nm", path = "wrapper/bin/msvc_nop.bat"),1043 tool_path(1044 name = "objcopy",1045 path = "wrapper/bin/msvc_nop.bat",1046 ),1047 tool_path(1048 name = "objdump",1049 path = "wrapper/bin/msvc_nop.bat",1050 ),1051 tool_path(1052 name = "strip",1053 path = "wrapper/bin/msvc_nop.bat",1054 ),1055 ]1056 return cc_common.create_cc_toolchain_config_info(1057 ctx = ctx,1058 features = features,1059 action_configs = action_configs,1060 artifact_name_patterns = artifact_name_patterns,1061 cxx_builtin_include_directories = cxx_builtin_include_directories,1062 toolchain_identifier = toolchain_identifier,1063 host_system_name = host_system_name,1064 target_system_name = target_system_name,1065 target_cpu = target_cpu,1066 target_libc = target_libc,1067 compiler = compiler,1068 abi_version = abi_version,1069 abi_libc_version = abi_libc_version,1070 tool_paths = tool_paths,1071 make_variables = make_variables,1072 builtin_sysroot = builtin_sysroot,1073 cc_target_os = None,1074 )1075def _windows_msys_mingw_impl(ctx):1076 toolchain_identifier = "msys_x64_mingw"1077 host_system_name = "local"1078 target_system_name = "local"1079 target_cpu = "x64_windows"1080 target_libc = "mingw"1081 compiler = "mingw-gcc"1082 abi_version = "local"1083 abi_libc_version = "local"1084 cc_target_os = None1085 builtin_sysroot = None1086 action_configs = []1087 targets_windows_feature = feature(1088 name = "targets_windows",1089 implies = ["copy_dynamic_libraries_to_binary"],1090 enabled = True,1091 )1092 copy_dynamic_libraries_to_binary_feature = feature(name = "copy_dynamic_libraries_to_binary")1093 gcc_env_feature = feature(1094 name = "gcc_env",1095 enabled = True,1096 env_sets = [1097 env_set(1098 actions = [1099 ACTION_NAMES.c_compile,1100 ACTION_NAMES.cpp_compile,1101 ACTION_NAMES.cpp_module_compile,1102 ACTION_NAMES.cpp_module_codegen,1103 ACTION_NAMES.cpp_header_parsing,1104 ACTION_NAMES.assemble,1105 ACTION_NAMES.preprocess_assemble,1106 ACTION_NAMES.cpp_link_executable,1107 ACTION_NAMES.cpp_link_dynamic_library,1108 ACTION_NAMES.cpp_link_nodeps_dynamic_library,1109 ACTION_NAMES.cpp_link_static_library,1110 ],1111 env_entries = [1112 env_entry(key = "PATH", value = "NOT_USED"),1113 ],1114 ),1115 ],1116 )1117 msys_mingw_flags = [1118 ]1119 msys_mingw_link_flags = [1120 ]1121 default_compile_flags_feature = feature(1122 name = "default_compile_flags",1123 enabled = True,1124 flag_sets = [1125 flag_set(1126 actions = [1127 ACTION_NAMES.assemble,1128 ACTION_NAMES.preprocess_assemble,1129 ACTION_NAMES.linkstamp_compile,1130 ACTION_NAMES.c_compile,1131 ACTION_NAMES.cpp_compile,1132 ACTION_NAMES.cpp_header_parsing,1133 ACTION_NAMES.cpp_module_compile,1134 ACTION_NAMES.cpp_module_codegen,1135 ACTION_NAMES.lto_backend,1136 ACTION_NAMES.clif_match,1137 ],1138 ),1139 flag_set(1140 actions = [1141 ACTION_NAMES.linkstamp_compile,1142 ACTION_NAMES.cpp_compile,1143 ACTION_NAMES.cpp_header_parsing,1144 ACTION_NAMES.cpp_module_compile,1145 ACTION_NAMES.cpp_module_codegen,1146 ACTION_NAMES.lto_backend,1147 ACTION_NAMES.clif_match,1148 ],1149 flag_groups = ([flag_group(flags = msys_mingw_flags)] if msys_mingw_flags else []),1150 ),1151 ],1152 )1153 default_link_flags_feature = feature(1154 name = "default_link_flags",1155 enabled = True,1156 flag_sets = [1157 flag_set(1158 actions = all_link_actions,1159 flag_groups = ([flag_group(flags = msys_mingw_link_flags)] if msys_mingw_link_flags else []),1160 ),1161 ],1162 )1163 supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)1164 features = [1165 targets_windows_feature,1166 copy_dynamic_libraries_to_binary_feature,1167 gcc_env_feature,1168 default_compile_flags_feature,1169 default_link_flags_feature,1170 supports_dynamic_linker_feature,1171 ]1172 cxx_builtin_include_directories = [1173 ]1174 artifact_name_patterns = [1175 artifact_name_pattern(1176 category_name = "executable",1177 prefix = "",1178 extension = ".exe",1179 ),1180 ]1181 make_variables = []1182 tool_paths = [1183 ]1184 return cc_common.create_cc_toolchain_config_info(1185 ctx = ctx,1186 features = features,1187 action_configs = action_configs,1188 artifact_name_patterns = artifact_name_patterns,1189 cxx_builtin_include_directories = cxx_builtin_include_directories,1190 toolchain_identifier = toolchain_identifier,1191 host_system_name = host_system_name,1192 target_system_name = target_system_name,1193 target_cpu = target_cpu,1194 target_libc = target_libc,1195 compiler = compiler,1196 abi_version = abi_version,1197 abi_libc_version = abi_libc_version,1198 tool_paths = tool_paths,1199 make_variables = make_variables,1200 builtin_sysroot = builtin_sysroot,1201 cc_target_os = cc_target_os,1202 )1203def _armeabi_impl(ctx):1204 toolchain_identifier = "stub_armeabi-v7a"1205 host_system_name = "armeabi-v7a"1206 target_system_name = "armeabi-v7a"1207 target_cpu = "armeabi-v7a"1208 target_libc = "armeabi-v7a"1209 compiler = "compiler"1210 abi_version = "armeabi-v7a"1211 abi_libc_version = "armeabi-v7a"1212 cc_target_os = None1213 builtin_sysroot = None1214 action_configs = []1215 supports_pic_feature = feature(name = "supports_pic", enabled = True)1216 supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)1217 features = [supports_dynamic_linker_feature, supports_pic_feature]1218 cxx_builtin_include_directories = []1219 artifact_name_patterns = []1220 make_variables = []1221 tool_paths = [1222 tool_path(name = "ar", path = "/bin/false"),1223 tool_path(name = "compat-ld", path = "/bin/false"),1224 tool_path(name = "cpp", path = "/bin/false"),1225 tool_path(name = "dwp", path = "/bin/false"),1226 tool_path(name = "gcc", path = "/bin/false"),1227 tool_path(name = "gcov", path = "/bin/false"),1228 tool_path(name = "ld", path = "/bin/false"),1229 tool_path(name = "nm", path = "/bin/false"),1230 tool_path(name = "objcopy", path = "/bin/false"),1231 tool_path(name = "objdump", path = "/bin/false"),1232 tool_path(name = "strip", path = "/bin/false"),1233 ]1234 return cc_common.create_cc_toolchain_config_info(1235 ctx = ctx,1236 features = features,1237 action_configs = action_configs,1238 artifact_name_patterns = artifact_name_patterns,1239 cxx_builtin_include_directories = cxx_builtin_include_directories,1240 toolchain_identifier = toolchain_identifier,1241 host_system_name = host_system_name,1242 target_system_name = target_system_name,1243 target_cpu = target_cpu,1244 target_libc = target_libc,1245 compiler = compiler,1246 abi_version = abi_version,1247 abi_libc_version = abi_libc_version,1248 tool_paths = tool_paths,1249 make_variables = make_variables,1250 builtin_sysroot = builtin_sysroot,1251 cc_target_os = cc_target_os,1252 )1253def _impl(ctx):1254 if ctx.attr.cpu == "armeabi-v7a":1255 return _armeabi_impl(ctx)1256 elif ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "msvc-cl":1257 return _windows_msvc_impl(ctx)1258 elif ctx.attr.cpu == "x64_windows" and ctx.attr.compiler == "mingw-gcc":1259 return _windows_msys_mingw_impl(ctx)1260 tool_paths = [1261 tool_path(name = "ar", path = "/usr/bin/ar"),1262 tool_path(name = "ld", path = "/usr/bin/ld"),1263 tool_path(name = "cpp", path = "/usr/bin/cpp"),1264 tool_path(name = "gcc", path = "/usr/local/bin/clang"),1265 tool_path(name = "dwp", path = "/usr/bin/dwp"),1266 tool_path(name = "gcov", path = "None"),1267 tool_path(name = "nm", path = "/usr/bin/nm"),1268 tool_path(name = "objcopy", path = "/usr/bin/objcopy"),1269 tool_path(name = "objdump", path = "/usr/bin/objdump"),1270 tool_path(name = "strip", path = "/usr/bin/strip"),1271 ]1272 cxx_builtin_include_directories = [1273 "/usr/local/include",1274 "/usr/local/lib/clang/7.0.0/include",1275 "/usr/include/x86_64-linux-gnu",1276 "/usr/include",1277 "/usr/include/c++/4.9",1278 "/usr/include/x86_64-linux-gnu/c++/4.9",1279 "/usr/include/c++/4.9/backward",1280 ]1281 action_configs = []1282 compile_flags = [1283 "-U_FORTIFY_SOURCE",1284 "-fstack-protector",1285 "-Wall",1286 "-Wthread-safety",1287 "-Wself-assign",1288 "-fcolor-diagnostics",1289 "-fno-omit-frame-pointer",1290 ]1291 dbg_compile_flags = [1292 "-g",1293 ]1294 opt_compile_flags = [1295 "-g0",1296 "-O2",1297 "-D_FORTIFY_SOURCE=1",1298 "-DNDEBUG",1299 "-ffunction-sections",1300 "-fdata-sections",1301 ]1302 cxx_flags = [1303 "-std=c++0x",1304 ]1305 link_flags = [1306 "-fuse-ld=gold",1307 "-Wl,-no-as-needed",1308 "-Wl,-z,relro,-z,now",1309 "-B/usr/local/bin",1310 "-lstdc++",1311 "-lm",1312 ]1313 opt_link_flags = [1314 "-Wl,--gc-sections",1315 ]1316 unfiltered_compile_flags = [1317 "-no-canonical-prefixes",1318 "-Wno-builtin-macro-redefined",1319 "-D__DATE__=\"redacted\"",1320 "-D__TIMESTAMP__=\"redacted\"",1321 "-D__TIME__=\"redacted\"",1322 ]1323 targets_windows_feature = feature(1324 name = "targets_windows",1325 implies = ["copy_dynamic_libraries_to_binary"],1326 enabled = True,1327 )1328 copy_dynamic_libraries_to_binary_feature = feature(name = "copy_dynamic_libraries_to_binary")1329 gcc_env_feature = feature(1330 name = "gcc_env",1331 enabled = True,1332 env_sets = [1333 env_set(1334 actions = [1335 ACTION_NAMES.c_compile,1336 ACTION_NAMES.cpp_compile,1337 ACTION_NAMES.cpp_module_compile,1338 ACTION_NAMES.cpp_module_codegen,1339 ACTION_NAMES.cpp_header_parsing,1340 ACTION_NAMES.assemble,1341 ACTION_NAMES.preprocess_assemble,1342 ACTION_NAMES.cpp_link_executable,1343 ACTION_NAMES.cpp_link_dynamic_library,1344 ACTION_NAMES.cpp_link_nodeps_dynamic_library,1345 ACTION_NAMES.cpp_link_static_library,1346 ],1347 env_entries = [1348 env_entry(key = "PATH", value = "NOT_USED"),1349 ],1350 ),1351 ],1352 )1353 windows_features = [1354 targets_windows_feature,1355 copy_dynamic_libraries_to_binary_feature,1356 gcc_env_feature,1357 ]1358 coverage_feature = feature(1359 name = "coverage",1360 provides = ["profile"],1361 flag_sets = [1362 flag_set(1363 actions = [1364 ACTION_NAMES.preprocess_assemble,1365 ACTION_NAMES.c_compile,1366 ACTION_NAMES.cpp_compile,1367 ACTION_NAMES.cpp_header_parsing,1368 ACTION_NAMES.cpp_module_compile,1369 ],1370 flag_groups = [1371 flag_group(flags = ["--coverage"]),1372 ],1373 ),1374 flag_set(1375 actions = [1376 ACTION_NAMES.cpp_link_dynamic_library,1377 ACTION_NAMES.cpp_link_nodeps_dynamic_library,1378 ACTION_NAMES.cpp_link_executable,1379 ],1380 flag_groups = [1381 flag_group(flags = ["--coverage"]),1382 ],1383 ),1384 ],1385 )1386 supports_pic_feature = feature(1387 name = "supports_pic",1388 enabled = True,1389 )1390 supports_start_end_lib_feature = feature(1391 name = "supports_start_end_lib",1392 enabled = True,1393 )1394 default_compile_flags_feature = feature(1395 name = "default_compile_flags",1396 enabled = True,1397 flag_sets = [1398 flag_set(1399 actions = [1400 ACTION_NAMES.assemble,1401 ACTION_NAMES.preprocess_assemble,1402 ACTION_NAMES.linkstamp_compile,1403 ACTION_NAMES.c_compile,1404 ACTION_NAMES.cpp_compile,1405 ACTION_NAMES.cpp_header_parsing,1406 ACTION_NAMES.cpp_module_compile,1407 ACTION_NAMES.cpp_module_codegen,1408 ACTION_NAMES.lto_backend,1409 ACTION_NAMES.clif_match,1410 ],1411 flag_groups = ([flag_group(flags = compile_flags)] if compile_flags else []),1412 ),1413 flag_set(1414 actions = [1415 ACTION_NAMES.assemble,1416 ACTION_NAMES.preprocess_assemble,1417 ACTION_NAMES.linkstamp_compile,1418 ACTION_NAMES.c_compile,1419 ACTION_NAMES.cpp_compile,1420 ACTION_NAMES.cpp_header_parsing,1421 ACTION_NAMES.cpp_module_compile,1422 ACTION_NAMES.cpp_module_codegen,1423 ACTION_NAMES.lto_backend,1424 ACTION_NAMES.clif_match,1425 ],1426 flag_groups = ([flag_group(flags = dbg_compile_flags)] if dbg_compile_flags else []),1427 with_features = [with_feature_set(features = ["dbg"])],1428 ),1429 flag_set(1430 actions = [1431 ACTION_NAMES.assemble,1432 ACTION_NAMES.preprocess_assemble,1433 ACTION_NAMES.linkstamp_compile,1434 ACTION_NAMES.c_compile,1435 ACTION_NAMES.cpp_compile,1436 ACTION_NAMES.cpp_header_parsing,1437 ACTION_NAMES.cpp_module_compile,1438 ACTION_NAMES.cpp_module_codegen,1439 ACTION_NAMES.lto_backend,1440 ACTION_NAMES.clif_match,1441 ],1442 flag_groups = ([flag_group(flags = opt_compile_flags)] if opt_compile_flags else []),1443 with_features = [with_feature_set(features = ["opt"])],1444 ),1445 flag_set(1446 actions = [1447 ACTION_NAMES.linkstamp_compile,1448 ACTION_NAMES.cpp_compile,1449 ACTION_NAMES.cpp_header_parsing,1450 ACTION_NAMES.cpp_module_compile,1451 ACTION_NAMES.cpp_module_codegen,1452 ACTION_NAMES.lto_backend,1453 ACTION_NAMES.clif_match,1454 ],1455 flag_groups = ([flag_group(flags = cxx_flags)] if cxx_flags else []),1456 ),1457 ],1458 )1459 default_link_flags_feature = feature(1460 name = "default_link_flags",1461 enabled = True,1462 flag_sets = [1463 flag_set(1464 actions = all_link_actions,1465 flag_groups = ([flag_group(flags = link_flags)] if link_flags else []),1466 ),1467 flag_set(1468 actions = all_link_actions,1469 flag_groups = ([flag_group(flags = opt_link_flags)] if opt_link_flags else []),1470 with_features = [with_feature_set(features = ["opt"])],1471 ),1472 ],1473 )1474 dbg_feature = feature(name = "dbg")1475 opt_feature = feature(name = "opt")1476 sysroot_feature = feature(1477 name = "sysroot",1478 enabled = True,1479 flag_sets = [1480 flag_set(1481 actions = [1482 ACTION_NAMES.preprocess_assemble,1483 ACTION_NAMES.linkstamp_compile,1484 ACTION_NAMES.c_compile,1485 ACTION_NAMES.cpp_compile,1486 ACTION_NAMES.cpp_header_parsing,1487 ACTION_NAMES.cpp_module_compile,1488 ACTION_NAMES.cpp_module_codegen,1489 ACTION_NAMES.lto_backend,1490 ACTION_NAMES.clif_match,1491 ACTION_NAMES.cpp_link_executable,1492 ACTION_NAMES.cpp_link_dynamic_library,1493 ACTION_NAMES.cpp_link_nodeps_dynamic_library,1494 ],1495 flag_groups = [1496 flag_group(1497 flags = ["--sysroot=%{sysroot}"],1498 expand_if_available = "sysroot",1499 ),1500 ],1501 ),1502 ],1503 )1504 fdo_optimize_feature = feature(1505 name = "fdo_optimize",1506 flag_sets = [1507 flag_set(1508 actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],1509 flag_groups = [1510 flag_group(1511 flags = [1512 "-fprofile-use=%{fdo_profile_path}",1513 "-fprofile-correction",1514 ],1515 expand_if_available = "fdo_profile_path",1516 ),1517 ],1518 ),1519 ],1520 provides = ["profile"],1521 )1522 supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)1523 user_compile_flags_feature = feature(1524 name = "user_compile_flags",1525 enabled = True,1526 flag_sets = [1527 flag_set(1528 actions = [1529 ACTION_NAMES.assemble,1530 ACTION_NAMES.preprocess_assemble,1531 ACTION_NAMES.linkstamp_compile,1532 ACTION_NAMES.c_compile,1533 ACTION_NAMES.cpp_compile,1534 ACTION_NAMES.cpp_header_parsing,1535 ACTION_NAMES.cpp_module_compile,1536 ACTION_NAMES.cpp_module_codegen,1537 ACTION_NAMES.lto_backend,1538 ACTION_NAMES.clif_match,1539 ],1540 flag_groups = [1541 flag_group(1542 flags = ["%{user_compile_flags}"],1543 iterate_over = "user_compile_flags",1544 expand_if_available = "user_compile_flags",1545 ),1546 ],1547 ),1548 ],1549 )1550 unfiltered_compile_flags_feature = feature(1551 name = "unfiltered_compile_flags",1552 enabled = True,1553 flag_sets = [1554 flag_set(1555 actions = [1556 ACTION_NAMES.assemble,1557 ACTION_NAMES.preprocess_assemble,1558 ACTION_NAMES.linkstamp_compile,1559 ACTION_NAMES.c_compile,1560 ACTION_NAMES.cpp_compile,1561 ACTION_NAMES.cpp_header_parsing,1562 ACTION_NAMES.cpp_module_compile,1563 ACTION_NAMES.cpp_module_codegen,1564 ACTION_NAMES.lto_backend,1565 ACTION_NAMES.clif_match,1566 ],1567 flag_groups = ([flag_group(flags = unfiltered_compile_flags)] if unfiltered_compile_flags else []),1568 ),1569 ],1570 )1571 features = [1572 supports_pic_feature,1573 supports_start_end_lib_feature,1574 coverage_feature,1575 default_compile_flags_feature,1576 default_link_flags_feature,1577 fdo_optimize_feature,1578 supports_dynamic_linker_feature,1579 dbg_feature,1580 opt_feature,1581 user_compile_flags_feature,1582 sysroot_feature,1583 unfiltered_compile_flags_feature,1584 ]1585 artifact_name_patterns = [1586 ]1587 make_variables = []1588 return cc_common.create_cc_toolchain_config_info(1589 ctx = ctx,1590 features = features,1591 action_configs = action_configs,1592 artifact_name_patterns = artifact_name_patterns,1593 cxx_builtin_include_directories = cxx_builtin_include_directories,1594 toolchain_identifier = "linux_gnu_x86",1595 host_system_name = "i686-unknown-linux-gnu",1596 target_system_name = "x86_64-unknown-linux-gnu",1597 target_cpu = "k8",1598 target_libc = "glibc_2.19",1599 compiler = "clang",1600 abi_version = "gcc",1601 abi_libc_version = "glibc_2.19",1602 tool_paths = tool_paths,1603 make_variables = make_variables,1604 builtin_sysroot = "",1605 cc_target_os = None,1606 )1607cc_toolchain_config = rule(1608 implementation = _impl,1609 attrs = {1610 "cpu": attr.string(mandatory = True),1611 "compiler": attr.string(),1612 },1613 provides = [CcToolchainConfigInfo],...

Full Screen

Full Screen

save_plan_step_data.py

Source:save_plan_step_data.py Github

copy

Full Screen

1# Copyright (C) 2013 Ion Torrent Systems, Inc. All Rights Reserved2from django.utils.translation import ugettext as _3from django.core.urlresolvers import reverse4from iondb.rundb.plan.page_plan.kits_step_data import KitsFieldNames5from iondb.rundb.plan.page_plan.abstract_step_data import AbstractStepData6from iondb.rundb.models import (7 dnaBarcode,8 SampleAnnotation_CV,9 KitInfo,10 QCType,11 PlannedExperiment,12 Sample,13)14from iondb.rundb.labels import (15 Sample as _Sample,16 ModelsQcTypeToLabelsQcTypeAsDict,17 ModelsQcTypeToLabelsQcType,18)19from iondb.utils import validation20from iondb.rundb.plan.page_plan.step_helper_types import StepHelperType21from iondb.rundb.plan.page_plan.step_names import StepNames22from iondb.rundb.plan.page_plan.application_step_data import ApplicationFieldNames23from iondb.rundb.plan.page_plan.reference_step_data import ReferenceFieldNames24from iondb.rundb.plan.page_plan.ionreporter_step_data import IonReporterFieldNames25from iondb.rundb.plan.plan_validator import (26 validate_plan_name,27 validate_notes,28 validate_sample_name,29 validate_sample_tube_label,30 validate_barcode_sample_association,31 validate_QC,32 validate_targetRegionBedFile_for_runType,33 validate_chipBarcode,34)35from iondb.utils.utils import convert36from collections import OrderedDict37# from iondb.utils import toBoolean38import json39import logging40logger = logging.getLogger(__name__)41MAX_LENGTH_SAMPLE_DESCRIPTION = 102442MAX_LENGTH_SAMPLE_NAME = 12743class SavePlanFieldNames:44 UPLOADERS = "uploaders"45 SET_ID = "setid"46 SETID_SUFFIX = "setid_suffix"47 EXTERNAL_ID = "externalId"48 WORKFLOW = "Workflow"49 GENDER = "Gender"50 POPULATION = "Population"51 MOUSE_STRAINS = "mouseStrains"52 CANCER_TYPE = "cancerType"53 CELLULARITY_PCT = "cellularityPct"54 BIOPSY_DAYS = "biopsyDays"55 CELL_NUM = "cellNum"56 COUPLE_ID = "coupleID"57 EMBRYO_ID = "embryoID"58 BACTERIAL_MARKER_TYPE = "BacterialMarkerType"59 WITNESS = "Witness"60 NUCLEOTIDE_TYPE = "NucleotideType"61 RELATIONSHIP_TYPE = "Relation"62 RELATION_ROLE = "RelationRole"63 PLAN_NAME = "planName"64 SAMPLE = "sample"65 NOTE = "note"66 SAMPLE_COLLECTION_DATE = "SampleCollectionDate"67 SAMPLE_RECEIPT_DATE = "SampleReceiptDate"68 SELECTED_IR = "selectedIr"69 IR_CONFIG_JSON = "irConfigJson"70 BARCODE_SET = "barcodeSet"71 BARCODE_SAMPLE_TUBE_LABEL = "barcodeSampleTubeLabel"72 BARCODE_TO_SAMPLE = "barcodeToSample"73 BARCODE_SETS = "barcodeSets"74 BARCODE_SETS_BARCODES = "barcodeSets_barcodes"75 BARCODE_SETS_STATIC = "barcodeSets_static"76 END_BARCODE_SET = "endBarcodeSet"77 END_BARCODE_SETS = "endBarcodeSets"78 END_BARCODES_SUBSET = "endBarcodes_subset"79 END_BARCODE_SETS_BARCODES = "endBarcodeSets_barcodes"80 # note: barcodeKitName was named barcodeId in the plannedexperiment API for backward compatibility. It could be confusing81 # since UI uses barcodeId and endBarcodeId to represent selected barcode for a sample82 END_BARCODE_ID = "endBarcodeId"83 BARCODE_SAMPLE_BARCODE_ID_UI_KEY = "barcodeId"84 BARCODE_SAMPLE_END_BARCODE_ID_UI_KEY = "endBarcodeId"85 DUAL_BARCODES_DB_KEY = "dualBarcodes"86 SAMPLE_TO_BARCODE = "sampleToBarcode"87 SAMPLE_EXTERNAL_ID = "sampleExternalId"88 SAMPLE_NAME = "sampleName"89 SAMPLE_DESCRIPTION = "sampleDescription"90 TUBE_LABEL = "tubeLabel"91 CHIP_BARCODE_LABEL = "chipBarcodeLabel"92 CHIP_BARCODE = "chipBarcode"93 IR_SAMPLE_COLLECTION_DATE = "irSampleCollectionDate"94 IR_SAMPLE_RECEIPT_DATE = "irSampleReceiptDate"95 IR_PLUGIN_ENTRIES = "irPluginEntries"96 IR_GENDER = "irGender"97 IR_POPULATION = "irPopulation"98 IR_MOUSE_STRAINS = "irmouseStrains"99 IR_CANCER_TYPE = "ircancerType"100 IR_CELLULARITY_PCT = "ircellularityPct"101 IR_BIOPSY_DAYS = "irbiopsyDays"102 IR_CELL_NUM = "ircellNum"103 IR_COUPLE_ID = "ircoupleID"104 IR_EMBRYO_ID = "irembryoID"105 IR_BACTERIAL_MARKER_TYPE = "irBacterialMarkerType"106 IR_WITNESS = "irWitness"107 IR_WORKFLOW = "irWorkflow"108 IR_MULTIPLE_WORKFLOW_SINGLE_SAMPLE = "irMultipleWorkflowSelected"109 IR_ISFACTORY = "tag_isFactoryProvidedWorkflow"110 IR_DOWN = "irDown"111 IR_RELATION_ROLE = "irRelationRole"112 IR_RELATIONSHIP_TYPE = "irRelationshipType"113 IR_APPLICATION_TYPE = "ApplicationType"114 IR_SET_ID = "irSetID"115 BAD_SAMPLE_NAME = "bad_sample_name"116 BAD_SAMPLE_EXTERNAL_ID = "bad_sample_external_id"117 BAD_SAMPLE_DESCRIPTION = "bad_sample_description"118 BAD_TUBE_LABEL = "bad_tube_label"119 BAD_CHIP_BARCODE = "bad_chip_barcode"120 BARCODE_SAMPLE_NUCLEOTIDE_TYPE = "nucleotideType"121 BARCODE_SAMPLE_REFERENCE = "reference"122 BARCODE_SAMPLE_TARGET_REGION_BED_FILE = "targetRegionBedFile"123 BARCODE_SAMPLE_HOTSPOT_REGION_BED_FILE = "hotSpotRegionBedFile"124 BARCODE_SAMPLE_SSE_BED_FILE = "sseBedFile"125 BARCODE_SAMPLE_CONTROL_SEQ_TYPE = "controlSequenceType"126 BARCODE_SAMPLE_CONTROL_TYPE = "controlType"127 BARCODE_SAMPLE_END_BARCODE_DB_KEY = "endBarcode"128 BARCODE_SAMPLE_INFO = "barcodeSampleInfo"129 NO_SAMPLES = "no_samples"130 DESCRIPTION = "description"131 BAD_IR_SET_ID = "badIrSetId"132 SAMPLE_ANNOTATIONS = "sampleAnnotations"133 CONTROL_SEQ_TYPES = "controlSeqTypes"134 BARCODE_KIT_SELECTABLE_TYPE = "barcodeKitSelectableType"135 PLAN_REFERENCE = "plan_reference"136 PLAN_TARGET_REGION_BED_FILE = "plan_targetRegionBedFile"137 PLAN_HOTSPOT_REGION_BED_FILE = "plan_hotSpotRegionBedFile"138 SAMPLES_TABLE_LIST = "samplesTableList"139 SAMPLES_TABLE = "samplesTable"140 NUM_SAMPLES = "numberOfSamples"141 APPL_PRODUCT = "applProduct"142 RUN_TYPE = "runType"143 ONCO_SAME_SAMPLE = "isOncoSameSample"144 REFERENCE_STEP_HELPER = "referenceStepHelper"145 NO_BARCODE = "no_barcode"146 BAD_BARCODES = "bad_barcodes"147 APPLICATION_TYPE = "applicationType"148 FIRE_VALIDATION = "fireValidation"149 LIMS_META = "LIMS_meta"150 META = "meta"151 APPLICATION_GROUP_NAME = "applicationGroupName"152 HAS_PGS_DATA = "hasPgsData"153 HAS_ONCO_DATA = "hasOncoData"154class MonitoringFieldNames:155 QC_TYPES = "qcTypes"156def get_ir_userinput_dict(row, irWorkflow):157 sample_name = row.get(SavePlanFieldNames.SAMPLE_NAME, "").strip()158 ir_userinput_dict = {159 SavePlanFieldNames.SAMPLE: sample_name,160 SavePlanFieldNames.SAMPLE_NAME: sample_name.replace(" ", "_"),161 SavePlanFieldNames.SAMPLE_EXTERNAL_ID: row.get(162 SavePlanFieldNames.SAMPLE_EXTERNAL_ID, ""163 ),164 SavePlanFieldNames.SAMPLE_DESCRIPTION: row.get(165 SavePlanFieldNames.SAMPLE_DESCRIPTION, ""166 ),167 SavePlanFieldNames.SAMPLE_COLLECTION_DATE: row.get(168 SavePlanFieldNames.IR_SAMPLE_COLLECTION_DATE, ""169 ),170 SavePlanFieldNames.SAMPLE_RECEIPT_DATE: row.get(171 SavePlanFieldNames.IR_SAMPLE_RECEIPT_DATE, ""172 ),173 SavePlanFieldNames.WORKFLOW: irWorkflow,174 SavePlanFieldNames.IR_ISFACTORY: row.get(175 SavePlanFieldNames.IR_ISFACTORY176 ),177 SavePlanFieldNames.RELATION_ROLE: row.get(178 SavePlanFieldNames.IR_RELATION_ROLE, ""179 ),180 SavePlanFieldNames.RELATIONSHIP_TYPE: row.get(181 SavePlanFieldNames.IR_RELATIONSHIP_TYPE, ""182 ),183 SavePlanFieldNames.SET_ID: row.get(SavePlanFieldNames.IR_SET_ID, ""),184 SavePlanFieldNames.GENDER: row.get(SavePlanFieldNames.IR_GENDER, ""),185 SavePlanFieldNames.POPULATION: row.get(186 SavePlanFieldNames.IR_POPULATION, ""187 ),188 SavePlanFieldNames.MOUSE_STRAINS: row.get(189 SavePlanFieldNames.IR_MOUSE_STRAINS, ""190 ),191 SavePlanFieldNames.NUCLEOTIDE_TYPE: row.get(192 SavePlanFieldNames.BARCODE_SAMPLE_NUCLEOTIDE_TYPE, ""193 ),194 SavePlanFieldNames.CANCER_TYPE: row.get(195 SavePlanFieldNames.IR_CANCER_TYPE, ""196 ),197 SavePlanFieldNames.CELLULARITY_PCT: row.get(198 SavePlanFieldNames.IR_CELLULARITY_PCT, ""199 ),200 SavePlanFieldNames.BIOPSY_DAYS: row.get(201 SavePlanFieldNames.IR_BIOPSY_DAYS, ""202 ),203 SavePlanFieldNames.CELL_NUM: row.get(204 SavePlanFieldNames.IR_CELL_NUM, ""205 ),206 SavePlanFieldNames.COUPLE_ID: row.get(207 SavePlanFieldNames.IR_COUPLE_ID, ""208 ),209 SavePlanFieldNames.EMBRYO_ID: row.get(210 SavePlanFieldNames.IR_EMBRYO_ID, ""211 ),212 SavePlanFieldNames.BACTERIAL_MARKER_TYPE: row.get(SavePlanFieldNames.IR_BACTERIAL_MARKER_TYPE, ""),213 SavePlanFieldNames.WITNESS: row.get(SavePlanFieldNames.IR_WITNESS, ""),214 SavePlanFieldNames.IR_APPLICATION_TYPE: row.get(215 SavePlanFieldNames.IR_APPLICATION_TYPE, ""216 ),217 }218 barcode_id = row.get(SavePlanFieldNames.BARCODE_SAMPLE_BARCODE_ID_UI_KEY)219 if barcode_id:220 ir_userinput_dict[KitsFieldNames.BARCODE_ID] = barcode_id221 endBarcode_id = row.get(222 SavePlanFieldNames.BARCODE_SAMPLE_END_BARCODE_ID_UI_KEY223 )224 if endBarcode_id:225 ir_userinput_dict[SavePlanFieldNames.END_BARCODE_ID] = endBarcode_id226 return ir_userinput_dict227def update_ir_plugin_from_samples_table(samplesTable):228 # save IR fields for non-barcoded and barcoded plans229 userInputInfo = []230 for row in samplesTable:231 sample_name = row.get(SavePlanFieldNames.SAMPLE_NAME, "").strip()232 if sample_name:233 multiWorkflowSelectedObj = row.get(SavePlanFieldNames.IR_MULTIPLE_WORKFLOW_SINGLE_SAMPLE) or []234 if multiWorkflowSelectedObj and isinstance(multiWorkflowSelectedObj[0], dict):235 multiWorkflowSelectedList = [obj.get('workflow') for obj in multiWorkflowSelectedObj]236 if "Upload Only" not in multiWorkflowSelectedList:237 for obj in multiWorkflowSelectedObj:238 row[SavePlanFieldNames.IR_ISFACTORY] = obj["tag"]239 ir_userinput_dict = get_ir_userinput_dict(row, obj["workflow"])240 userInputInfo.append(ir_userinput_dict)241 else:242 irWorflowSelected = row.get(SavePlanFieldNames.IR_WORKFLOW, "")243 ir_userinput_dict = get_ir_userinput_dict(row, irWorflowSelected)244 userInputInfo.append(ir_userinput_dict)245 return userInputInfo246class SavePlanStepData(AbstractStepData):247 def __init__(self, sh_type):248 super(SavePlanStepData, self).__init__(sh_type)249 self.resourcePath = "rundb/plan/page_plan/page_plan_save_plan.html"250 self.prev_step_url = reverse("page_plan_output")251 self.next_step_url = reverse("page_plan_save")252 self.savedFields = OrderedDict()253 self.savedFields[SavePlanFieldNames.PLAN_NAME] = None254 self.savedFields[SavePlanFieldNames.NOTE] = None255 self.savedFields[SavePlanFieldNames.APPLICATION_TYPE] = ""256 self.savedFields[SavePlanFieldNames.IR_DOWN] = "0"257 self.savedFields[SavePlanFieldNames.BARCODE_SET] = ""258 self.savedFields[SavePlanFieldNames.END_BARCODE_SET] = ""259 self.prepopulatedFields[SavePlanFieldNames.PLAN_REFERENCE] = ""260 self.prepopulatedFields[SavePlanFieldNames.PLAN_TARGET_REGION_BED_FILE] = ""261 self.prepopulatedFields[SavePlanFieldNames.PLAN_HOTSPOT_REGION_BED_FILE] = ""262 self.prepopulatedFields[SavePlanFieldNames.SELECTED_IR] = None263 self.prepopulatedFields[SavePlanFieldNames.IR_WORKFLOW] = None264 self.prepopulatedFields[SavePlanFieldNames.IR_ISFACTORY] = False265 self.prepopulatedFields[SavePlanFieldNames.IR_CONFIG_JSON] = None266 self.prepopulatedFields[SavePlanFieldNames.SAMPLE_ANNOTATIONS] = list(267 SampleAnnotation_CV.objects.filter(isActive=True).order_by(268 "annotationType", "value"269 )270 )271 self.savedFields[SavePlanFieldNames.BARCODE_SAMPLE_TUBE_LABEL] = None272 self.savedFields[SavePlanFieldNames.CHIP_BARCODE_LABEL] = None273 self.savedObjects[SavePlanFieldNames.BARCODE_TO_SAMPLE] = OrderedDict()274 barcodeObjs_list = list(275 dnaBarcode.objects.filter(active=True)276 .values_list("name", flat=True)277 .distinct()278 .order_by("name")279 )280 self.prepopulatedFields[SavePlanFieldNames.BARCODE_SETS] = barcodeObjs_list281 all_barcodes = {}282 for bc in (283 dnaBarcode.objects.filter(active=True)284 .order_by("name", "index")285 .values("name", "id_str", "sequence")286 ):287 all_barcodes.setdefault(bc["name"], []).append(bc)288 self.prepopulatedFields[SavePlanFieldNames.BARCODE_SETS_BARCODES] = json.dumps(289 all_barcodes290 )291 self.prepopulatedFields[SavePlanFieldNames.BARCODE_SETS_STATIC] = (292 dnaBarcode.objects.filter(active=True)293 .exclude(end_sequence="")294 .values_list("name", flat=True)295 .distinct()296 )297 self.prepopulatedFields[SavePlanFieldNames.END_BARCODE_SETS] = barcodeObjs_list298 self.prepopulatedFields[299 SavePlanFieldNames.END_BARCODE_SETS_BARCODES300 ] = json.dumps(all_barcodes)301 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE] = OrderedDict()302 self.savedObjects[SavePlanFieldNames.IR_PLUGIN_ENTRIES] = []303 self.prepopulatedFields[SavePlanFieldNames.FIRE_VALIDATION] = "1"304 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST] = [305 {"row": "1", "sampleName": u"Sample 1"}306 ]307 self.savedFields[SavePlanFieldNames.SAMPLES_TABLE] = json.dumps(308 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]309 )310 self.prepopulatedFields[SavePlanFieldNames.NUM_SAMPLES] = 1311 self.savedFields[SavePlanFieldNames.ONCO_SAME_SAMPLE] = False312 # logger.debug("save_plan_step_data samplesTable=%s" %(self.savedFields[SavePlanFieldNames.SAMPLES_TABLE]))313 self.prepopulatedFields[314 SavePlanFieldNames.CONTROL_SEQ_TYPES315 ] = KitInfo.objects.filter(316 kitType="ControlSequenceKitType", isActive=True317 ).order_by(318 "name"319 )320 self.savedObjects[SavePlanFieldNames.REFERENCE_STEP_HELPER] = None321 self.savedObjects[SavePlanFieldNames.APPL_PRODUCT] = None322 self.savedFields[SavePlanFieldNames.LIMS_META] = None323 self.savedObjects[SavePlanFieldNames.META] = {}324 self.prepopulatedFields[SavePlanFieldNames.APPLICATION_GROUP_NAME] = ""325 self.prepopulatedFields[SavePlanFieldNames.HAS_ONCO_DATA] = False326 self.prepopulatedFields[SavePlanFieldNames.HAS_PGS_DATA] = False327 self._dependsOn.append(StepNames.IONREPORTER)328 self._dependsOn.append(StepNames.APPLICATION)329 self._dependsOn.append(StepNames.KITS)330 # self._dependsOn.append(StepNames.REFERENCE)331 self.sh_type = sh_type332 # Monitoring333 self.qcNames = []334 self.ModelsQcTypeToLabelsQcTypeAsDict = ModelsQcTypeToLabelsQcTypeAsDict335 all_qc_types = list(QCType.objects.all().order_by("qcName"))336 self.prepopulatedFields[MonitoringFieldNames.QC_TYPES] = all_qc_types337 for qc_type in all_qc_types:338 self.savedFields[qc_type.qcName] = qc_type.defaultThreshold339 self.qcNames.append(qc_type.qcName)340 def getStepName(self):341 return StepNames.SAVE_PLAN342 def validateField(self, field_name, new_field_value):343 self.validationErrors.pop(field_name, None)344 # if the plan has been sequenced, do not enforce the target bed file to be selected345 planStatus = self.getDefaultSectionPrepopulatedFieldDict().get("planStatus", "")346 if field_name == SavePlanFieldNames.PLAN_NAME:347 errors = validate_plan_name(348 new_field_value,349 field_label=_("workflow.step.saveplan.fields.planName.label"),350 ) # 'Plan Name'351 if errors:352 self.validationErrors[field_name] = "\n".join(errors)353 elif field_name == SavePlanFieldNames.NOTE:354 errors = validate_notes(355 new_field_value,356 field_label=_("workflow.step.saveplan.fields.note.label"),357 )358 if errors:359 self.validationErrors[field_name] = "\n".join(errors)360 elif field_name == SavePlanFieldNames.BARCODE_SAMPLE_TUBE_LABEL:361 errors = validate_sample_tube_label(362 new_field_value,363 field_label=_(364 "workflow.step.sample.fields.barcodeSampleTubeLabel.label"365 ),366 )367 if errors:368 self.validationErrors[field_name] = "\n".join(errors)369 elif field_name == SavePlanFieldNames.CHIP_BARCODE_LABEL:370 errors = validate_chipBarcode(371 new_field_value,372 field_label=_("workflow.step.saveplan.fields.chipBarcodeLabel.label"),373 )374 if errors:375 self.validationErrors[field_name] = "\n".join(errors)376 elif field_name in self.qcNames:377 """378 All qc thresholds must be positive integers379 """380 errors = validate_QC(381 new_field_value, ModelsQcTypeToLabelsQcType(field_name)382 )383 if errors:384 self.validationErrors[field_name] = errors[0]385 else:386 self.validationErrors.pop(field_name, None)387 elif field_name == SavePlanFieldNames.SAMPLES_TABLE:388 sample_table_list = json.loads(new_field_value)389 samples_errors = []390 applProduct = self.savedObjects[SavePlanFieldNames.APPL_PRODUCT]391 # applProduct object is not saved yet392 if applProduct:393 isTargetRegionSelectionRequired = (394 applProduct.isTargetRegionBEDFileSelectionRequiredForRefSelection395 )396 else:397 isTargetRegionSelectionRequired = False398 applicationGroupName = self.prepopulatedFields[399 SavePlanFieldNames.APPLICATION_GROUP_NAME400 ]401 for row in sample_table_list:402 sample_name = row.get(SavePlanFieldNames.SAMPLE_NAME, "").strip()403 if sample_name:404 sample_nucleotideType = row.get(405 SavePlanFieldNames.BARCODE_SAMPLE_NUCLEOTIDE_TYPE, ""406 )407 sampleReference = row.get(408 SavePlanFieldNames.BARCODE_SAMPLE_REFERENCE, ""409 )410 sampleTargetRegionBedFile = row.get(411 SavePlanFieldNames.BARCODE_SAMPLE_TARGET_REGION_BED_FILE, ""412 )413 runType = self.prepopulatedFields[SavePlanFieldNames.RUN_TYPE]414 errors = []415 # if the plan has been sequenced, do not enforce the target bed file to be selected416 isMainBEDFileValidated = (417 "default_targetBedFile" in self.validationErrors418 )419 if (420 not isMainBEDFileValidated421 and planStatus != "run"422 and (self.sh_type not in StepHelperType.TEMPLATE_TYPES)423 ):424 sampleTargetRegionBedFile_label = _(425 "workflow.step.saveplan.bysample.fields.targetRegionBedFile.label"426 ) % {"sampleName": sample_name}427 errors = validate_targetRegionBedFile_for_runType(428 sampleTargetRegionBedFile,429 field_label=sampleTargetRegionBedFile_label,430 runType=runType,431 reference=sampleReference,432 nucleotideType=sample_nucleotideType,433 applicationGroupName=applicationGroupName,434 ) # "Target Regions BED File for %(sampleName)s"435 if errors:436 samples_errors.append("\n".join(errors))437 if samples_errors:438 self.validationErrors[field_name] = "\n".join(samples_errors)439 def validateStep(self):440 any_samples = False441 self.validationErrors[SavePlanFieldNames.BAD_SAMPLE_NAME] = []442 self.validationErrors[SavePlanFieldNames.BAD_SAMPLE_EXTERNAL_ID] = []443 self.validationErrors[SavePlanFieldNames.BAD_SAMPLE_DESCRIPTION] = []444 self.validationErrors[SavePlanFieldNames.BAD_TUBE_LABEL] = []445 self.validationErrors[SavePlanFieldNames.BAD_CHIP_BARCODE] = []446 self.validationErrors[SavePlanFieldNames.BAD_IR_SET_ID] = []447 self.validationErrors.pop(SavePlanFieldNames.NO_BARCODE, None)448 self.validationErrors.pop(SavePlanFieldNames.BAD_BARCODES, None)449 barcodeSet = self.savedFields[SavePlanFieldNames.BARCODE_SET]450 selectedBarcodes = []451 endBarcodeSet = self.savedFields[SavePlanFieldNames.END_BARCODE_SET]452 selectedEndBarcodes = []453 samplesTable = json.loads(self.savedFields[SavePlanFieldNames.SAMPLES_TABLE])454 # logger.debug("save_plan_step_data - anySamples? samplesTable=%s" %(samplesTable))455 for row in samplesTable:456 sample_name = row.get(SavePlanFieldNames.SAMPLE_NAME, "").strip()457 # logger.debug("save_plan_step_data - anySamples? sampleName=%s" %(sample_name))458 if sample_name:459 any_samples = True460 if validate_sample_name(461 sample_name, field_label=_Sample.displayedName.verbose_name462 ):463 self.validationErrors[SavePlanFieldNames.BAD_SAMPLE_NAME].append(464 sample_name465 )466 external_id = row.get(SavePlanFieldNames.SAMPLE_EXTERNAL_ID, "")467 if external_id:468 self.validate_field(469 external_id,470 self.validationErrors[471 SavePlanFieldNames.BAD_SAMPLE_EXTERNAL_ID472 ],473 )474 description = row.get(SavePlanFieldNames.SAMPLE_DESCRIPTION, "")475 if description:476 self.validate_field(477 description,478 self.validationErrors[479 SavePlanFieldNames.BAD_SAMPLE_DESCRIPTION480 ],481 False,482 MAX_LENGTH_SAMPLE_DESCRIPTION,483 )484 ir_set_id = row.get("irSetId", "")485 if ir_set_id and not (str(ir_set_id).isdigit()):486 self.validationErrors[SavePlanFieldNames.BAD_IR_SET_ID].append(487 ir_set_id488 )489 tube_label = row.get("tubeLabel", "")490 if validate_sample_tube_label(491 tube_label,492 field_label=_(493 "workflow.step.saveplan.fields.barcodeSampleTubeLabel.label"494 ),495 ):496 self.validationErrors[SavePlanFieldNames.BAD_TUBE_LABEL].append(497 tube_label498 )499 chip_barcode = row.get("chipBarcode", "")500 if validate_chipBarcode(501 chip_barcode,502 field_label=_(503 "workflow.step.saveplan.fields.chipBarcodeLabel.label"504 ),505 ):506 self.validationErrors[SavePlanFieldNames.BAD_CHIP_BARCODE].append(507 chip_barcode508 )509 if barcodeSet:510 selectedBarcodes.append(511 row.get(SavePlanFieldNames.BARCODE_SAMPLE_BARCODE_ID_UI_KEY)512 )513 if endBarcodeSet:514 endBarcode_id_value = row.get(515 SavePlanFieldNames.BARCODE_SAMPLE_END_BARCODE_ID_UI_KEY516 )517 if endBarcode_id_value:518 selectedEndBarcodes.append(endBarcode_id_value)519 if any_samples:520 self.validationErrors.pop(SavePlanFieldNames.NO_SAMPLES, None)521 else:522 self.validationErrors[523 SavePlanFieldNames.NO_SAMPLES524 ] = validation.invalid_required_at_least_one(_Sample.verbose_name)525 if not self.validationErrors[SavePlanFieldNames.BAD_SAMPLE_NAME]:526 self.validationErrors.pop(SavePlanFieldNames.BAD_SAMPLE_NAME, None)527 if not self.validationErrors[SavePlanFieldNames.BAD_TUBE_LABEL]:528 self.validationErrors.pop(SavePlanFieldNames.BAD_TUBE_LABEL, None)529 if not self.validationErrors[SavePlanFieldNames.BAD_CHIP_BARCODE]:530 self.validationErrors.pop(SavePlanFieldNames.BAD_CHIP_BARCODE, None)531 if not self.validationErrors[SavePlanFieldNames.BAD_SAMPLE_EXTERNAL_ID]:532 self.validationErrors.pop(SavePlanFieldNames.BAD_SAMPLE_EXTERNAL_ID, None)533 if not self.validationErrors[SavePlanFieldNames.BAD_SAMPLE_DESCRIPTION]:534 self.validationErrors.pop(SavePlanFieldNames.BAD_SAMPLE_DESCRIPTION, None)535 if not self.validationErrors[SavePlanFieldNames.BAD_IR_SET_ID]:536 self.validationErrors.pop(SavePlanFieldNames.BAD_IR_SET_ID, None)537 # 20170928-TODO-WIP538 if barcodeSet:539 errors = validate_barcode_sample_association(selectedBarcodes, barcodeSet)540 myErrors = convert(errors)541 if myErrors.get("MISSING_BARCODE", ""):542 self.validationErrors[SavePlanFieldNames.NO_BARCODE] = myErrors.get(543 "MISSING_BARCODE", ""544 )545 if myErrors.get("DUPLICATE_BARCODE", ""):546 self.validationErrors[SavePlanFieldNames.BAD_BARCODES] = myErrors.get(547 "DUPLICATE_BARCODE", ""548 )549 if selectedEndBarcodes:550 applProduct = self.savedObjects[SavePlanFieldNames.APPL_PRODUCT]551 if applProduct and applProduct.dualBarcodingRule == "no_reuse":552 errors = validate_barcode_sample_association(553 selectedEndBarcodes, endBarcodeSet, isEndBarcodeExists=True554 )555 myErrors = convert(errors)556 if myErrors.get("DUPLICATE_BARCODE", ""):557 self.validationErrors[558 SavePlanFieldNames.BAD_BARCODES559 ] = myErrors.get("DUPLICATE_BARCODE", "")560 def validate_field(561 self,562 value,563 bad_samples,564 validate_leading_chars=True,565 max_length=MAX_LENGTH_SAMPLE_NAME,566 ):567 exists = False568 if value:569 exists = True570 if not validation.is_valid_chars(value):571 bad_samples.append(value)572 if (573 validate_leading_chars574 and value not in bad_samples575 and not validation.is_valid_leading_chars(value)576 ):577 bad_samples.append(value)578 if value not in bad_samples and not validation.is_valid_length(579 value, max_length580 ):581 bad_samples.append(value)582 return exists583 def updateSavedObjectsFromSavedFields(self):584 self.prepopulatedFields["fireValidation"] = "0"585 for section, sectionObj in list(self.step_sections.items()):586 sectionObj.updateSavedObjectsFromSavedFields()587 if section == StepNames.REFERENCE:588 self.prepopulatedFields[589 SavePlanFieldNames.PLAN_REFERENCE590 ] = sectionObj.savedFields.get(ReferenceFieldNames.REFERENCE, "")591 self.prepopulatedFields[592 SavePlanFieldNames.PLAN_TARGET_REGION_BED_FILE593 ] = sectionObj.savedFields.get(ReferenceFieldNames.TARGET_BED_FILE, "")594 self.prepopulatedFields[595 SavePlanFieldNames.PLAN_HOTSPOT_REGION_BED_FILE596 ] = sectionObj.savedFields.get(597 ReferenceFieldNames.HOT_SPOT_BED_FILE, ""598 )599 # logger.debug("save_plan_step_data.updateSavedObjectsFromSavedFields() REFERENCE reference.savedFields=%s" %(sectionObj.savedFields))600 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST] = json.loads(601 self.savedFields[SavePlanFieldNames.SAMPLES_TABLE]602 )603 self.prepopulatedFields[SavePlanFieldNames.NUM_SAMPLES] = len(604 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]605 )606 self.savedObjects[607 SavePlanFieldNames.IR_PLUGIN_ENTRIES608 ] = update_ir_plugin_from_samples_table(609 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]610 )611 if self.savedFields[SavePlanFieldNames.BARCODE_SET]:612 planReference = self.prepopulatedFields[SavePlanFieldNames.PLAN_REFERENCE]613 planHotSptRegionBedFile = self.prepopulatedFields[614 SavePlanFieldNames.PLAN_HOTSPOT_REGION_BED_FILE615 ]616 planTargetRegionBedFile = self.prepopulatedFields[617 SavePlanFieldNames.PLAN_TARGET_REGION_BED_FILE618 ]619 logger.debug(620 "save_plan_step_data.updateSavedObjectsFromSavedFields() BARCODE_SET PLAN_REFERENCE=%s; TARGET_REGION=%s; HOTSPOT_REGION=%s;"621 % (planReference, planTargetRegionBedFile, planHotSptRegionBedFile)622 )623 reference_step_helper = self.savedObjects[624 SavePlanFieldNames.REFERENCE_STEP_HELPER625 ]626 endBarcodeKit = self.savedFields[SavePlanFieldNames.END_BARCODE_SET]627 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE] = {}628 for row in self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]:629 logger.debug(630 "save_plan_step_data.updateSavedObjectsFromSavedFields() BARCODE_SET LOOP row=%s"631 % (row)632 )633 sample_name = row.get(SavePlanFieldNames.SAMPLE_NAME, "").strip()634 if sample_name:635 id_str = row[SavePlanFieldNames.BARCODE_SAMPLE_BARCODE_ID_UI_KEY]636 end_id_str = row[637 SavePlanFieldNames.BARCODE_SAMPLE_END_BARCODE_ID_UI_KEY638 ]639 # update barcodedSamples dict640 if (641 sample_name642 not in self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE]643 ):644 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][645 sample_name646 ] = {647 KitsFieldNames.BARCODES: [],648 SavePlanFieldNames.BARCODE_SAMPLE_INFO: {},649 SavePlanFieldNames.DUAL_BARCODES_DB_KEY: [],650 }651 sample_nucleotideType = row.get(652 SavePlanFieldNames.BARCODE_SAMPLE_NUCLEOTIDE_TYPE, ""653 )654 sampleReference = row.get(655 SavePlanFieldNames.BARCODE_SAMPLE_REFERENCE, ""656 )657 sampleHotSpotRegionBedFile = row.get(658 SavePlanFieldNames.BARCODE_SAMPLE_HOTSPOT_REGION_BED_FILE, ""659 )660 sampleTargetRegionBedFile = row.get(661 SavePlanFieldNames.BARCODE_SAMPLE_TARGET_REGION_BED_FILE, ""662 )663 runType = self.prepopulatedFields[SavePlanFieldNames.RUN_TYPE]664 # logger.debug("save_plan_step_data.updateSavedObjectsFromSavedFields() SETTING reference step helper runType=%s; sample_nucleotideType=%s; sampleReference=%s" %(runType, sample_nucleotideType, sampleReference))665 sseBedFile = ""666 if reference_step_helper:667 sseBedFile = reference_step_helper.get_sseBedFile(668 sampleTargetRegionBedFile669 )670 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][671 sample_name672 ][KitsFieldNames.BARCODES].append(id_str)673 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][674 sample_name675 ][SavePlanFieldNames.BARCODE_SAMPLE_INFO][id_str] = {676 SavePlanFieldNames.EXTERNAL_ID: row.get(677 SavePlanFieldNames.SAMPLE_EXTERNAL_ID, ""678 ),679 SavePlanFieldNames.DESCRIPTION: row.get(680 SavePlanFieldNames.SAMPLE_DESCRIPTION, ""681 ),682 SavePlanFieldNames.BARCODE_SAMPLE_NUCLEOTIDE_TYPE: sample_nucleotideType,683 SavePlanFieldNames.BARCODE_SAMPLE_REFERENCE: sampleReference,684 SavePlanFieldNames.BARCODE_SAMPLE_TARGET_REGION_BED_FILE: sampleTargetRegionBedFile,685 SavePlanFieldNames.BARCODE_SAMPLE_HOTSPOT_REGION_BED_FILE: sampleHotSpotRegionBedFile,686 SavePlanFieldNames.BARCODE_SAMPLE_SSE_BED_FILE: sseBedFile,687 SavePlanFieldNames.BARCODE_SAMPLE_END_BARCODE_DB_KEY: row.get(688 SavePlanFieldNames.BARCODE_SAMPLE_END_BARCODE_ID_UI_KEY, ""689 ),690 SavePlanFieldNames.BARCODE_SAMPLE_CONTROL_SEQ_TYPE: row.get(691 SavePlanFieldNames.BARCODE_SAMPLE_CONTROL_SEQ_TYPE, ""692 ),693 SavePlanFieldNames.BARCODE_SAMPLE_CONTROL_TYPE: row.get(694 SavePlanFieldNames.BARCODE_SAMPLE_CONTROL_TYPE, ""695 ),696 }697 if endBarcodeKit and id_str:698 if end_id_str:699 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][700 sample_name701 ][SavePlanFieldNames.DUAL_BARCODES_DB_KEY].append(702 id_str703 + PlannedExperiment.get_dualBarcodes_delimiter()704 + end_id_str705 )706 else:707 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][708 sample_name709 ][SavePlanFieldNames.DUAL_BARCODES_DB_KEY].append(id_str)710 def alternateUpdateFromStep(self, updated_step):711 """712 also runs if editing a plan post-sequencing and Application is updated713 """714 if updated_step.getStepName() == StepNames.APPLICATION:715 if updated_step.savedObjects[ApplicationFieldNames.RUN_TYPE]:716 runTypeObj = updated_step.savedObjects[ApplicationFieldNames.RUN_TYPE]717 # make sure hidden nucleotide type field is updated for new Application718 if (719 self.prepopulatedFields.get(SavePlanFieldNames.RUN_TYPE)720 and self.prepopulatedFields[SavePlanFieldNames.RUN_TYPE]721 != runTypeObj.runType722 ):723 nucleotideType = runTypeObj.nucleotideType.upper()724 if nucleotideType in ["DNA", "RNA"]:725 for row in self.savedObjects[726 SavePlanFieldNames.SAMPLES_TABLE_LIST727 ]:728 row[729 SavePlanFieldNames.BARCODE_SAMPLE_NUCLEOTIDE_TYPE730 ] = nucleotideType731 self.savedFields[SavePlanFieldNames.SAMPLES_TABLE] = json.dumps(732 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]733 )734 self.prepopulatedFields[735 SavePlanFieldNames.RUN_TYPE736 ] = runTypeObj.runType737 else:738 self.prepopulatedFields[SavePlanFieldNames.RUN_TYPE] = ""739 def updateFromStep(self, updated_step):740 if updated_step.getStepName() not in self._dependsOn:741 for sectionKey, sectionObj in list(self.step_sections.items()):742 if sectionObj:743 # logger.debug("save_plan_step_data.updateFromStep() sectionKey=%s" %(sectionKey))744 for key in list(sectionObj.getCurrentSavedFieldDict().keys()):745 sectionObj.updateFromStep(updated_step)746 return747 self.alternateUpdateFromStep(updated_step)748 if updated_step.getStepName() == StepNames.APPLICATION:749 if not updated_step.savedObjects[ApplicationFieldNames.APPL_PRODUCT]:750 logger.debug(751 "save_plan_step_data.updateFromStep() --- NO-OP --- APPLICATION APPL_PRODUCT IS NOT YET SET!!! "752 )753 return754 if (755 updated_step.getStepName() == StepNames.APPLICATION756 and updated_step.savedObjects[ApplicationFieldNames.APPL_PRODUCT]757 ):758 self.savedObjects[759 SavePlanFieldNames.APPL_PRODUCT760 ] = updated_step.savedObjects[ApplicationFieldNames.APPL_PRODUCT]761 if updated_step.getStepName() == StepNames.KITS:762 barcode_set = updated_step.savedFields[KitsFieldNames.BARCODE_ID]763 if str(barcode_set) != str(764 self.savedFields[SavePlanFieldNames.BARCODE_SET]765 ):766 self.savedFields[SavePlanFieldNames.BARCODE_SET] = barcode_set767 if barcode_set:768 barcodes = list(769 dnaBarcode.objects.filter(name=barcode_set).order_by("index")770 )771 bc_count = min(772 len(barcodes),773 len(self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]),774 )775 self.savedObjects[776 SavePlanFieldNames.SAMPLES_TABLE_LIST777 ] = self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST][778 :bc_count779 ]780 for i in range(bc_count):781 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST][i][782 SavePlanFieldNames.BARCODE_SAMPLE_BARCODE_ID_UI_KEY783 ] = barcodes[i].id_str784 self.savedFields[SavePlanFieldNames.SAMPLES_TABLE] = json.dumps(785 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]786 )787 # if barcode kit selection changes, re-validate788 self.validateStep()789 if updated_step.getStepName() == StepNames.IONREPORTER:790 ir_account_id = updated_step.savedFields[791 IonReporterFieldNames.IR_ACCOUNT_ID792 ]793 ir_workflow = updated_step.savedFields[IonReporterFieldNames.IR_WORKFLOW]794 ir_isfactory = updated_step.savedFields[IonReporterFieldNames.IR_ISFACTORY]795 if ir_account_id and ir_account_id != "0":796 if (797 self.prepopulatedFields[SavePlanFieldNames.IR_WORKFLOW]798 != ir_workflow799 or self.prepopulatedFields[SavePlanFieldNames.IR_ISFACTORY]800 != ir_isfactory801 ):802 for row in self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]:803 row[SavePlanFieldNames.IR_WORKFLOW] = ir_workflow804 row[SavePlanFieldNames.IR_ISFACTORY] = ir_isfactory805 self.savedFields[SavePlanFieldNames.SAMPLES_TABLE] = json.dumps(806 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]807 )808 self.prepopulatedFields[SavePlanFieldNames.IR_WORKFLOW] = ir_workflow809 self.prepopulatedFields[SavePlanFieldNames.IR_ISFACTORY] = ir_isfactory810 self.prepopulatedFields[SavePlanFieldNames.SELECTED_IR] = ir_account_id811 for sectionKey, sectionObj in list(self.step_sections.items()):812 if sectionObj:813 sectionObj.updateFromStep(updated_step)814 logger.debug(815 "EXIT save_plan_step_data.updateFromStep() self.savedFields=%s"816 % (self.savedFields)817 )818 def getDefaultSection(self):819 """820 Sections are optional for a step. Return the default section821 """822 if not self.step_sections:823 return None824 return self.step_sections.get(StepNames.REFERENCE, None)825 def getDefaultSectionSavedFieldDict(self):826 """827 Sections are optional for a step. Return the savedFields dictionary of the default section if it exists.828 Otherwise, return an empty dictionary829 """830 default_value = {}831 if not self.step_sections:832 return default_value833 sectionObj = self.step_sections.get(StepNames.REFERENCE, None)834 if sectionObj:835 # logger.debug("save_plan_step_data.getDefaultSectionSavedFieldDict() sectionObj.savedFields=%s" %(sectionObj.savedFields))836 return sectionObj.savedFields837 else:838 return default_value839 def getDefaultSectionPrepopulatedFieldDict(self):840 """841 Sections are optional for a step. Return the prepopuldatedFields dictionary of the default section if it exists.842 Otherwise, return an empty dictionary843 """844 default_value = {}845 if not self.step_sections:846 return default_value847 sectionObj = self.step_sections.get(StepNames.REFERENCE, None)848 if sectionObj:849 # logger.debug("save_plan_step_data.getDefaultSectionPrepopulatedFieldsFieldDict() sectionObj.prepopulatedFields=%s" %(sectionObj.prepopulatedFields))850 return sectionObj.prepopulatedFields851 else:...

Full Screen

Full Screen

barcode_by_sample_step_data.py

Source:barcode_by_sample_step_data.py Github

copy

Full Screen

1# Copyright (C) 2013 Ion Torrent Systems, Inc. All Rights Reserved2from collections import OrderedDict3from iondb.rundb.plan.page_plan.abstract_step_data import AbstractStepData4from iondb.rundb.models import (5 dnaBarcode,6 SampleAnnotation_CV,7 RunType,8 PlannedExperiment,9)10from iondb.rundb.plan.page_plan.step_names import StepNames11from iondb.rundb.plan.page_plan.application_step_data import ApplicationFieldNames12from iondb.rundb.plan.page_plan.kits_step_data import KitsFieldNames13from iondb.rundb.plan.page_plan.reference_step_data import ReferenceFieldNames14from iondb.rundb.plan.page_plan.save_plan_step_data import (15 SavePlanFieldNames,16 update_ir_plugin_from_samples_table,17)18from iondb.rundb.plan.plan_validator import (19 validate_sample_tube_label,20 validate_barcode_sample_association,21 validate_targetRegionBedFile_for_runType,22 validate_chipBarcode,23)24from iondb.rundb.plan.page_plan.ionreporter_step_data import IonReporterFieldNames25from iondb.utils.utils import convert26from django.core.serializers.json import DjangoJSONEncoder27from django.core.urlresolvers import reverse28from django.utils.translation import ugettext as _29import json30import logging31logger = logging.getLogger(__name__)32class BarcodeBySampleFieldNames:33 # NOTE: this step uses field names from save_plan_step_data for consistency34 SAMPLESET_ITEMS = "samplesetitems"35 ONCO_SAME_SAMPLE = "isOncoSameSample"36 HAS_PGS_DATA = "hasPgsData"37 HAS_ONCO_DATA = "hasOncoData"38 SHOW_SAMPLESET_INFO = "showSampleSetInfo"39class BarcodeBySampleStepData(AbstractStepData):40 def __init__(self, sh_type):41 super(BarcodeBySampleStepData, self).__init__(sh_type)42 self.resourcePath = "rundb/plan/page_plan/page_plan_by_sample_barcode.html"43 self.prev_step_url = reverse("page_plan_plugins")44 self.next_step_url = reverse("page_plan_output")45 self.savedFields = OrderedDict()46 self.savedFields[SavePlanFieldNames.BARCODE_SET] = ""47 self.savedFields[SavePlanFieldNames.BARCODE_SAMPLE_TUBE_LABEL] = ""48 self.savedFields[SavePlanFieldNames.CHIP_BARCODE_LABEL] = ""49 # for non-barcoded planBySampleSet50 self.savedFields[SavePlanFieldNames.TUBE_LABEL] = ""51 self.savedFields[SavePlanFieldNames.APPLICATION_TYPE] = ""52 self.savedFields[SavePlanFieldNames.IR_DOWN] = "0"53 self.prepopulatedFields[SavePlanFieldNames.SELECTED_IR] = None54 self.prepopulatedFields[SavePlanFieldNames.IR_WORKFLOW] = None55 self.prepopulatedFields[SavePlanFieldNames.IR_ISFACTORY] = False56 self.prepopulatedFields[BarcodeBySampleFieldNames.SAMPLESET_ITEMS] = []57 self.prepopulatedFields[BarcodeBySampleFieldNames.SHOW_SAMPLESET_INFO] = False58 self.prepopulatedFields[SavePlanFieldNames.SAMPLE_ANNOTATIONS] = list(59 SampleAnnotation_CV.objects.filter(isActive=True).order_by(60 "annotationType", "value"61 )62 )63 self.prepopulatedFields[SavePlanFieldNames.FIRE_VALIDATION] = "1"64 self.savedObjects[SavePlanFieldNames.IR_PLUGIN_ENTRIES] = []65 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE] = OrderedDict()66 barcodeObjs_list = list(67 dnaBarcode.objects.filter(active=True)68 .values_list("name", flat=True)69 .distinct()70 .order_by("name")71 )72 self.prepopulatedFields[SavePlanFieldNames.BARCODE_SETS] = barcodeObjs_list73 all_barcodes = {}74 for bc in (75 dnaBarcode.objects.filter(active=True)76 .order_by("name", "index")77 .values("name", "id_str", "sequence")78 ):79 all_barcodes.setdefault(bc["name"], []).append(bc)80 self.prepopulatedFields[SavePlanFieldNames.BARCODE_SETS_BARCODES] = json.dumps(81 all_barcodes82 )83 self.prepopulatedFields[SavePlanFieldNames.BARCODE_SETS_STATIC] = (84 dnaBarcode.objects.filter(active=True)85 .exclude(end_sequence="")86 .values_list("name", flat=True)87 .distinct()88 )89 self.prepopulatedFields[SavePlanFieldNames.END_BARCODE_SETS] = barcodeObjs_list90 self.prepopulatedFields[91 SavePlanFieldNames.END_BARCODE_SETS_BARCODES92 ] = json.dumps(all_barcodes)93 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST] = [{"row": "1"}]94 self.savedFields[SavePlanFieldNames.SAMPLES_TABLE] = json.dumps(95 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]96 )97 self.prepopulatedFields[SavePlanFieldNames.NUM_SAMPLES] = 198 self.savedFields[SavePlanFieldNames.ONCO_SAME_SAMPLE] = False99 self.savedObjects[SavePlanFieldNames.REFERENCE_STEP_HELPER] = None100 self.savedObjects[SavePlanFieldNames.APPL_PRODUCT] = None101 self.prepopulatedFields[SavePlanFieldNames.PLAN_REFERENCE] = ""102 self.prepopulatedFields[SavePlanFieldNames.PLAN_TARGET_REGION_BED_FILE] = ""103 self.prepopulatedFields[SavePlanFieldNames.PLAN_HOTSPOT_REGION_BED_FILE] = ""104 self.prepopulatedFields[SavePlanFieldNames.RUN_TYPE] = ""105 self.prepopulatedFields[SavePlanFieldNames.APPLICATION_GROUP_NAME] = ""106 self.prepopulatedFields[BarcodeBySampleFieldNames.HAS_ONCO_DATA] = False107 self.prepopulatedFields[BarcodeBySampleFieldNames.HAS_PGS_DATA] = False108 self._dependsOn.append(StepNames.IONREPORTER)109 self._dependsOn.append(StepNames.APPLICATION)110 # self._dependsOn.append(StepNames.REFERENCE)111 self.sh_type = sh_type112 def getStepName(self):113 return StepNames.BARCODE_BY_SAMPLE114 def alternateUpdateFromStep(self, updated_step):115 """116 also runs if editing a plan post-sequencing and Application is updated117 """118 if updated_step.getStepName() == StepNames.APPLICATION:119 if updated_step.savedObjects[ApplicationFieldNames.RUN_TYPE]:120 runTypeObj = updated_step.savedObjects[ApplicationFieldNames.RUN_TYPE]121 # make sure hidden nucleotide type field is updated for new Application122 if (123 self.prepopulatedFields.get(SavePlanFieldNames.RUN_TYPE)124 and self.prepopulatedFields[SavePlanFieldNames.RUN_TYPE]125 != runTypeObj.runType126 ):127 nucleotideType = runTypeObj.nucleotideType.upper()128 if nucleotideType in ["DNA", "RNA"]:129 for row in self.savedObjects[130 SavePlanFieldNames.SAMPLES_TABLE_LIST131 ]:132 row["nucleotideType"] = nucleotideType133 self.savedFields[SavePlanFieldNames.SAMPLES_TABLE] = json.dumps(134 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]135 )136 self.prepopulatedFields[137 SavePlanFieldNames.RUN_TYPE138 ] = runTypeObj.runType139 else:140 self.prepopulatedFields[SavePlanFieldNames.RUN_TYPE] = ""141 def updateFromStep(self, updated_step):142 if updated_step.getStepName() not in self._dependsOn:143 return144 self.alternateUpdateFromStep(updated_step)145 if updated_step.getStepName() == StepNames.APPLICATION:146 if not updated_step.savedObjects[ApplicationFieldNames.APPL_PRODUCT]:147 logger.debug(148 "barcode_by_sample_step_data.updateFromStep() --- NO-OP --- APPLICATION APPL_PRODUCT IS NOT YET SET!!! "149 )150 return151 if updated_step.getStepName() == StepNames.IONREPORTER:152 ir_account_id = updated_step.savedFields[153 IonReporterFieldNames.IR_ACCOUNT_ID154 ]155 ir_workflow = updated_step.savedFields[IonReporterFieldNames.IR_WORKFLOW]156 ir_isfactory = updated_step.savedFields[IonReporterFieldNames.IR_ISFACTORY]157 # update samples table with saved sampleset items fields for IR158 if ir_account_id and ir_account_id != "0":159 if (160 self.prepopulatedFields[SavePlanFieldNames.IR_WORKFLOW]161 != ir_workflow162 or self.prepopulatedFields[SavePlanFieldNames.IR_ISFACTORY]163 != ir_isfactory164 ):165 sorted_sampleSetItems = self.prepopulatedFields[166 BarcodeBySampleFieldNames.SAMPLESET_ITEMS167 ]168 for row in self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]:169 row[SavePlanFieldNames.IR_WORKFLOW] = ir_workflow170 row[SavePlanFieldNames.IR_ISFACTORY] = ir_isfactory171 sampleset_item = [172 item173 for item in sorted_sampleSetItems174 if item.sample.displayedName == row["sampleName"]175 ]176 if len(sampleset_item) > 0:177 row[178 SavePlanFieldNames.IR_SAMPLE_COLLECTION_DATE179 ] = sampleset_item[0].sampleCollectionDate180 row[181 SavePlanFieldNames.IR_SAMPLE_RECEIPT_DATE182 ] = sampleset_item[0].sampleReceiptDate183 row[SavePlanFieldNames.IR_GENDER] = sampleset_item[0].gender184 row[SavePlanFieldNames.IR_POPULATION] = sampleset_item[185 0186 ].population187 row[SavePlanFieldNames.IR_MOUSE_STRAINS] = sampleset_item[188 0189 ].mouseStrains190 row[SavePlanFieldNames.IR_RELATION_ROLE] = sampleset_item[191 0192 ].relationshipRole193 row[SavePlanFieldNames.IR_SET_ID] = sampleset_item[194 0195 ].relationshipGroup196 row[SavePlanFieldNames.IR_CANCER_TYPE] = sampleset_item[197 0198 ].cancerType199 row[SavePlanFieldNames.IR_CELLULARITY_PCT] = sampleset_item[200 0201 ].cellularityPct202 row[SavePlanFieldNames.IR_BIOPSY_DAYS] = sampleset_item[203 0204 ].biopsyDays205 row[SavePlanFieldNames.IR_CELL_NUM] = sampleset_item[206 0207 ].cellNum208 row[SavePlanFieldNames.IR_COUPLE_ID] = sampleset_item[209 0210 ].coupleId211 row[SavePlanFieldNames.IR_EMBRYO_ID] = sampleset_item[212 0213 ].embryoId214 self.savedFields[SavePlanFieldNames.SAMPLES_TABLE] = json.dumps(215 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST],216 cls=DjangoJSONEncoder,217 )218 self.prepopulatedFields[SavePlanFieldNames.IR_WORKFLOW] = ir_workflow219 self.prepopulatedFields[SavePlanFieldNames.IR_ISFACTORY] = ir_isfactory220 self.prepopulatedFields[SavePlanFieldNames.SELECTED_IR] = ir_account_id221 if (222 updated_step.getStepName() == StepNames.APPLICATION223 and updated_step.savedObjects[ApplicationFieldNames.APPL_PRODUCT]224 ):225 self.savedObjects[226 SavePlanFieldNames.APPL_PRODUCT227 ] = updated_step.savedObjects[ApplicationFieldNames.APPL_PRODUCT]228 def validateField(self, field_name, new_field_value):229 self.validationErrors.pop(field_name, None)230 errors = None231 if field_name == SavePlanFieldNames.CHIP_BARCODE_LABEL:232 errors = validate_chipBarcode(233 new_field_value,234 field_label=_("workflow.step.sample.fields.chipBarcodeLabel.label"),235 )236 if errors:237 self.validationErrors[field_name] = "\n".join(errors)238 if field_name == SavePlanFieldNames.BARCODE_SAMPLE_TUBE_LABEL:239 errors = validate_sample_tube_label(240 new_field_value,241 field_label=_(242 "workflow.step.sample.fields.barcodeSampleTubeLabel.label"243 ),244 )245 if errors:246 self.validationErrors[field_name] = "\n".join(errors)247 # if the plan has been sequenced, do not enforce the target bed file to be selected248 planStatus = self.getDefaultSectionPrepopulatedFieldDict().get("planStatus", "")249 if field_name == SavePlanFieldNames.SAMPLES_TABLE:250 sample_table_list = json.loads(new_field_value)251 samples_errors = []252 applProduct = self.savedObjects[SavePlanFieldNames.APPL_PRODUCT]253 # applProduct object is not saved yet254 if applProduct:255 isTargetRegionSelectionRequired = (256 applProduct.isTargetRegionBEDFileSelectionRequiredForRefSelection257 )258 else:259 isTargetRegionSelectionRequired = False260 applicationGroupName = self.prepopulatedFields[261 SavePlanFieldNames.APPLICATION_GROUP_NAME262 ]263 for row in sample_table_list:264 sample_name = row.get(SavePlanFieldNames.SAMPLE_NAME, "").strip()265 if sample_name:266 sample_nucleotideType = row.get(267 SavePlanFieldNames.BARCODE_SAMPLE_NUCLEOTIDE_TYPE, ""268 )269 sampleReference = row.get(270 SavePlanFieldNames.BARCODE_SAMPLE_REFERENCE, ""271 )272 sampleTargetRegionBedFile = row.get(273 SavePlanFieldNames.BARCODE_SAMPLE_TARGET_REGION_BED_FILE, ""274 )275 runType = self.prepopulatedFields[SavePlanFieldNames.RUN_TYPE]276 logger.debug(277 "barcode_by_sample_step_data.validateField() sampleName=%s runType=%s; sample_nucleotideType=%s; sampleReference=%s; sampleTargetRegionBedFile=%s"278 % (279 sample_name,280 runType,281 sample_nucleotideType,282 sampleReference,283 sampleTargetRegionBedFile,284 )285 )286 errors = []287 # if the plan has been sequenced, do not enforce the target bed file to be selected288 if planStatus != "run":289 sampleTargetRegionBedFile_label = _(290 "workflow.step.saveplan.bysample.fields.targetRegionBedFile.label"291 ) % {"sampleName": sample_name}292 errors = validate_targetRegionBedFile_for_runType(293 sampleTargetRegionBedFile,294 field_label=sampleTargetRegionBedFile_label,295 runType=runType,296 reference=sampleReference,297 nucleotideType=sample_nucleotideType,298 applicationGroupName=applicationGroupName,299 ) # "Target Regions BED File for %(sampleName)s"300 if errors:301 samples_errors.append("\n".join(errors))302 if samples_errors:303 logger.debug(304 "barcode_by_sample_step_data.validateField() samples_errors=%s"305 % (samples_errors)306 )307 self.validationErrors[field_name] = "\n".join(samples_errors)308 def validateStep(self):309 self.validationErrors.pop(SavePlanFieldNames.NO_BARCODE, None)310 self.validationErrors.pop(SavePlanFieldNames.BAD_BARCODES, None)311 samplesTable = json.loads(self.savedFields[SavePlanFieldNames.SAMPLES_TABLE])312 barcodeSet = self.savedFields[SavePlanFieldNames.BARCODE_SET]313 selectedBarcodes = []314 endBarcodeSet = self.savedFields[SavePlanFieldNames.END_BARCODE_SET]315 selectedEndBarcodes = []316 for row in samplesTable:317 sample_name = row.get(SavePlanFieldNames.SAMPLE_NAME, "").strip()318 if sample_name:319 if barcodeSet:320 selectedBarcodes.append(321 row.get(SavePlanFieldNames.BARCODE_SAMPLE_BARCODE_ID_UI_KEY)322 )323 if endBarcodeSet:324 endBarcode_id_value = row.get(325 SavePlanFieldNames.BARCODE_SAMPLE_END_BARCODE_ID_UI_KEY326 )327 if endBarcode_id_value:328 selectedEndBarcodes.append(endBarcode_id_value)329 if barcodeSet:330 errors = validate_barcode_sample_association(selectedBarcodes, barcodeSet)331 myErrors = convert(errors)332 if myErrors.get("MISSING_BARCODE", ""):333 self.validationErrors[SavePlanFieldNames.NO_BARCODE] = myErrors.get(334 "MISSING_BARCODE", ""335 )336 if myErrors.get("DUPLICATE_BARCODE", ""):337 self.validationErrors[SavePlanFieldNames.BAD_BARCODES] = myErrors.get(338 "DUPLICATE_BARCODE", ""339 )340 if selectedEndBarcodes:341 applProduct = self.savedObjects[SavePlanFieldNames.APPL_PRODUCT]342 if applProduct and applProduct.dualBarcodingRule == "no_reuse":343 errors = validate_barcode_sample_association(344 selectedEndBarcodes, endBarcodeSet, isEndBarcodeExists=True345 )346 myErrors = convert(errors)347 if myErrors.get("DUPLICATE_BARCODE", ""):348 self.validationErrors[349 SavePlanFieldNames.BAD_BARCODES350 ] = myErrors.get("DUPLICATE_BARCODE", "")351 self.prepopulatedFields[SavePlanFieldNames.FIRE_VALIDATION] = "0"352 def updateSavedObjectsFromSavedFields(self):353 # logger.debug("ENTER barcode_by_sample_step_data.updateSavedObjectsFromSavedFields() self.savedFields[SavePlanFieldNames.BARCODE_SET]=%s" %(self.savedFields[SavePlanFieldNames.BARCODE_SET]))354 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST] = json.loads(355 self.savedFields[SavePlanFieldNames.SAMPLES_TABLE]356 )357 self.prepopulatedFields[SavePlanFieldNames.NUM_SAMPLES] = len(358 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]359 )360 self.savedObjects[361 SavePlanFieldNames.IR_PLUGIN_ENTRIES362 ] = update_ir_plugin_from_samples_table(363 self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]364 )365 self.prepopulatedFields[366 SavePlanFieldNames.BARCODE_SAMPLE_TUBE_LABEL367 ] = self.savedFields[SavePlanFieldNames.BARCODE_SAMPLE_TUBE_LABEL]368 self.prepopulatedFields[369 SavePlanFieldNames.CHIP_BARCODE_LABEL370 ] = self.savedFields[SavePlanFieldNames.CHIP_BARCODE_LABEL]371 if self.savedFields[SavePlanFieldNames.BARCODE_SET]:372 # logger.debug("barcode_by_sample_step_data.updateSavedObjectsFromSavedFields() BARCODE_SET self.savedFields=%s" %(self.savedFields))373 # logger.debug("barcode_by_sample_step_data.updateSavedObjectsFromSavedFields() BARCODE_SET self=%s" %(self))374 planReference = self.prepopulatedFields[SavePlanFieldNames.PLAN_REFERENCE]375 planHotSpotRegionBedFile = self.prepopulatedFields[376 SavePlanFieldNames.PLAN_HOTSPOT_REGION_BED_FILE377 ]378 planTargetRegionBedFile = self.prepopulatedFields[379 SavePlanFieldNames.PLAN_TARGET_REGION_BED_FILE380 ]381 logger.debug(382 "barcode_by_sample_step_data.updateSavedObjectsFromSavedFields() BARCODE_SET PLAN_REFERENCE=%s; TARGET_REGION=%s; HOTSPOT_REGION=%s;"383 % (planReference, planTargetRegionBedFile, planHotSpotRegionBedFile)384 )385 reference_step_helper = self.savedObjects[386 SavePlanFieldNames.REFERENCE_STEP_HELPER387 ]388 endBarcodeKit = self.savedFields[SavePlanFieldNames.END_BARCODE_SET]389 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE] = {}390 for row in self.savedObjects[SavePlanFieldNames.SAMPLES_TABLE_LIST]:391 sample_name = row.get(SavePlanFieldNames.SAMPLE_NAME, "").strip()392 if sample_name:393 id_str = row[SavePlanFieldNames.BARCODE_SAMPLE_BARCODE_ID_UI_KEY]394 end_id_str = row[395 SavePlanFieldNames.BARCODE_SAMPLE_END_BARCODE_ID_UI_KEY396 ]397 # update barcodedSamples dict398 if (399 sample_name400 not in self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE]401 ):402 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][403 sample_name404 ] = {405 KitsFieldNames.BARCODES: [],406 SavePlanFieldNames.BARCODE_SAMPLE_INFO: {},407 SavePlanFieldNames.DUAL_BARCODES_DB_KEY: [],408 }409 sample_nucleotideType = row.get(410 SavePlanFieldNames.BARCODE_SAMPLE_NUCLEOTIDE_TYPE, ""411 )412 sampleReference = row.get(413 SavePlanFieldNames.BARCODE_SAMPLE_REFERENCE, ""414 )415 sampleHotSpotRegionBedFile = row.get(416 SavePlanFieldNames.BARCODE_SAMPLE_HOTSPOT_REGION_BED_FILE, ""417 )418 sampleTargetRegionBedFile = row.get(419 SavePlanFieldNames.BARCODE_SAMPLE_TARGET_REGION_BED_FILE, ""420 )421 runType = self.prepopulatedFields[SavePlanFieldNames.RUN_TYPE]422 # logger.debug("barcode_by_sample_step_data SETTING reference step helper runType=%s; sample_nucleotideType=%s; sampleReference=%s" %(runType, sample_nucleotideType, sampleReference))423 if not sample_nucleotideType:424 applicationGroupName = self.prepopulatedFields[425 SavePlanFieldNames.APPLICATION_GROUP_NAME426 ]427 planNucleotideType = self._get_nucleotideType_barcodedSamples(428 appGroup=applicationGroupName, runType=runType429 )430 if planNucleotideType:431 sample_nucleotideType = planNucleotideType432 sseBedFile = ""433 if reference_step_helper:434 sseBedFile = reference_step_helper.get_sseBedFile(435 sampleTargetRegionBedFile436 )437 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][438 sample_name439 ][KitsFieldNames.BARCODES].append(id_str)440 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][441 sample_name442 ][SavePlanFieldNames.BARCODE_SAMPLE_INFO][id_str] = {443 SavePlanFieldNames.EXTERNAL_ID: row.get(444 SavePlanFieldNames.SAMPLE_EXTERNAL_ID, ""445 ),446 SavePlanFieldNames.DESCRIPTION: row.get(447 SavePlanFieldNames.SAMPLE_DESCRIPTION, ""448 ),449 SavePlanFieldNames.BARCODE_SAMPLE_NUCLEOTIDE_TYPE: sample_nucleotideType,450 SavePlanFieldNames.BARCODE_SAMPLE_REFERENCE: sampleReference,451 SavePlanFieldNames.BARCODE_SAMPLE_TARGET_REGION_BED_FILE: sampleTargetRegionBedFile,452 SavePlanFieldNames.BARCODE_SAMPLE_HOTSPOT_REGION_BED_FILE: sampleHotSpotRegionBedFile,453 SavePlanFieldNames.BARCODE_SAMPLE_SSE_BED_FILE: sseBedFile,454 SavePlanFieldNames.BARCODE_SAMPLE_END_BARCODE_DB_KEY: row.get(455 SavePlanFieldNames.BARCODE_SAMPLE_END_BARCODE_ID_UI_KEY, ""456 ),457 SavePlanFieldNames.BARCODE_SAMPLE_CONTROL_SEQ_TYPE: row.get(458 SavePlanFieldNames.BARCODE_SAMPLE_CONTROL_SEQ_TYPE, ""459 ),460 SavePlanFieldNames.BARCODE_SAMPLE_CONTROL_TYPE: row.get(461 SavePlanFieldNames.BARCODE_SAMPLE_CONTROL_TYPE, ""462 ),463 }464 if endBarcodeKit and id_str:465 if end_id_str:466 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][467 sample_name468 ][SavePlanFieldNames.DUAL_BARCODES_DB_KEY].append(469 id_str470 + PlannedExperiment.get_dualBarcodes_delimiter()471 + end_id_str472 )473 else:474 self.savedObjects[SavePlanFieldNames.SAMPLE_TO_BARCODE][475 sample_name476 ][SavePlanFieldNames.DUAL_BARCODES_DB_KEY].append(id_str)477 def _get_nucleotideType_barcodedSamples(self, appGroup=None, runType=None):478 value = ""479 runTypeObjs = RunType.objects.filter(runType=runType)480 if runTypeObjs:481 value = runTypeObjs[0].nucleotideType.upper()482 if value not in ["DNA", "RNA"] and appGroup:483 value = appGroup...

Full Screen

Full Screen

analysis_params_step_data.py

Source:analysis_params_step_data.py Github

copy

Full Screen

1# Copyright (C) 2015 Ion Torrent Systems, Inc. All Rights Reserved2from django.utils.translation import ugettext as _3from iondb.rundb.plan.page_plan.abstract_step_data import AbstractStepData4from django.conf import settings5from iondb.utils import validation6from iondb.rundb.models import AnalysisArgs7from iondb.rundb.plan.page_plan.step_names import StepNames8from iondb.rundb.plan.page_plan.application_step_data import ApplicationFieldNames9from iondb.rundb.plan.page_plan.kits_step_data import KitsFieldNames10from iondb.rundb.plan.page_plan.step_helper_types import StepHelperType11import logging12logger = logging.getLogger(__name__)13class AnalysisParamsFieldNames:14 # AP_DICT = "analysisParamsDict"15 AP_ENTRIES = "analysisParamsEntries"16 AP_DISPLAYED_NAMES = "analysisParamsNames"17 AP_ENTRY_SELECTED = "analysisParamsEntrySelected"18 AP_CUSTOM = "analysisParamsCustom"19 AP_ENTRY_PREVIOUSLY_SELECTED = "analysisParamsEntryPreviouslySelected"20 AP_ENTRY_SYSTEM_SELECTED = "analysisParamsEntrySystemSelected"21 AP_ENTRY_SELECTED_VALUE = _(22 "workflow.step.analysisparams.fields.analysis_params.choice.AP_ENTRY_SELECTED_VALUE"23 ) # "<Previous custom selection>"24 AP_ENTRY_PREVIOUSLY_SELECTED_VALUE = _(25 "workflow.step.analysisparams.fields.analysis_params.choice.AP_ENTRY_PREVIOUSLY_SELECTED_VALUE"26 ) # "<Selection before chip/kits selection change>"27 AP_ENTRY_BEST_MATCH_PLAN_VALUE = _(28 "workflow.step.analysisparams.fields.analysis_params.choice.AP_ENTRY_BEST_MATCH_PLAN_VALUE"29 ) # "System default for this plan"30 AP_ENTRY_BEST_MATCH_TEMPLATE_VALUE = _(31 "workflow.step.analysisparams.fields.analysis_params.choice.AP_ENTRY_BEST_MATCH_TEMPLATE_VALUE"32 ) # "System default for this template"33 AP_BEADFIND_SELECTED = "beadFindSelected"34 AP_ANALYSISARGS_SELECTED = "analysisArgsSelected"35 AP_PREBASECALLER_SELECTED = "preBaseCallerSelected"36 AP_CALIBRATE_SELECTED = "calibrateSelected"37 AP_BASECALLER_SELECTED = "baseCallerSelected"38 AP_ALIGNMENT_SELECTED = "alignmentSelected"39 AP_IONSTATS_SELECTED = "ionStatsSelected"40 AP_THUMBNAIL_BEADFIND_SELECTED = "thumbnailBeadFindSelected"41 AP_THUMBNAIL_ANALYSISARGS_SELECTED = "thumbnailAnalysisArgsSelected"42 AP_THUMBNAIL_PREBASECALLER_SELECTED = "thumbnailPreBaseCallerSelected"43 AP_THUMBNAIL_CALIBRATE_SELECTED = "thumbnailCalibrateSelected"44 AP_THUMBNAIL_BASECALLER_SELECTED = "thumbnailBaseCallerSelected"45 AP_THUMBNAIL_ALIGNMENT_SELECTED = "thumbnailAlignmentSelected"46 AP_THUMBNAIL_IONSTATS_SELECTED = "thumbnailIonStatsSelected"47 APPL_PRODUCT = "applProduct"48 RUN_TYPE = "runType"49 APPLICATION_GROUP_NAME = "applicationGroupName"50 CHIP_TYPE = "chipType"51 SAMPLE_PREPARATION_KIT = "samplePreparationKit"52 LIBRARY_KIT_NAME = "librarykitname"53 TEMPLATE_KIT_NAME = "templatekitname"54 SEQUENCE_KIT_NAME = "sequencekitname"55 CATEGORIES = "categories"56class AnalysisParamsStepData(AbstractStepData):57 def __init__(self, sh_type):58 super(AnalysisParamsStepData, self).__init__(sh_type)59 self.resourcePath = "rundb/plan/page_plan/page_plan_analysis_params.html"60 self._dependsOn.append(StepNames.APPLICATION)61 self._dependsOn.append(StepNames.KITS)62 analysisParamsEntries = list(AnalysisArgs.objects.all().filter(active=True))63 self.prepopulatedFields[64 AnalysisParamsFieldNames.AP_ENTRIES65 ] = analysisParamsEntries66 self.prepopulatedFields[AnalysisParamsFieldNames.AP_DISPLAYED_NAMES] = [67 ap.description for ap in analysisParamsEntries68 ]69 # self.prepopulatedFields[AnalysisParamsFieldNames.AP_ENTRY_BEST_MATCH] = None70 self.savedObjects[AnalysisParamsFieldNames.AP_ENTRY_SELECTED] = ""71 self.savedObjects[AnalysisParamsFieldNames.AP_ENTRY_PREVIOUSLY_SELECTED] = ""72 self.savedFields[AnalysisParamsFieldNames.AP_BEADFIND_SELECTED] = ""73 self.savedFields[AnalysisParamsFieldNames.AP_ANALYSISARGS_SELECTED] = ""74 self.savedFields[AnalysisParamsFieldNames.AP_PREBASECALLER_SELECTED] = ""75 self.savedFields[AnalysisParamsFieldNames.AP_CALIBRATE_SELECTED] = ""76 self.savedFields[AnalysisParamsFieldNames.AP_BASECALLER_SELECTED] = ""77 self.savedFields[AnalysisParamsFieldNames.AP_ALIGNMENT_SELECTED] = ""78 self.savedFields[AnalysisParamsFieldNames.AP_IONSTATS_SELECTED] = ""79 self.savedFields[AnalysisParamsFieldNames.AP_THUMBNAIL_BEADFIND_SELECTED] = ""80 self.savedFields[81 AnalysisParamsFieldNames.AP_THUMBNAIL_ANALYSISARGS_SELECTED82 ] = ""83 self.savedFields[84 AnalysisParamsFieldNames.AP_THUMBNAIL_PREBASECALLER_SELECTED85 ] = ""86 self.savedFields[AnalysisParamsFieldNames.AP_THUMBNAIL_CALIBRATE_SELECTED] = ""87 self.savedFields[AnalysisParamsFieldNames.AP_THUMBNAIL_BASECALLER_SELECTED] = ""88 self.savedFields[AnalysisParamsFieldNames.AP_THUMBNAIL_ALIGNMENT_SELECTED] = ""89 self.savedFields[AnalysisParamsFieldNames.AP_THUMBNAIL_IONSTATS_SELECTED] = ""90 self.savedFields[AnalysisParamsFieldNames.AP_CUSTOM] = "False"91 self.prepopulatedFields[AnalysisParamsFieldNames.APPL_PRODUCT] = ""92 self.prepopulatedFields[AnalysisParamsFieldNames.RUN_TYPE] = ""93 self.prepopulatedFields[AnalysisParamsFieldNames.APPLICATION_GROUP_NAME] = ""94 self.prepopulatedFields[AnalysisParamsFieldNames.CATEGORIES] = ""95 self.prepopulatedFields[AnalysisParamsFieldNames.CHIP_TYPE] = ""96 self.prepopulatedFields[AnalysisParamsFieldNames.SAMPLE_PREPARATION_KIT] = ""97 self.prepopulatedFields[AnalysisParamsFieldNames.LIBRARY_KIT_NAME] = ""98 self.prepopulatedFields[AnalysisParamsFieldNames.TEMPLATE_KIT_NAME] = ""99 self.prepopulatedFields[AnalysisParamsFieldNames.SEQUENCE_KIT_NAME] = ""100 self.sh_type = sh_type101 def getStepName(self):102 return StepNames.ANALYSIS_PARAMS103 def updateSavedObjectsFromSavedFields(self):104 pass105 def validate(self):106 pass107 def hasErrors(self):108 """109 This step is a section of another step. It is crucial not to advertise having errors or110 user will be re-directed to analysis args' resourcePath for error correction.111 Let the parent step take care of the error broadcasting.112 """113 return False114 def validateField(self, field_name, new_field_value):115 pass116 def validateField_in_section(self, field_name, new_field_value):117 """118 field validation for a step that acts as a section to another step119 """120 logger.debug(121 "at analysis_params_step_data.validateField_in_section field_name=%s; new_field_value=%s"122 % (field_name, new_field_value)123 )124 pass125 def updateFromStep(self, updated_step):126 if updated_step.getStepName() not in self._dependsOn:127 return128 # reset best match if key attributes on other chevrons have changed129 needToRefreshSelectionList = False130 if (131 updated_step.getStepName() == StepNames.APPLICATION132 and updated_step.savedObjects[ApplicationFieldNames.APPL_PRODUCT]133 ):134 applProduct = updated_step.savedObjects[ApplicationFieldNames.APPL_PRODUCT]135 logger.debug(136 "analysis_params_step_data - APPL CHEVRON... applProduct %s; runType=%s; applicationGroupName=%s"137 % (138 applProduct.productCode,139 updated_step.savedObjects[ApplicationFieldNames.RUN_TYPE].runType,140 updated_step.savedFields[141 ApplicationFieldNames.APPLICATION_GROUP_NAME142 ],143 )144 )145 if (146 self.prepopulatedFields[AnalysisParamsFieldNames.RUN_TYPE]147 != updated_step.savedObjects[ApplicationFieldNames.RUN_TYPE].runType148 or self.prepopulatedFields[149 AnalysisParamsFieldNames.APPLICATION_GROUP_NAME150 ]151 != updated_step.savedFields[152 ApplicationFieldNames.APPLICATION_GROUP_NAME153 ]154 ):155 needToRefreshSelectionList = True156 self.prepopulatedFields[AnalysisParamsFieldNames.APPL_PRODUCT] = ""157 self.prepopulatedFields[158 AnalysisParamsFieldNames.RUN_TYPE159 ] = updated_step.savedObjects[ApplicationFieldNames.RUN_TYPE].runType160 self.prepopulatedFields[161 AnalysisParamsFieldNames.APPLICATION_GROUP_NAME162 ] = updated_step.savedFields[ApplicationFieldNames.APPLICATION_GROUP_NAME]163 elif updated_step.getStepName() == StepNames.KITS:164 if (165 self.prepopulatedFields[AnalysisParamsFieldNames.CHIP_TYPE]166 != updated_step.savedFields[KitsFieldNames.CHIP_TYPE]167 or self.prepopulatedFields[168 AnalysisParamsFieldNames.SAMPLE_PREPARATION_KIT169 ]170 != updated_step.savedFields[KitsFieldNames.SAMPLE_PREPARATION_KIT]171 or self.prepopulatedFields[AnalysisParamsFieldNames.LIBRARY_KIT_NAME]172 != updated_step.savedFields[KitsFieldNames.LIBRARY_KIT_NAME]173 or self.prepopulatedFields[AnalysisParamsFieldNames.TEMPLATE_KIT_NAME]174 != updated_step.savedFields[KitsFieldNames.TEMPLATE_KIT_NAME]175 or self.prepopulatedFields[AnalysisParamsFieldNames.SEQUENCE_KIT_NAME]176 != updated_step.savedFields[KitsFieldNames.SEQUENCE_KIT_NAME]177 ):178 needToRefreshSelectionList = True179 self.prepopulatedFields[AnalysisParamsFieldNames.CHIP_TYPE] = (180 updated_step.savedFields[KitsFieldNames.CHIP_TYPE]181 if updated_step.savedFields[KitsFieldNames.CHIP_TYPE]182 else ""183 )184 self.prepopulatedFields[185 AnalysisParamsFieldNames.SAMPLE_PREPARATION_KIT186 ] = updated_step.savedFields[KitsFieldNames.SAMPLE_PREPARATION_KIT]187 self.prepopulatedFields[188 AnalysisParamsFieldNames.LIBRARY_KIT_NAME189 ] = updated_step.savedFields[KitsFieldNames.LIBRARY_KIT_NAME]190 self.prepopulatedFields[191 AnalysisParamsFieldNames.TEMPLATE_KIT_NAME192 ] = updated_step.savedFields[KitsFieldNames.TEMPLATE_KIT_NAME]193 self.prepopulatedFields[194 AnalysisParamsFieldNames.SEQUENCE_KIT_NAME195 ] = updated_step.savedFields[KitsFieldNames.SEQUENCE_KIT_NAME]196 if needToRefreshSelectionList:197 self._update_analysisParamsData_selection_list(198 self.prepopulatedFields[AnalysisParamsFieldNames.CHIP_TYPE],199 self.prepopulatedFields[AnalysisParamsFieldNames.SEQUENCE_KIT_NAME],200 self.prepopulatedFields[AnalysisParamsFieldNames.TEMPLATE_KIT_NAME],201 self.prepopulatedFields[AnalysisParamsFieldNames.LIBRARY_KIT_NAME],202 self.prepopulatedFields[203 AnalysisParamsFieldNames.SAMPLE_PREPARATION_KIT204 ],205 self.prepopulatedFields[AnalysisParamsFieldNames.RUN_TYPE],206 self.prepopulatedFields[207 AnalysisParamsFieldNames.APPLICATION_GROUP_NAME208 ],209 self.prepopulatedFields[AnalysisParamsFieldNames.CATEGORIES],210 )211 def _update_analysisParamsData_selection_list(212 self,213 chipType,214 sequenceKitName,215 templatingKitName,216 libraryKitName,217 samplePrepKitName,218 applicationType,219 applicationGroupName,220 applicationCategories,221 ):222 possible_match_entries = AnalysisArgs.possible_matches(223 chipType,224 sequenceKitName,225 templatingKitName,226 libraryKitName,227 samplePrepKitName,228 None,229 applicationType,230 applicationGroupName,231 applicationCategories,232 )233 logger.debug(234 "_update_analysisParamsData_selection_list() applicationType=%s; applicationGroupName=%s; applicationCategories=%s"235 % (applicationType, applicationGroupName, applicationCategories)236 )237 best_match_entry = AnalysisArgs.best_match(238 chipType,239 sequenceKitName,240 templatingKitName,241 libraryKitName,242 samplePrepKitName,243 None,244 applicationType,245 applicationGroupName,246 applicationCategories,247 )248 if best_match_entry:249 isTemplate = self.sh_type in StepHelperType.TEMPLATE_TYPES250 for ap in possible_match_entries:251 if ap.name == best_match_entry.name:252 ap.name = (253 AnalysisParamsFieldNames.AP_ENTRY_BEST_MATCH_TEMPLATE_VALUE254 if isTemplate255 else AnalysisParamsFieldNames.AP_ENTRY_BEST_MATCH_PLAN_VALUE256 )257 ap.best_match = True258 if self.savedFields[AnalysisParamsFieldNames.AP_CUSTOM] == "False":259 previously_selected_analysisArgs = {260 "description": AnalysisParamsFieldNames.AP_ENTRY_PREVIOUSLY_SELECTED_VALUE,261 "name": "",262 "beadfindargs": self.savedFields[263 AnalysisParamsFieldNames.AP_BEADFIND_SELECTED264 ],265 "analysisargs": self.savedFields[266 AnalysisParamsFieldNames.AP_ANALYSISARGS_SELECTED267 ],268 "prebasecallerargs": self.savedFields[269 AnalysisParamsFieldNames.AP_PREBASECALLER_SELECTED270 ],271 "calibrateargs": self.savedFields[272 AnalysisParamsFieldNames.AP_CALIBRATE_SELECTED273 ],274 "basecallerargs": self.savedFields[275 AnalysisParamsFieldNames.AP_BASECALLER_SELECTED276 ],277 "alignmentargs": self.savedFields[278 AnalysisParamsFieldNames.AP_ALIGNMENT_SELECTED279 ],280 "ionstatsargs": self.savedFields[281 AnalysisParamsFieldNames.AP_IONSTATS_SELECTED282 ],283 "thumbnailbeadfindargs": self.savedFields[284 AnalysisParamsFieldNames.AP_THUMBNAIL_BEADFIND_SELECTED285 ],286 "thumbnailanalysisargs": self.savedFields[287 AnalysisParamsFieldNames.AP_THUMBNAIL_ANALYSISARGS_SELECTED288 ],289 "prethumbnailbasecallerargs": self.savedFields[290 AnalysisParamsFieldNames.AP_THUMBNAIL_PREBASECALLER_SELECTED291 ],292 "thumbnailcalibrateargs": self.savedFields[293 AnalysisParamsFieldNames.AP_THUMBNAIL_CALIBRATE_SELECTED294 ],295 "thumbnailbasecallerargs": self.savedFields[296 AnalysisParamsFieldNames.AP_THUMBNAIL_BASECALLER_SELECTED297 ],298 "thumbnailalignmentargs": self.savedFields[299 AnalysisParamsFieldNames.AP_THUMBNAIL_ALIGNMENT_SELECTED300 ],301 "thumbnailionstatsargs": self.savedFields[302 AnalysisParamsFieldNames.AP_THUMBNAIL_IONSTATS_SELECTED303 ],304 }305 self.savedObjects[306 AnalysisParamsFieldNames.AP_ENTRY_PREVIOUSLY_SELECTED307 ] = previously_selected_analysisArgs308 best_match_entry.description = (309 AnalysisParamsFieldNames.AP_ENTRY_SELECTED_VALUE310 )311 self.savedObjects[312 AnalysisParamsFieldNames.AP_ENTRY_SELECTED313 ] = best_match_entry314 self.savedFields[315 AnalysisParamsFieldNames.AP_BEADFIND_SELECTED316 ] = best_match_entry.beadfindargs317 self.savedFields[318 AnalysisParamsFieldNames.AP_ANALYSISARGS_SELECTED319 ] = best_match_entry.analysisargs320 self.savedFields[321 AnalysisParamsFieldNames.AP_PREBASECALLER_SELECTED322 ] = best_match_entry.prebasecallerargs323 self.savedFields[324 AnalysisParamsFieldNames.AP_CALIBRATE_SELECTED325 ] = best_match_entry.calibrateargs326 self.savedFields[327 AnalysisParamsFieldNames.AP_BASECALLER_SELECTED328 ] = best_match_entry.basecallerargs329 self.savedFields[330 AnalysisParamsFieldNames.AP_ALIGNMENT_SELECTED331 ] = best_match_entry.alignmentargs332 self.savedFields[333 AnalysisParamsFieldNames.AP_IONSTATS_SELECTED334 ] = best_match_entry.ionstatsargs335 self.savedFields[336 AnalysisParamsFieldNames.AP_THUMBNAIL_BEADFIND_SELECTED337 ] = best_match_entry.thumbnailbeadfindargs338 self.savedFields[339 AnalysisParamsFieldNames.AP_THUMBNAIL_ANALYSISARGS_SELECTED340 ] = best_match_entry.thumbnailanalysisargs341 self.savedFields[342 AnalysisParamsFieldNames.AP_THUMBNAIL_PREBASECALLER_SELECTED343 ] = best_match_entry.prethumbnailbasecallerargs344 self.savedFields[345 AnalysisParamsFieldNames.AP_THUMBNAIL_CALIBRATE_SELECTED346 ] = best_match_entry.thumbnailcalibrateargs347 self.savedFields[348 AnalysisParamsFieldNames.AP_THUMBNAIL_BASECALLER_SELECTED349 ] = best_match_entry.thumbnailbasecallerargs350 self.savedFields[351 AnalysisParamsFieldNames.AP_THUMBNAIL_ALIGNMENT_SELECTED352 ] = best_match_entry.thumbnailalignmentargs353 self.savedFields[354 AnalysisParamsFieldNames.AP_THUMBNAIL_IONSTATS_SELECTED355 ] = best_match_entry.thumbnailionstatsargs356 else:357 logger.debug(358 "analysis_params_step_data._update_analysisParamsData_selection_list() BEST MATCH NOT FOUND!!! chipType=%s;"359 % (chipType)360 )361 self.prepopulatedFields[362 AnalysisParamsFieldNames.AP_ENTRIES363 ] = possible_match_entries364 self.prepopulatedFields[AnalysisParamsFieldNames.AP_DISPLAYED_NAMES] = [365 ap.description for ap in possible_match_entries...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run pandera automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful