User-friendly, commercial-grade software for processing aerial imagery. ✈️ Download it for free!
This report summarizes scanner evidence for WebODM/WebODM, a Python project with 4,212 GitHub stars. SynthScan examined 67,316 lines of code across 685 source files, recording 545 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 11.5 (Moderate 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? 178 finding(s).
Are imports declared and package/API names verified? 218 finding(s).
Are wrappers, guards, and repeated structures necessary? 199 finding(s).
Which changes need focused human review? 545 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 545 distinct pattern matches across 14 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 | manage.py | 14 | CODE | |
| LOW | nodeodm/models.py | 1 | CODE | |
| LOW | nodeodm/apps.py | 1 | CODE | |
| LOW | nodeodm/tests.py | 4 | CODE | |
| LOW | nodeodm/views.py | 1 | CODE | |
| LOW | app/boot.py | 2 | CODE | |
| LOW | app/boot.py | 6 | CODE | |
| LOW | app/boot.py | 18 | CODE | |
| LOW | app/boot.py | 19 | CODE | |
| LOW | app/boot.py | 21 | CODE | |
| LOW | app/raster_utils.py | 8 | CODE | |
| LOW | app/geoutils.py | 7 | CODE | |
| LOW | app/admin.py | 31 | CODE | |
| LOW | app/video.py | 2 | CODE | |
| LOW | app/video.py | 4 | CODE | |
| LOW | app/classes/gcp.py | 1 | CODE | |
| LOW | app/plugins/__init__.py | 1 | CODE | |
| LOW | app/plugins/__init__.py | 1 | CODE | |
| LOW | app/plugins/__init__.py | 2 | CODE | |
| LOW | app/plugins/__init__.py | 3 | CODE | |
| LOW | app/plugins/__init__.py | 4 | CODE | |
| LOW | app/plugins/__init__.py | 5 | CODE | |
| LOW | app/plugins/views.py | 3 | CODE | |
| LOW | app/plugins/views.py | 4 | CODE | |
| LOW | app/plugins/views.py | 5 | CODE | |
| LOW | app/plugins/views.py | 6 | CODE | |
| LOW | app/plugins/views.py | 8 | CODE | |
| LOW | app/tests/test_api_export.py | 1 | CODE | |
| LOW | app/tests/test_api_export.py | 3 | CODE | |
| LOW | app/tests/test_api_export.py | 7 | CODE | |
| LOW | app/tests/test_api_export.py | 8 | CODE | |
| LOW | app/tests/test_api_export.py | 12 | CODE | |
| LOW | app/tests/test_api_export.py | 22 | CODE | |
| LOW | app/tests/test_api_export.py | 28 | CODE | |
| LOW | app/tests/test_oidc.py | 2 | CODE | |
| LOW | app/tests/test_oidc.py | 2 | CODE | |
| LOW | app/tests/test_oidc.py | 4 | CODE | |
| LOW | app/tests/test_oidc.py | 5 | CODE | |
| LOW | app/tests/test_oidc.py | 6 | CODE | |
| LOW | app/tests/test_oidc.py | 7 | CODE | |
| LOW | app/tests/test_oidc.py | 8 | CODE | |
| LOW | app/tests/test_login.py | 1 | CODE | |
| LOW | app/tests/test_api_admin.py | 10 | CODE | |
| LOW | app/tests/test_cleanup.py | 1 | CODE | |
| LOW | app/tests/test_cleanup.py | 2 | CODE | |
| LOW | app/tests/test_panorama.py | 1 | CODE | |
| LOW | app/tests/test_panorama.py | 3 | CODE | |
| LOW | app/tests/test_auto_login.py | 1 | CODE | |
| LOW | app/tests/test_api_task_import.py | 6 | CODE | |
| LOW | app/tests/test_api_task_import.py | 7 | CODE | |
| LOW | app/tests/test_media.py | 3 | CODE | |
| LOW | app/tests/test_grids.py | 3 | CODE | |
| LOW | app/tests/test_crop.py | 3 | CODE | |
| LOW | app/tests/test_theme.py | 1 | CODE | |
| LOW | app/tests/test_theme.py | 2 | CODE | |
| LOW | app/tests/test_theme.py | 4 | CODE | |
| LOW | app/tests/test_task_wkt.py | 3 | CODE | |
| LOW | app/tests/test_external_auth.py | 1 | CODE | |
| LOW | app/tests/test_external_auth.py | 3 | CODE | |
| LOW | app/tests/test_api_task_external_import.py | 2 | CODE | |
| 142 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | nodeodm/models.py | 219 | except Exception as e: | CODE |
| LOW⚡ | app/grids.py | 43 | except Exception as e: | CODE |
| LOW⚡ | app/grids.py | 50 | except Exception as e: | CODE |
| LOW⚡ | app/grids.py | 59 | except Exception as e: | CODE |
| LOW | app/grids.py | 70 | except Exception as e: | CODE |
| LOW | app/grids.py | 96 | except Exception as e: | CODE |
| LOW | app/grids.py | 105 | except Exception as e: | CODE |
| MEDIUM | app/grids.py | 47 | def notify_grids_changed(): | CODE |
| MEDIUM | app/grids.py | 75 | def check_download_grid_for(task, max_retries=7): | CODE |
| LOW | app/splats.py | 265 | except Exception as e: | CODE |
| LOW | app/splats.py | 307 | except Exception: | CODE |
| LOW | app/splats.py | 332 | except Exception as e: | CODE |
| MEDIUM | app/splats.py | 255 | def resize_image(src, dst, camera): | CODE |
| LOW | app/net.py | 56 | except Exception: | CODE |
| LOW | app/imageutils.py | 17 | except Exception: | CODE |
| LOW | app/imageutils.py | 24 | except Exception: | CODE |
| LOW | app/imageutils.py | 69 | except Exception: | CODE |
| MEDIUM | app/imageutils.py | 6 | def is_panorama(filepath): | CODE |
| MEDIUM | app/imageutils.py | 28 | def extract_gps_from_image(filepath): | CODE |
| LOW | app/admin.py | 270 | except Exception as e: | CODE |
| LOW | app/admin.py | 282 | except Exception as e: | CODE |
| LOW | app/admin.py | 291 | except Exception as e: | CODE |
| LOW | app/admin.py | 341 | except Exception as e: | CODE |
| MEDIUM | app/admin.py | 264 | def plugin_enable(self, request, plugin_name, *args, **kwargs): | CODE |
| MEDIUM | app/admin.py | 276 | def plugin_disable(self, request, plugin_name, *args, **kwargs): | CODE |
| MEDIUM | app/admin.py | 288 | def plugin_delete(self, request, plugin_name, *args, **kwargs): | CODE |
| LOW | app/cogeo.py | 111 | except Exception as e: | CODE |
| LOW | app/pointcloud_utils.py | 62 | except Exception as e: | CODE |
| LOW | app/video.py | 29 | except Exception as e: | CODE |
| LOW | app/video.py | 355 | except Exception as e: | CODE |
| LOW | app/video.py | 402 | except Exception as e: | CODE |
| LOW | app/video.py | 427 | except Exception as e: | CODE |
| MEDIUM | app/video.py | 350 | def extract_gps_from_srt(srt_path): | CODE |
| LOW | app/templatetags/settings.py | 138 | except Exception as e: | CODE |
| MEDIUM | app/templatetags/settings.py | 96 | def settings_image_url(context, image): | CODE |
| LOW | app/plugins/functions.py | 38 | except Exception as e: | CODE |
| LOW | app/plugins/functions.py | 165 | except Exception as e: | CODE |
| LOW | app/plugins/functions.py | 245 | except Exception as e: | CODE |
| LOW | app/plugins/functions.py | 260 | except Exception as e: | CODE |
| LOW | app/plugins/functions.py | 335 | except Exception as e: | CODE |
| LOW | app/plugins/functions.py | 345 | except Exception as e: | CODE |
| LOW | app/management/commands/cleanup.py | 36 | except Exception as e: | CODE |
| MEDIUM | app/management/commands/cleanup.py | 37 | print(f"Error while removing {folder}: {str(e)}") | CODE |
| LOW | app/management/commands/cluster.py | 386 | except Exception as e: | CODE |
| MEDIUM | app/models/task.py | 480 | def duplicate(self, set_new_name=True): | CODE |
| MEDIUM | app/models/task.py | 1676 | def update_size(self, commit=False): | CODE |
| LOW | app/models/task.py | 157 | except Exception as e: | CODE |
| LOW | app/models/task.py | 449 | except Exception as e: | CODE |
| LOW | app/models/task.py | 497 | except Exception as e: | CODE |
| LOW | app/models/task.py | 509 | except Exception as e: | CODE |
| LOW | app/models/task.py | 550 | except Exception as e: | CODE |
| LOW | app/models/task.py | 1129 | except Exception as e: | CODE |
| LOW | app/models/task.py | 1303 | except Exception as e: | CODE |
| LOW | app/models/task.py | 1390 | except Exception: | CODE |
| LOW | app/models/task.py | 1460 | except Exception as e: | CODE |
| LOW | app/models/task.py | 1545 | except Exception as e: | CODE |
| LOW | app/models/task.py | 1580 | except Exception as e: | CODE |
| LOW | app/models/task.py | 1688 | except Exception as e: | CODE |
| LOW | app/models/task.py | 1705 | except Exception as e: | CODE |
| LOW | app/models/task.py | 1776 | except Exception as e: | CODE |
| 65 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | nodeodm/models.py | 217 | except exceptions.GenericError: | CODE |
| HIGH | nodeodm/tests.py | 92 | except (NodeServerError, NodeResponseError): | CODE |
| HIGH | nodeodm/tests.py | 212 | except (NodeResponseError, NodeServerError): | CODE |
| HIGH | app/signals.py | 16 | except: | CODE |
| HIGH | app/boot.py | 59 | except ObjectDoesNotExist: | CODE |
| HIGH | app/geoutils.py | 34 | except (IOError, ValueError, IndexError): | CODE |
| HIGH | app/geoutils.py | 185 | except: | CODE |
| HIGH | app/imageutils.py | 17 | except Exception: | CODE |
| HIGH | app/imageutils.py | 24 | except Exception: | CODE |
| HIGH | app/management/commands/cluster.py | 296 | except Project.DoesNotExist: | CODE |
| HIGH | app/models/task.py | 1782 | except redis.exceptions.RedisError: | CODE |
| HIGH | app/models/task.py | 1390 | except Exception: | CODE |
| HIGH | app/models/task.py | 813 | except GenericError: | CODE |
| HIGH | app/models/task.py | 860 | except GenericError: | CODE |
| HIGH | app/models/basemap.py | 52 | except redis.exceptions.ConnectionError: | CODE |
| HIGH | app/api/tasks.py | 614 | except ValueError: | CODE |
| HIGH | app/api/tasks.py | 1067 | except OSError: | CODE |
| HIGH | app/api/overlays.py | 215 | except OSError: | CODE |
| HIGH | coreplugins/lightning/plugin.py | 164 | except ValueError: | CODE |
| HIGH | worker/tasks.py | 173 | except redis.exceptions.RedisError: | CODE |
| HIGH | webodm/settings.py | 462 | except ImportError: | CODE |
| HIGH | webodm/settings.py | 467 | except ImportError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/grids.py | 75 | CODE | |
| LOW | app/splats.py | 56 | CODE | |
| LOW | app/splats.py | 150 | CODE | |
| LOW | app/splats.py | 273 | CODE | |
| LOW | app/raster_utils.py | 91 | CODE | |
| LOW | app/geoutils.py | 43 | CODE | |
| LOW | app/imageutils.py | 28 | CODE | |
| LOW | app/admin.py | 297 | CODE | |
| LOW | app/video.py | 56 | CODE | |
| LOW | app/video.py | 212 | CODE | |
| LOW | app/auth/backends.py | 23 | CODE | |
| LOW | app/classes/gcp.py | 14 | CODE | |
| LOW | app/plugins/functions.py | 84 | CODE | |
| LOW | app/plugins/functions.py | 144 | CODE | |
| LOW | app/plugins/functions.py | 176 | CODE | |
| LOW | app/plugins/plugin_base.py | 20 | CODE | |
| LOW | app/tests/test_api_export.py | 40 | CODE | |
| LOW | app/tests/test_api_export.py | 192 | CODE | |
| LOW | app/tests/test_splats.py | 28 | CODE | |
| LOW | app/tests/test_api_task_external_import.py | 45 | CODE | |
| LOW | app/tests/test_api_task.py | 55 | CODE | |
| LOW | app/management/commands/translate.py | 20 | CODE | |
| LOW | app/management/commands/cleanup.py | 18 | CODE | |
| LOW | app/management/commands/cluster.py | 22 | CODE | |
| LOW | app/management/commands/cluster.py | 55 | CODE | |
| LOW | app/management/commands/cluster.py | 88 | CODE | |
| LOW | app/management/commands/cluster.py | 340 | CODE | |
| LOW | app/management/commands/cluster.py | 414 | CODE | |
| LOW | app/models/task.py | 101 | CODE | |
| LOW | app/models/task.py | 337 | CODE | |
| LOW | app/models/task.py | 422 | CODE | |
| LOW | app/models/task.py | 480 | CODE | |
| LOW | app/models/task.py | 529 | CODE | |
| LOW | app/models/task.py | 559 | CODE | |
| LOW | app/models/task.py | 596 | CODE | |
| LOW | app/models/task.py | 617 | CODE | |
| LOW | app/models/task.py | 690 | CODE | |
| LOW | app/models/task.py | 983 | CODE | |
| LOW | app/models/task.py | 1209 | CODE | |
| LOW | app/models/task.py | 1277 | CODE | |
| LOW | app/models/task.py | 1360 | CODE | |
| LOW | app/models/task.py | 1632 | CODE | |
| LOW | app/models/task.py | 1676 | CODE | |
| LOW | app/models/project.py | 37 | CODE | |
| LOW | app/models/project.py | 103 | CODE | |
| LOW | app/scripts/install_ffmpeg.py | 10 | CODE | |
| LOW | app/api/media.py | 65 | CODE | |
| LOW | app/api/media.py | 212 | CODE | |
| LOW | app/api/media.py | 364 | CODE | |
| LOW | app/api/tasks.py | 778 | CODE | |
| LOW | app/api/tasks.py | 908 | CODE | |
| LOW | app/api/tasks.py | 999 | CODE | |
| LOW | app/api/splats.py | 68 | CODE | |
| LOW | app/api/externalauth.py | 14 | CODE | |
| LOW | app/api/tiler.py | 150 | CODE | |
| LOW | app/api/tiler.py | 333 | CODE | |
| LOW | app/api/processingnodes.py | 47 | CODE | |
| LOW | app/api/processingnodes.py | 87 | CODE | |
| LOW | app/api/overlays.py | 226 | CODE | |
| LOW | app/api/panorama.py | 40 | CODE | |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | app/tests/test_app.py | 12 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | app/tests/test_settings.py | 4 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | app/models/task.py | 29 | from django.core.exceptions import ValidationError, SuspiciousFileOperation | CODE |
| CRITICAL | app/models/setting.py | 5 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | app/api/fields.py | 5 | from django.core.exceptions import ValidationError | CODE |
| CRITICAL | coreplugins/snapshot/public/main.js | 71 | var mapTitle = options.map._container.parentElement.parentElement.parentElement.querySelector(".map-title"); | CODE |
| CRITICAL | coreplugins/snapshot/public/main.js | 94 | var modelTitle = options.viewer.renderArea.parentElement.parentElement.parentElement.parentElement.querySelector(" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | nodeodm/models.py | 103 | def get_available_options_json(self, pretty=False): | CODE |
| LOW | nodeodm/tests.py | 56 | def test_online_processing_node(self): | CODE |
| LOW⚡ | nodeodm/tests.py | 74 | def test_offline_processing_node(self): | CODE |
| LOW⚡ | nodeodm/tests.py | 79 | def test_auto_update_node_info(self): | CODE |
| LOW⚡ | nodeodm/tests.py | 84 | def test_client_api_and_task_methods(self): | CODE |
| LOW | nodeodm/tests.py | 172 | def test_find_best_available_node_and_is_online(self): | CODE |
| LOW | app/testwatch.py | 25 | def execute_intercept_function_replacement(self, fname, *args, **kwargs): | CODE |
| LOW | app/raster_utils.py | 25 | def extension_for_export_format(export_format): | CODE |
| LOW | app/raster_utils.py | 75 | def compute_block_aligned_subwindows(src, win): | CODE |
| LOW | app/net.py | 9 | def is_dns_resolution_problem(e): | CODE |
| LOW | app/net.py | 42 | def create_connection_custom_dns(address, *args, **kwargs): | CODE |
| LOW | app/geoutils.py | 159 | def get_srs_name_units_from_epsg_or_wkt(epsg, wkt): | CODE |
| LOW | app/geoutils.py | 196 | def get_rasterio_to_meters_factor(rasterio_ds): | CODE |
| LOW | app/geoutils.py | 213 | def utm_transformers_from_lonlat(lon, lat): | CODE |
| LOW | app/pointcloud_utils.py | 55 | def is_pointcloud_georeferenced(laz_path): | CODE |
| LOW | app/video.py | 409 | def extract_jpeg_bytes_from_video(video_path, width=256, timestamp="00:00:01", quality=4): | CODE |
| LOW | app/templatetags/processingnode_extras.py | 11 | def get_visible_processing_nodes(context): | CODE |
| LOW | app/templatetags/processingnode_extras.py | 20 | def can_view_processing_nodes(context): | CODE |
| LOW | app/templatetags/settings.py | 67 | def quota_exceeded_grace_period(context): | CODE |
| LOW | app/auth/backends.py | 23 | def get_user_from_external_auth_response(res): | CODE |
| LOW | app/plugins/functions.py | 144 | def webpack_watch_process_count(): | CODE |
| LOW | app/plugins/functions.py | 309 | def get_plugins_persistent_path(*paths): | CODE |
| LOW | app/plugins/functions.py | 312 | def get_dynamic_script_handler(script_path, callback=None, **kwargs): | CODE |
| LOW | app/tests/test_login.py | 14 | def test_reset_password_render(self): | CODE |
| LOW | app/tests/test_api_task_external_import.py | 45 | def test_external_task_import(self): | CODE |
| LOW | app/tests/test_api_projects.py | 171 | def test_project_group_permissions(self): | CODE |
| LOW | app/tests/test_api_task.py | 1298 | def test_task_auto_processing_node(self): | CODE |
| LOW | app/tests/test_api_task.py | 1382 | def test_task_manual_processing_node(self): | CODE |
| LOW | app/tests/test_api_task.py | 1402 | def test_task_multifile_uploads(self): | CODE |
| LOW | app/tests/test_api_task.py | 1498 | def test_task_chunked_uploads(self): | CODE |
| LOW | app/tests/test_app.py | 189 | def test_public_project_views(client, expectedStatus): | CODE |
| LOW | app/models/task.py | 983 | def extract_assets_and_complete(self): | CODE |
| LOW | app/models/task.py | 1267 | def update_available_assets_field(self, commit=False): | CODE |
| LOW | app/models/task.py | 1324 | def update_orthophoto_bands_field(self, commit=False): | CODE |
| LOW | app/models/task.py | 1627 | def get_check_file_asset_path(self, asset): | CODE |
| LOW | app/models/profile.py | 45 | def has_exceeded_quota_cached(self): | CODE |
| LOW | app/static/app/js/classes/Animations.js | 27 | function showToasterRippleAnimation(sourceRect, toasterEl) { | CODE |
| LOW | app/scripts/extract_plugin_manifest_strings.py | 5 | def extract_plugin_manifest_strings(plugins_dir, output): | CODE |
| LOW | app/scripts/extract_odm_strings.py | 12 | def path_or_json_string_to_dict(s): | CODE |
| LOW | app/scripts/extract_odm_strings.py | 35 | def add_mutually_exclusive_group(self): | CODE |
| LOW | app/api/tasks.py | 109 | def check_processing_node_perms(request): | CODE |
| LOW | app/api/tasks.py | 887 | def get_external_import_tmpdir(request): | CODE |
| LOW | app/api/tiler.py | 53 | def get_colormap_encoded_values(cmap): | CODE |
| LOW | app/api/processingnodes.py | 30 | def filter_has_available_options(self, queryset, name, value): | CODE |
| LOW | app/api/overlays.py | 30 | def check_overlay_write_perms(request, task): | CODE |
| LOW | app/api/common.py | 64 | def get_asset_download_filename(task, asset): | CODE |
| LOW | app/views/utils.py | 25 | def csrf_samesite_none_if_secure(func): | CODE |
| LOW | coreplugins/lightning/plugin.py | 158 | def lightning_on_processing_node_removed(sender, processing_node_id, **kwargs): | CODE |
| LOW | coreplugins/align-service/signals.py | 14 | def handle_task_resizing_images(sender, task_id, **kwargs): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/tests/test_api_admin.py | 295 | # Create a test user to impersonate | COMMENT |
| MEDIUM | app/tests/test_api_admin.py | 301 | # Create a mock project for the impersonated user | COMMENT |
| MEDIUM | app/tests/test_api_admin.py | 325 | # Create a mock project for admin user | COMMENT |
| MEDIUM | app/tests/test_cleanup.py | 24 | # Create a task with size | COMMENT |
| MEDIUM | app/tests/test_cleanup.py | 53 | # Create a task | COMMENT |
| MEDIUM | app/tests/test_grids.py | 39 | # Create a new task in the database with a WKT for UTM zone 16N | COMMENT |
| MEDIUM | app/tests/test_splats.py | 32 | # Create a task and populate a minimal mock cameras.json, shots.geojson and a point cloud | COMMENT |
| MEDIUM | app/tests/test_splats.py | 167 | # Create a small gaussian splat mock file in .ply format | COMMENT |
| MEDIUM | app/tests/test_quota.py | 51 | # Create a task with size | COMMENT |
| MEDIUM | app/tests/test_api_task.py | 1089 | # Create a task | COMMENT |
| MEDIUM | app/tests/test_app.py | 23 | # Create a test Group | COMMENT |
| MEDIUM | app/tests/test_app.py | 290 | # Create a new project | COMMENT |
| MEDIUM | app/tests/test_app.py | 314 | # Create a new task | COMMENT |
| MEDIUM | coreplugins/measure/volume.py | 77 | # Create a grid for interpolation | COMMENT |
| MEDIUM | coreplugins/measure/volume.py | 86 | # Create a grid for interpolation | COMMENT |
| MEDIUM | db/docker-entrypoint.sh | 47 | # Create the transaction log directory before initdb is run so the directory is owned by the correct user | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | webodm.sh | 272 | # Check if docker-compose exists | COMMENT |
| LOW | webodm.sh | 275 | # Check if compose plugin is installed | COMMENT |
| LOW | start.sh | 130 | # Check if we need to auto-generate SSL certs via letsencrypt | COMMENT |
| LOW | start.sh | 136 | # Check if SSL key/certs are available | COMMENT |
| LOW | app/uploadhandler.py | 34 | self.file.close() # Close the file as not to hog the number of open files descriptors | CODE |
| LOW | app/cogeo.py | 53 | # Check if we have GDAL >= 3.1 | COMMENT |
| LOW | app/plugins/functions.py | 103 | # Check if we need to generate a webpack.config.js | COMMENT |
| LOW | app/tests/test_api_task.py | 1367 | # Set task to queued, bring node offline | COMMENT |
| LOW | app/tests/test_app.py | 215 | # Set project to public | COMMENT |
| LOW | app/models/task.py | 805 | # Check if the UUID is still valid, as processing nodes purge | COMMENT |
| LOW | app/models/task.py | 1005 | # Check if this looks like a backup file, in which case we need to move the files | COMMENT |
| LOW | app/models/task.py | 1020 | # Check if the zip file contained a top level directory | COMMENT |
| LOW | app/models/task.py | 1489 | # Check if task has been canceled/removed | COMMENT |
| LOW | app/models/task.py | 1742 | # Check if lock has expired | COMMENT |
| LOW | app/api/tasks.py | 376 | # Check if user has permissions to set processing node | COMMENT |
| LOW | app/api/tasks.py | 379 | # Check if an alignment field is set to a valid task | COMMENT |
| LOW | app/api/tasks.py | 432 | # Check if user has permissions to set processing node | COMMENT |
| LOW | app/views/oidc.py | 160 | # Check if it's authorized | COMMENT |
| LOW | coreplugins/measure/volume.py | 136 | # Check if the feature geometry type is Polygon | COMMENT |
| LOW | coreplugins/dronedb/ddb.py | 289 | # Check if the url is valid | COMMENT |
| LOW | coreplugins/dronedb/api_views.py | 260 | # Check if there is an imported url associated with the project and task | COMMENT |
| LOW | worker/tasks.py | 139 | # Check if lock has expired | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/geoutils.py | 40 | # we can't simply call geom.tranform(srid) | COMMENT |
| LOW | app/tests/test_api_task.py | 258 | # We just pass it along, it will get errored out during processing | COMMENT |
| MEDIUM | app/static/app/js/classes/plugins/ApiFactory.js | 15 | // are more robust as we can detect more easily if | COMMENT |
| LOW | app/api/tasks.py | 391 | # for now we just create a placeholder task. | COMMENT |
| MEDIUM | webodm/settings.py | 11 | # For best practices | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/static/app/js/plugins/purify.min.js | 1 | (function(e){"use strict";var t=typeof window==="undefined"?null:window;if(typeof define==="function"&&define.amd){defin | CODE |
| LOW | app/static/app/js/plugins/purify.js | 154 | 'nowrap','open','optimum','pattern','placeholder','poster','preload','pubdate', | CODE |
| LOW | app/static/app/js/plugins/purify.js | 262 | 'alt','class','for','id','label','name','pattern','placeholder', | CODE |
| LOW | coreplugins/cesiumion/app_views.py | 18 | widget=forms.TextInput(attrs={"placeholder": "Token"}), | CODE |
| LOW | coreplugins/tasknotification/templates/index.html | 21 | <input name="smtp_to_address" value="{{ form.smtp_to_address.value }}" type="text" class="form-control" placehol | CODE |
| LOW⚡ | coreplugins/dronedb/plugin.py | 24 | username = forms.CharField(label='Username', required=False, max_length=1024, widget=forms.TextInput(attrs={'placeho | CODE |
| LOW⚡ | coreplugins/dronedb/plugin.py | 25 | password = forms.CharField(label='Password', required=False, max_length=1024, widget=forms.PasswordInput(attrs={'pla | CODE |
| LOW⚡ | coreplugins/dronedb/plugin.py | 26 | registry_url = forms.CharField(label='Registry URL', required=False, max_length=1024, widget=forms.TextInput(attrs={ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/video.py | 221 | # [iso : 3200] [shutter : 1/60.0] [fnum : 280] [ev : 0] [ct : 3925] [color_md : default] [focal_len : 240] [lati | COMMENT |
| LOW | app/api/hsvblend.py | 1 | import numpy as np | COMMENT |
| LOW | app/api/hsvblend.py | 21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | COMMENT |
| LOW | app/api/hsvblend.py | 121 | #replace v with hillshade | COMMENT |
| LOW | app/api/hillshade.py | 121 | # in this manner is consistent with the previous implementation and | COMMENT |
| LOW | webodm/settings_override.py | 1 | # Do not touch. This file can be bind-mount replaced | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/api/hsvblend.py | 31 | # ============================================================================= | COMMENT |
| MEDIUM | app/api/hsvblend.py | 64 | # ============================================================================= | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/views/dev.py | 68 | logger.info("Running python manage.py translate extract && python manage.py translate build --safe") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/api/tiler.py | 333 | CODE |