Luigi is a Python module that helps you build complex pipelines of batch jobs. It handles dependency resolution, workflow management, visualization etc. It also comes with Hadoop support built in.
This report summarizes scanner evidence for spotify/luigi, a Python project with 18,783 GitHub stars. SynthScan examined 71,403 lines of code across 319 source files, recording 1468 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 25.5 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 1243 finding(s).
Are imports declared and package/API names verified? 107 finding(s).
Are wrappers, guards, and repeated structures necessary? 1047 finding(s).
Which changes need focused human review? 1468 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1468 distinct pattern matches across 19 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | test/notifications_test.py | 36 | def test_normalize_images_handles_none_list_and_tuple(self): | CODE |
| LOW⚡ | test/notifications_test.py | 41 | def test_iter_images_handles_none_list_and_tuple(self): | CODE |
| LOW⚡ | test/notifications_test.py | 46 | def test_generate_email_attaches_multiple_images(self): | CODE |
| LOW⚡ | test/notifications_test.py | 193 | def test_email_disabled_reason_format_none(self): | CODE |
| LOW⚡ | test/notifications_test.py | 197 | def test_email_disabled_reason_force_send(self): | CODE |
| LOW⚡ | test/notifications_test.py | 201 | def test_email_disabled_reason_tty(self): | CODE |
| LOW⚡ | test/notifications_test.py | 206 | def test_email_disabled_reason_default_allows_sending(self): | CODE |
| LOW⚡ | test/notifications_test.py | 210 | def test_generate_unicode_email(self): | CODE |
| LOW⚡ | test/notifications_test.py | 219 | def test_generate_email_with_multiple_images(self): | CODE |
| LOW | test/notifications_test.py | 74 | def test_iter_images_empty_list_returns_empty_iterator(self): | CODE |
| LOW | test/notifications_test.py | 248 | def test_generate_email_with_single_image_png_kwarg(self): | CODE |
| LOW | test/notifications_test.py | 272 | def test_generate_email_with_empty_images_list(self): | CODE |
| LOW | test/notifications_test.py | 285 | def test_generate_email_with_tuple_images(self): | CODE |
| LOW | test/notifications_test.py | 314 | def test_generate_email_with_none_images(self): | CODE |
| LOW | test/notifications_test.py | 327 | def test_generate_email_with_nonexistent_path_raises(self): | CODE |
| LOW | test/notifications_test.py | 337 | def test_generate_email_with_generator_images_raises_typeerror(self): | CODE |
| LOW | test/notifications_test.py | 443 | def test_sends_smtp_email_with_images_png(self): | CODE |
| LOW | test/notifications_test.py | 481 | def test_sends_smtp_email_without_tls(self): | CODE |
| LOW | test/notifications_test.py | 514 | def test_sends_smtp_email_exceptions(self): | CODE |
| LOW | test/notifications_test.py | 549 | def test_sends_sendgrid_email(self): | CODE |
| LOW | test/notifications_test.py | 562 | def test_sends_sendgrid_email_with_multiple_images(self): | CODE |
| LOW | test/notifications_test.py | 592 | def test_sendgrid_with_empty_images_list_does_not_attach(self): | CODE |
| LOW | test/notifications_test.py | 599 | def test_sends_sendgrid_email_with_image_png_kwarg(self): | CODE |
| LOW | test/notifications_test.py | 652 | def test_sends_ses_email_with_images_png(self): | CODE |
| LOW | test/notifications_test.py | 705 | def test_sns_subject_is_shortened(self): | CODE |
| LOW | test/notifications_test.py | 724 | def test_send_email_sns_ignores_images_png(self): | CODE |
| LOW | test/notifications_test.py | 765 | def test_send_email_forwards_images_png_exactly(self): | CODE |
| LOW | test/notifications_test.py | 783 | def test_send_email_forwards_images_png_to_smtp(self): | CODE |
| LOW | test/notifications_test.py | 800 | def test_send_email_forwards_images_png_to_ses(self): | CODE |
| LOW | test/notifications_test.py | 817 | def test_send_email_forwards_images_png_to_sns(self): | CODE |
| LOW | test/notifications_test.py | 834 | def test_send_email_without_recipients_returns_early(self): | CODE |
| LOW | test/notifications_test.py | 842 | def test_send_email_tuple_none_recipients_returns_early(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 60 | def test_optional_int_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 65 | def test_optional_bool_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 70 | def test_optional_float_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 75 | def test_optional_dict_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 80 | def test_optional_list_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 85 | def test_optional_tuple_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 90 | def test_optional_numerical_parameter_float(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 95 | def test_optional_numerical_parameter_int(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 100 | def test_optional_choice_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 106 | def test_optional_date_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 111 | def test_optional_choice_parameter_int(self): | CODE |
| LOW | test/scheduler_message_test.py | 86 | def test_receive_messages_disabled(self): | CODE |
| LOW | test/scheduler_message_test.py | 103 | def test_send_messages_disabled(self): | CODE |
| LOW⚡ | test/interface_test.py | 67 | def _summary_dict_module_path(): | CODE |
| LOW⚡ | test/interface_test.py | 70 | def test_interface_run_positive_path(self): | CODE |
| LOW⚡ | test/interface_test.py | 75 | def test_interface_run_positive_path_with_detailed_summary_enabled(self): | CODE |
| LOW⚡ | test/interface_test.py | 80 | def test_interface_run_with_add_failure(self): | CODE |
| LOW⚡ | test/interface_test.py | 85 | def test_interface_run_with_add_failure_with_detailed_summary_enabled(self): | CODE |
| LOW⚡ | test/interface_test.py | 90 | def test_interface_run_with_run_failure(self): | CODE |
| LOW⚡ | test/interface_test.py | 95 | def test_interface_run_with_run_failure_with_detailed_summary_enabled(self): | CODE |
| LOW⚡ | test/interface_test.py | 101 | def test_that_status_is_success(self, fake_summary_dict): | CODE |
| LOW⚡ | test/interface_test.py | 108 | def test_that_status_is_success_with_retry(self, fake_summary_dict): | CODE |
| LOW⚡ | test/interface_test.py | 115 | def test_that_status_is_failed_when_there_is_one_failed_task(self, fake_summary_dict): | CODE |
| LOW⚡ | test/interface_test.py | 122 | def test_that_status_is_failed_with_scheduling_failure(self, fake_summary_dict): | CODE |
| LOW⚡ | test/interface_test.py | 131 | def test_that_status_is_scheduling_failed_with_one_scheduling_error(self, fake_summary_dict): | CODE |
| LOW⚡ | test/interface_test.py | 138 | def test_that_status_is_not_run_with_one_task_not_run(self, fake_summary_dict): | CODE |
| LOW⚡ | test/interface_test.py | 145 | def test_that_status_is_missing_ext_with_one_task_with_missing_external_dependency(self, fake_summary_dict): | CODE |
| LOW⚡ | test/interface_test.py | 151 | def test_stops_worker_on_add_exception(self): | CODE |
| 862 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/task_bulk_complete_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/notifications_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/scheduler_message_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/dict_parameter_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/most_common_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/interface_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/dynamic_import_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/task_forwarded_attributes_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/choice_parameter_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/scheduler_api_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/util_previous_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/event_callbacks_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/scheduler_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/clone_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/list_parameter_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/config_env_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/scheduler_parameter_visibilities_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/range_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/set_task_name_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/parameter_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/_mysqldb_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/lock_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/test_sigpipe.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/date_interval_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/decorator_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/scheduler_visualisation_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/recursion_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/worker_external_task_test.py | 1 | # Copyright (c) 2015 | COMMENT |
| LOW | test/local_target_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/target_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/task_running_resources_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/subtask_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/worker_task_process_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/task_history_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/worker_scheduler_com_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/util_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/custom_metrics_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/task_progress_percentage_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/worker_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/helpers_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/test_ssh.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/factorial_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/worker_task_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/db_task_history_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/fib_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/config_toml_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/_test_ftp.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/task_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/wrap_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/instance_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/import_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/safe_extractor_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/rpc_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/retcodes_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/other_module.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/simulate_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/worker_parallel_scheduling_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/server_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/date_parameter_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | test/numerical_parameter_test.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| 174 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/interface_test.py | 198 | except (Exception, SystemExit): | CODE |
| HIGH | test/interface_test.py | 206 | except Exception: | CODE |
| HIGH | test/local_target_test.py | 225 | except ValueError: | CODE |
| HIGH | test/simulate_test.py | 39 | except OSError: | CODE |
| HIGH | test/simulate_test.py | 59 | except OSError: | CODE |
| HIGH | test/contrib/redshift_test.py | 217 | except KeyError: | CODE |
| HIGH | test/contrib/test_ssh.py | 69 | except Exception: | CODE |
| HIGH | test/contrib/lsf_test.py | 98 | except OSError: | CODE |
| HIGH | test/contrib/sge_test.py | 99 | except OSError: | CODE |
| HIGH | test/contrib/spark_test.py | 274 | except KeyboardInterrupt: | CODE |
| HIGH | test/contrib/external_program_test.py | 168 | except KeyboardInterrupt: | CODE |
| HIGH | test/contrib/hdfs_test.py | 58 | except BaseException: | CODE |
| HIGH | test/visualiser/visualiser_test.py | 52 | except AssertionError: | CODE |
| HIGH | luigi/worker.py | 654 | except BaseException: | CODE |
| HIGH | luigi/worker.py | 658 | except BaseException: | CODE |
| HIGH | luigi/worker.py | 662 | except BaseException: | CODE |
| HIGH | luigi/worker.py | 668 | except BaseException: | CODE |
| HIGH | luigi/worker.py | 586 | except AttributeError: | CODE |
| HIGH | luigi/server.py | 222 | except ValueError: | CODE |
| HIGH | luigi/local_target.py | 155 | except OSError: | CODE |
| HIGH | luigi/format.py | 134 | except BaseException: | CODE |
| HIGH | luigi/format.py | 244 | except TypeError: | CODE |
| HIGH | luigi/format.py | 350 | except AttributeError: | CODE |
| HIGH | luigi/format.py | 354 | except AttributeError: | CODE |
| HIGH | luigi/format.py | 400 | except AttributeError: | CODE |
| HIGH | luigi/format.py | 407 | except TypeError: | CODE |
| HIGH | luigi/format.py | 371 | except AttributeError: | CODE |
| HIGH | luigi/mypy.py | 136 | except ValueError: | CODE |
| HIGH | luigi/lock.py | 67 | except IOError: | CODE |
| HIGH | luigi/process.py | 47 | except OSError: | CODE |
| HIGH | luigi/parameter.py | 1006 | except ValueError: | CODE |
| HIGH | luigi/mock.py | 156 | except AttributeError: | CODE |
| HIGH | luigi/contrib/gcs.py | 417 | except OSError: | CODE |
| HIGH | luigi/contrib/hadoop.py | 939 | except OSError: | CODE |
| HIGH | luigi/contrib/simulate.py | 110 | except OSError: | CODE |
| HIGH | luigi/contrib/hive.py | 409 | except FileAlreadyExists: | CODE |
| HIGH | luigi/contrib/postgres.py | 56 | except ImportError: | CODE |
| HIGH | luigi/contrib/postgres.py | 67 | except ImportError: | CODE |
| HIGH | luigi/contrib/ssh.py | 261 | except OSError: | CODE |
| HIGH | luigi/contrib/s3.py | 477 | except ValueError: | CODE |
| HIGH | luigi/contrib/hdfs/format.py | 169 | except AttributeError: | CODE |
| HIGH | doc/conf.py | 50 | except ImportError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/contrib/gcs_test.py | 0 | this is an integration test for the bigquery-luigi binding. this test requires credentials that can access gcs & access | STRING |
| HIGH | test/contrib/dataproc_test.py | 0 | this is an integration test for the bigquery-luigi binding. this test requires credentials that can access gcs & access | STRING |
| HIGH | test/contrib/bigquery_gcloud_test.py | 0 | this is an integration test for the bigquery-luigi binding. this test requires credentials that can access gcs & access | STRING |
| HIGH | luigi/contrib/redshift.py | 0 | this update id will be a unique identifier for this insert on this table. | STRING |
| HIGH | luigi/contrib/sqla.py | 0 | this update id will be a unique identifier for this insert on this table. | STRING |
| HIGH | luigi/contrib/rdbms.py | 0 | this update id will be a unique identifier for this insert on this table. | STRING |
| HIGH | luigi/contrib/gcs.py | 0 | initializes a hdfsflagtarget. :param path: the directory where the files are stored. :type path: str :param client: :typ | STRING |
| HIGH | luigi/contrib/s3.py | 0 | initializes a hdfsflagtarget. :param path: the directory where the files are stored. :type path: str :param client: :typ | STRING |
| HIGH | luigi/contrib/hdfs/target.py | 0 | initializes a hdfsflagtarget. :param path: the directory where the files are stored. :type path: str :param client: :typ | STRING |
| HIGH | luigi/contrib/sqla.py | 0 | create marker table if it doesn't exist. use a separate connection since the transaction might have to be reset. | STRING |
| HIGH | luigi/contrib/mysqldb.py | 0 | create marker table if it doesn't exist. use a separate connection since the transaction might have to be reset. | STRING |
| HIGH | luigi/contrib/postgres.py | 0 | create marker table if it doesn't exist. use a separate connection since the transaction might have to be reset. | STRING |
| HIGH | luigi/contrib/mssqldb.py | 0 | create marker table if it doesn't exist. use a separate connection since the transaction might have to be reset. | STRING |
| HIGH | luigi/contrib/mysqldb.py | 0 | mark this update as complete. important: if the marker table doesn't exist, the connection transaction will be aborted a | STRING |
| HIGH | luigi/contrib/mssqldb.py | 0 | mark this update as complete. important: if the marker table doesn't exist, the connection transaction will be aborted a | STRING |
| HIGH | luigi/contrib/postgres.py | 0 | mark this update as complete. important: if the marker table doesn't exist, the connection transaction will be aborted a | STRING |
| HIGH | examples/elasticsearch_index.py | 0 | returns the target output for this task. in this case, a successful execution of this task will create a file in the loc | STRING |
| HIGH | examples/wordcount.py | 0 | returns the target output for this task. in this case, a successful execution of this task will create a file in the loc | STRING |
| HIGH | examples/dynamic_requirements.py | 0 | returns the target output for this task. in this case, a successful execution of this task will create a file in the loc | STRING |
| HIGH | examples/top_artists.py | 0 | returns the target output for this task. in this case, a successful execution of this task will create a file in the loc | STRING |
| HIGH | examples/terasort.py | 0 | returns the target output for this task. in this case, a successful execution of this task will create a file in the loc | STRING |
| HIGH | examples/spark_als.py | 0 | returns the target output for this task. in this case, a successful execution of this task will create a file in the loc | STRING |
| HIGH | examples/wordcount_hadoop.py | 0 | returns the target output for this task. in this case, a successful execution of this task will create a file in the loc | STRING |
| HIGH | examples/ftp_experiment_outputs.py | 0 | returns the target output for this task. in this case, a successful execution of this task will create a file in the loc | STRING |
| HIGH | examples/wordcount.py | 0 | returns the target output for this task. in this case, it expects a file to be present in hdfs. :return: the target outp | STRING |
| HIGH | examples/wordcount_hadoop.py | 0 | returns the target output for this task. in this case, it expects a file to be present in hdfs. :return: the target outp | STRING |
| HIGH | examples/top_artists.py | 0 | returns the target output for this task. in this case, it expects a file to be present in hdfs. :return: the target outp | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/notifications_test.py | 391 | CODE | |
| LOW | test/notifications_test.py | 543 | CODE | |
| LOW | test/notifications_test.py | 630 | CODE | |
| LOW | test/notifications_test.py | 685 | CODE | |
| LOW | …archive_root/package/submodule_with_absolute_import.py | 18 | CODE | |
| LOW | test/create_packages_archive_root/package/submodule.py | 18 | CODE | |
| LOW | …_packages_archive_root/package/subpackage/submodule.py | 18 | CODE | |
| LOW | luigi/task.py | 23 | CODE | |
| LOW | luigi/task.py | 38 | CODE | |
| LOW | luigi/__init__.py | 21 | CODE | |
| LOW | luigi/__init__.py | 21 | CODE | |
| LOW | luigi/__init__.py | 21 | CODE | |
| LOW | luigi/__init__.py | 21 | CODE | |
| LOW | luigi/__init__.py | 21 | CODE | |
| LOW | luigi/__init__.py | 21 | CODE | |
| LOW | luigi/__init__.py | 21 | CODE | |
| LOW | luigi/__init__.py | 23 | CODE | |
| LOW | luigi/__init__.py | 24 | CODE | |
| LOW | luigi/__init__.py | 25 | CODE | |
| LOW | luigi/__init__.py | 25 | CODE | |
| LOW | luigi/__init__.py | 26 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 27 | CODE | |
| LOW | luigi/__init__.py | 64 | CODE | |
| LOW | luigi/__init__.py | 64 | CODE | |
| LOW | luigi/__init__.py | 65 | CODE | |
| LOW | luigi/__init__.py | 66 | CODE | |
| 18 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/parameter_test.py | 117 | CODE | |
| LOW | test/target_test.py | 287 | CODE | |
| LOW | test/fib_test.py | 39 | CODE | |
| LOW | test/contrib/hadoop_jar_test.py | 92 | CODE | |
| LOW | test/contrib/hadoop_jar_test.py | 95 | CODE | |
| LOW | luigi/worker.py | 172 | CODE | |
| LOW | luigi/worker.py | 514 | CODE | |
| LOW | luigi/worker.py | 772 | CODE | |
| LOW | luigi/worker.py | 832 | CODE | |
| LOW | luigi/worker.py | 1082 | CODE | |
| LOW | luigi/worker.py | 1159 | CODE | |
| LOW | luigi/worker.py | 1204 | CODE | |
| LOW | luigi/metrics.py | 14 | CODE | |
| LOW | luigi/task.py | 953 | CODE | |
| LOW | luigi/task.py | 772 | CODE | |
| LOW | luigi/util.py | 426 | CODE | |
| LOW | luigi/format.py | 55 | CODE | |
| LOW | luigi/mypy.py | 86 | CODE | |
| LOW | luigi/mypy.py | 100 | CODE | |
| LOW | luigi/db_task_history.py | 251 | CODE | |
| LOW | luigi/lock.py | 30 | CODE | |
| LOW | luigi/execution_summary.py | 179 | CODE | |
| LOW | luigi/execution_summary.py | 371 | CODE | |
| LOW | luigi/execution_summary.py | 467 | CODE | |
| LOW | luigi/scheduler.py | 1066 | CODE | |
| LOW | luigi/scheduler.py | 1139 | CODE | |
| LOW | luigi/scheduler.py | 1291 | CODE | |
| LOW | luigi/scheduler.py | 1360 | CODE | |
| LOW | luigi/scheduler.py | 1519 | CODE | |
| LOW | luigi/scheduler.py | 1648 | CODE | |
| LOW | luigi/tools/deps.py | 94 | CODE | |
| LOW | luigi/contrib/redshift.py | 287 | CODE | |
| LOW | luigi/contrib/beam_dataflow.py | 388 | CODE | |
| LOW | luigi/contrib/sqla.py | 323 | CODE | |
| LOW | luigi/contrib/salesforce.py | 55 | CODE | |
| LOW | luigi/contrib/salesforce.py | 149 | CODE | |
| LOW | luigi/contrib/salesforce.py | 207 | CODE | |
| LOW | luigi/contrib/hadoop.py | 88 | CODE | |
| LOW | luigi/contrib/hadoop.py | 112 | CODE | |
| LOW | luigi/contrib/hadoop.py | 238 | CODE | |
| LOW | luigi/contrib/hadoop.py | 266 | CODE | |
| LOW | luigi/contrib/hadoop.py | 931 | CODE | |
| LOW | luigi/contrib/sge.py | 298 | CODE | |
| LOW | luigi/contrib/hive.py | 393 | CODE | |
| LOW | luigi/contrib/pig.py | 127 | CODE | |
| LOW | luigi/contrib/external_program.py | 138 | CODE | |
| LOW | luigi/contrib/kubernetes.py | 267 | CODE | |
| LOW | luigi/contrib/postgres.py | 357 | CODE | |
| LOW | luigi/contrib/presto.py | 57 | CODE | |
| LOW | luigi/contrib/lsf.py | 276 | CODE | |
| LOW | luigi/contrib/s3.py | 585 | CODE | |
| LOW | luigi/contrib/hdfs/hadoopcli_clients.py | 170 | CODE | |
| LOW | luigi/contrib/hdfs/target.py | 150 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/interface_test.py | 193 | def test_run_with_none_does_not_raise_type_error(self): | CODE |
| LOW⚡ | test/interface_test.py | 206 | except Exception: | CODE |
| LOW | test/db_task_history_test.py | 144 | except Exception: | CODE |
| MEDIUM | test/db_task_history_test.py | 141 | def setUp(self): | CODE |
| LOW⚡ | test/worker_parallel_scheduling_test.py | 177 | except Exception as e: | CODE |
| LOW | test/contrib/docker_runner_test.py | 51 | except Exception: | CODE |
| MEDIUM | test/contrib/dropbox_test.py | 172 | def test_mkdir_recreate_dir(self): | CODE |
| MEDIUM | test/contrib/dropbox_test.py | 186 | def test_mkdir_recreate_slashed_dir(self): | CODE |
| LOW⚡ | test/contrib/dropbox_test.py | 175 | except Exception as ex: | CODE |
| LOW⚡ | test/contrib/dropbox_test.py | 180 | except Exception as ex: | CODE |
| LOW⚡ | test/contrib/dropbox_test.py | 189 | except Exception as ex: | CODE |
| LOW⚡ | test/contrib/dropbox_test.py | 194 | except Exception as ex: | CODE |
| LOW | test/contrib/postgres_with_server_test.py | 55 | except Exception: | CODE |
| LOW | test/contrib/mongo_test.py | 36 | except Exception: | CODE |
| LOW | test/contrib/test_ssh.py | 57 | except Exception: | STRING |
| LOW | test/contrib/test_ssh.py | 69 | except Exception: | STRING |
| MEDIUM | test/contrib/test_ssh.py | 66 | def tearDown(self): | CODE |
| LOW | test/contrib/esindex_test.py | 64 | except Exception: | CODE |
| MEDIUM | luigi/worker.py | 393 | def get(self, block=None, timeout=None): | CODE |
| LOW | luigi/worker.py | 441 | except Exception: | CODE |
| LOW | luigi/worker.py | 705 | except Exception: | CODE |
| LOW | luigi/worker.py | 806 | except Exception as ex: | CODE |
| LOW | luigi/worker.py | 876 | except Exception as ex: | CODE |
| LOW | luigi/worker.py | 956 | except Exception as ex: | CODE |
| LOW | luigi/task.py | 441 | except Exception as exc: | CODE |
| LOW | luigi/retcodes.py | 83 | except Exception: | CODE |
| LOW | luigi/notifications.py | 220 | except Exception as e: | CODE |
| LOW | luigi/contrib/sqla.py | 361 | except Exception as e: | CODE |
| LOW | luigi/contrib/hadoop.py | 291 | except Exception as e: | CODE |
| LOW | luigi/contrib/hadoop.py | 324 | except Exception as e: | CODE |
| LOW | luigi/contrib/hadoop.py | 368 | except Exception as e: | CODE |
| LOW | luigi/contrib/bigquery_avro.py | 64 | except Exception as e: | CODE |
| LOW | luigi/contrib/bigquery_avro.py | 106 | except Exception as e: | CODE |
| LOW | luigi/contrib/mrrunner.py | 89 | except Exception as exc: | CODE |
| LOW | luigi/contrib/lsf_runner.py | 73 | except Exception as exc: | CODE |
| LOW | luigi/contrib/dropbox.py | 82 | except Exception as e: | CODE |
| LOW | luigi/contrib/presto.py | 178 | except Exception: | CODE |
| LOW | luigi/contrib/ssh.py | 289 | except Exception: | CODE |
| LOW | luigi/contrib/sge_runner.py | 87 | except Exception as e: | CODE |
| LOW | luigi/contrib/hdfs/format.py | 52 | except Exception as ex: | CODE |
| LOW | luigi/contrib/hdfs/format.py | 82 | except Exception as ex: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | test/rpc_test.py | 117 | fetch_results = ['{"response": null}', '{"response": {"pass": true}}'] | CODE |
| HIGH⚡ | test/rpc_test.py | 125 | fetch_results = ['{"response": null}'] * 3 + ['{"response": {}}'] | CODE |
| HIGH | test/contrib/pai_test.py | 51 | command = "cd scikit-learn/benchmarks && python bench_mnist.py" | CODE |
| HIGH | test/contrib/pai_test.py | 53 | tasks = [TaskRole("test", "cd scikit-learn/benchmarks && python bench_mnist.py", memoryMB=4096)] | CODE |
| HIGH | test/contrib/bigquery_gcloud_test.py | 403 | "default":null, | CODE |
| HIGH | test/contrib/bigquery_gcloud_test.py | 414 | "default":null, | CODE |
| HIGH | luigi/parameter.py | 1304 | of parsing. The traversal order of standard ``dict`` is undefined, which can result various string | STRING |
| HIGH | luigi/contrib/ssh.py | 141 | ["-L", tunnel_host, "echo -n ready && cat"], | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | test/server_test.py | 477 | self.mock_scheduler._state._metrics_collector.configure_http_handler.assert_called_once_with(self.handler) | CODE |
| CRITICAL | test/contrib/spark_test.py | 410 | spark.sql.return_value.write.saveAsTable.assert_called_with("output") | CODE |
| CRITICAL | luigi/static/visualiser/lib/jquery-1.10.0.min.js | 5 | if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON: | CODE |
| CRITICAL | …aliser/lib/jquery-ui/js/jquery-ui-1.10.3.custom.min.js | 6 | (function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n& | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/db_task_history_test.py | 45 | # Create a temporary SQLite database | COMMENT |
| MEDIUM | test/db_task_history_test.py | 48 | # Create the tasks table without the task_id column | COMMENT |
| MEDIUM⚡ | test/safe_extractor_test.py | 101 | # Create a tar file with 3 files | COMMENT |
| MEDIUM⚡ | test/safe_extractor_test.py | 115 | # Create a tar file with a path traversal file | COMMENT |
| MEDIUM | luigi/lock.py | 100 | # Create a pid file if it does not exist | COMMENT |
| MEDIUM | doc/conf.py | 6 | # This file is execfile()d with the current directory set to its | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/notifications_test.py | 63 | recipients=["user@example.com"], | CODE |
| LOW | test/contrib/gcs_test.py | 150 | lorem = b"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt\ | CODE |
| LOW | test/contrib/gcs_test.py | 150 | lorem = b"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt\ | CODE |
| LOW | test/contrib/gcs_test.py | 165 | lorem = b"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt\ | CODE |
| LOW | test/contrib/gcs_test.py | 165 | lorem = b"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt\ | CODE |
| LOW | test/contrib/rdbms_test.py | 45 | user = "dummy_user" | CODE |
| LOW | test/contrib/redshift_test.py | 61 | user = "dummy_user" | CODE |
| LOW | test/contrib/redshift_test.py | 89 | user = "dummy_user" | CODE |
| LOW | test/contrib/redshift_test.py | 493 | user = "dummy_user" | CODE |
| LOW | test/contrib/redshift_test.py | 536 | user = "dummy_user" | CODE |
| LOW | test/contrib/mongo_test.py | 166 | {"_id": "person_1", "age": 11, "experience": 10, "content": "Lorem ipsum, dolor sit amet. Consectetur adipis | CODE |
| LOW | test/contrib/mongo_test.py | 166 | {"_id": "person_1", "age": 11, "experience": 10, "content": "Lorem ipsum, dolor sit amet. Consectetur adipis | CODE |
| LOW | test/contrib/postgres_test.py | 55 | user = "dummy_user" | CODE |
| LOW | test/contrib/postgres_test.py | 95 | user = "dummy_user" | CODE |
| LOW | test/contrib/kubernetes_test.py | 64 | return {"dummy_label": "dummy_value"} | CODE |
| LOW | test/contrib/mysqldb_test.py | 40 | user = "dummy_user" | CODE |
| LOW | …/visualiser/lib/datatables/js/jquery.dataTables.min.js | 38 | (fa(a,{sSearch:b,bRegex:d.bRegex,bSmart:d.bSmart,bCaseInsensitive:d.bCaseInsensitive}),a._iDisplayStart=0,M(a))},g=null! | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/conftest.py | 42 | # Check if the item has any markers (custom or builtin) | COMMENT |
| LOW⚡ | test/safe_extractor_test.py | 88 | # Check if the file exists | COMMENT |
| LOW⚡ | test/safe_extractor_test.py | 91 | # Check if the file content is correct | COMMENT |
| LOW | test/contrib/redshift_test.py | 245 | # Check if the `S3CopyToTable.s3_load_path` class attribute was | COMMENT |
| LOW | test/contrib/redshift_test.py | 360 | # Check if the `S3CopyToTable.s3_load_path` class attribute was | COMMENT |
| LOW | test/contrib/spark_test.py | 368 | # Check if find_class finds the class for the correct module name. | COMMENT |
| LOW | test/contrib/spark_test.py | 400 | # Check if find_class finds the class for the correct module name. | COMMENT |
| LOW | luigi/util.py | 294 | # Check if the parameter exists in the inheriting task | COMMENT |
| LOW | luigi/mypy.py | 129 | # Check if a 'default' argument is explicitly provided | COMMENT |
| LOW | luigi/parameter.py | 1809 | # Output message in new file | STRING |
| LOW | luigi/contrib/sqla.py | 321 | reflect = False # Set this to true only if the table has already been created by alternate means | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | luigi/scheduler.py | 230 | CODE | |
| LOW | luigi/scheduler.py | 805 | CODE | |
| LOW | luigi/parameter.py | 205 | CODE | |
| LOW | luigi/parameter.py | 1028 | CODE | |
| LOW | luigi/contrib/hadoop.py | 390 | CODE | |
| LOW | luigi/contrib/webhdfs.py | 69 | CODE | |
| LOW | luigi/contrib/ftp.py | 371 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | test/contrib/s3_test.py | 593 | # we can just use this key | COMMENT |
| LOW | luigi/worker.py | 72 | # unscientifically just set the final value to a floating point number that | COMMENT |
| LOW | luigi/lock.py | 141 | # If the file happen to not exist, simply return | COMMENT |
| LOW | luigi/contrib/hdfs/config.py | 113 | # just return any random temporary location | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/task_forwarded_attributes_test.py | 65 | def run_task(self, task): | CODE |
| LOW | test/scheduler_test.py | 366 | def run_task(self): | CODE |
| LOW | test/db_task_history_test.py | 129 | def run_task(self, task): | CODE |
| LOW | test/db_task_history_test.py | 171 | def run_task(self, task): | CODE |
| LOW | test/execution_summary_test.py | 36 | def run_task(self, task): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | luigi/__init__.py | 77 | __all__ = [ | CODE |
| LOW | luigi/scheduler.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | luigi/configuration/__init__.py | 21 | __all__ = [ | CODE |
| LOW | luigi/contrib/opener.py | 42 | __all__ = ["OpenerError", "NoOpenerError", "InvalidQuery", "OpenerRegistry", "Opener", "MockOpener", "LocalOpener", "S3O | CODE |
| LOW | luigi/contrib/batch.py | 70 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/execution_summary_test.py | 160 | CODE | |
| MEDIUM | test/execution_summary_test.py | 263 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/visualiser/visualiser_test.py | 319 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | luigi/contrib/ssh.py | 145 | # make sure to get the data so we know the connection is established | COMMENT |