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 presents the forensic synthetic code analysis of spotify/luigi, a Python project with 18,745 GitHub stars. SynthScan v2.0 examined 71,316 lines of code across 319 source files, recording 1421 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 22.6 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1421 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| 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 | 56 | def test_optional_int_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 61 | def test_optional_bool_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 66 | def test_optional_float_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 71 | def test_optional_dict_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 76 | def test_optional_list_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 81 | def test_optional_tuple_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 86 | def test_optional_numerical_parameter_float(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 91 | def test_optional_numerical_parameter_int(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 96 | def test_optional_choice_parameter(self): | CODE |
| LOW⚡ | test/optional_parameter_test.py | 102 | 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 |
| LOW⚡ | test/interface_test.py | 159 | def test_stops_worker_on_run_exception(self): | CODE |
| 858 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/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 | 63 | CODE | |
| LOW | luigi/__init__.py | 63 | CODE | |
| LOW | luigi/__init__.py | 64 | CODE | |
| LOW | luigi/__init__.py | 65 | CODE | |
| LOW | luigi/__init__.py | 65 | CODE | |
| 17 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 |
| 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 |
| MEDIUM | luigi/worker.py | 393 | def get(self, block=None, timeout=None): | 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 | 1298 | 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 | 145 | lorem = b"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt\ | CODE |
| LOW | test/contrib/gcs_test.py | 145 | lorem = b"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt\ | CODE |
| LOW | test/contrib/gcs_test.py | 160 | lorem = b"Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt\ | CODE |
| LOW | test/contrib/gcs_test.py | 160 | 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 | 1803 | # 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 | 1022 | 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 | 76 | __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 |