Repository Analysis

ckan/ckan

CKAN is an open-source DMS (data management system) for powering data hubs and data portals. CKAN makes it easy to publish, share and use data. It powers catalog.data.gov, open.canada.ca/data, data.humdata.org among many other sites.

11.2 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of ckan/ckan, a Python project with 5,071 GitHub stars. SynthScan v2.0 examined 265,446 lines of code across 1794 source files, recording 2946 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 11.2 places this repository in the Low 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).

11.2
Adjusted Score
11.2
Raw Score
100%
Time Factor
2026-07-14
Last Push
5.1K
Stars
Python
Language
265.4K
Lines of Code
1.8K
Files
2.9K
Pattern Hits
2026-07-14
Scan Date
0.03
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

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.

CRITICAL 1HIGH 47MEDIUM 48LOW 2850

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 2946 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.

Hyper-Verbose Identifiers2137 hits · 1906 pts
SeverityFileLineSnippetContext
LOWckan/authz.py59 def _is_chained_auth_function(func: AuthFunction) -> bool:CODE
LOWckan/authz.py145def clear_auth_functions_cache() -> None:CODE
LOWckan/authz.py187def get_group_or_org_admin_ids(group_id: Optional[str]) -> list[str]:CODE
LOWckan/authz.py259def get_collaborator_capacities() -> Collection[str]:CODE
LOWckan/authz.py292def get_roles_with_permission(permission: str) -> list[str]:CODE
LOWckan/authz.py302def has_user_permission_for_group_or_org(group_id: Optional[str],CODE
LOWckan/authz.py338def _has_user_permission_for_groups(CODE
LOWckan/authz.py366def users_role_for_group_or_org(CODE
LOWckan/authz.py393def has_user_permission_for_some_org(CODE
LOWckan/authz.py481def user_is_collaborator_on_dataset(CODE
LOWckan/config/middleware/flask_app.py573def _register_plugins_blueprints(app: CKANApp):CODE
LOWckan/config/middleware/flask_app.py585def _register_core_blueprints(app: CKANApp):CODE
LOWckan/config/middleware/flask_app.py643def _setup_error_mail_handler(app: CKANApp):CODE
LOWckan/config/declaration/serialize.py115def serialize_validation_schema(declaration: "Declaration") -> Dict[str, Any]:CODE
LOWckan/plugins/interfaces.py110 def make_error_log_middleware(self, app: 'CKANFlask',STRING
LOWckan/plugins/interfaces.py169 def get_item_additional_fields(STRING
LOWckan/plugins/interfaces.py1288 def prepare_dataset_blueprint(self, package_type: str,STRING
LOWckan/plugins/interfaces.py1306 def prepare_resource_blueprint(self, package_type: str,STRING
LOWckan/plugins/interfaces.py1325 def resource_validation_dependencies(STRING
LOWckan/plugins/interfaces.py2227 def dataset_blueprint_listener(sender, **kwargs):STRING
LOWckan/plugins/interfaces.py2252 def dataset_blueprint_listener(sender, **kwargs):STRING
LOWckan/plugins/interfaces.py2319 def files_get_storage_adapters(self) -> dict[str, type[Storage]]:STRING
LOWckan/plugins/interfaces.py2324 def files_get_storage_adapters(self):STRING
LOWckan/plugins/interfaces.py2333 def files_get_location_transformers(self) -> dict[str, types.LocationTransformer]:STRING
LOWckan/plugins/interfaces.py2338 def files_get_location_transformers(self):STRING
LOWckan/plugins/blanket.py229def _declaration_file_extractor(plugin: type[p.Plugin]):CODE
LOWckan/plugins/blanket.py270def _blueprint_implementation(CODE
LOWckan/plugins/blanket.py310def _declaration_implementation(subject: Subject) -> Callable[..., None]:CODE
LOWckan/tests/test_common.py96def test_setting_a_key_sets_it_on_flask_config_if_app_context(monkeypatch):CODE
LOWckan/tests/test_common.py102def test_deleting_a_key_deletes_it_on_ckan_config():CODE
LOWckan/tests/test_common.py109def test_deleting_a_key_delets_it_on_flask_config(monkeypatch, ckan_config):CODE
LOWckan/tests/test_common.py119def test_update_works_on_flask_config():CODE
LOWckan/tests/test_common.py129def test_config_option_update_action_works_on_flask(reset_db, ckan_config):CODE
LOWckan/tests/test_common.py136def test_params_also_works_on_flask_request(test_request_context):CODE
LOWckan/tests/test_common.py142def test_other_missing_attributes_raise_attributeerror_exceptions(CODE
LOWckan/tests/test_common.py151def test_flask_g_is_used_on_a_flask_request():CODE
LOWckan/tests/test_common.py158def test_can_also_use_c_on_a_flask_request():CODE
LOWckan/tests/test_common.py167def test_accessing_missing_key_raises_error_on_flask_request():CODE
LOWckan/tests/test_coding_standards.py314 def test_actions_have_auth_fn(self, results):CODE
LOWckan/tests/test_coding_standards.py323 def test_actions_have_auth_fn_blacklist(self, results):CODE
LOWckan/tests/test_coding_standards.py332 def test_auths_have_action_fn(self, results):CODE
LOWckan/tests/test_coding_standards.py341 def test_auths_have_action_fn_blacklist(self, results):CODE
LOWckan/tests/test_authz.py13def test_config_overrides_default():CODE
LOWckan/tests/test_authz.py18def test_config_override_also_works_with_prefix():CODE
LOWckan/tests/test_authz.py23def test_unknown_permission_returns_false():CODE
LOWckan/tests/test_authz.py27def test_unknown_permission_not_in_config_returns_false():CODE
LOWckan/tests/test_authz.py31def test_default_roles_that_cascade_to_sub_groups_is_a_list():CODE
LOWckan/tests/test_authz.py38def test_roles_that_cascade_to_sub_groups_is_a_list():CODE
LOWckan/tests/test_authz.py52def test_get_user_returns_user_obj():CODE
LOWckan/tests/test_authz.py62def test_no_attributes_set_on_imported_auth_members():CODE
LOWckan/tests/factories.py282 def test_resource_view_factory():STRING
LOWckan/tests/test_factories.py29def test_resource_view_factory():CODE
LOWckan/tests/test_factories.py39def test_dataset_factory_allows_creation_by_anonymous_user():CODE
LOWckan/tests/test_factories.py67def test_factory_model_with_explicit_composite_key(user_factory: types.TestFactory):CODE
LOWckan/tests/test_factories.py83def test_factory_model_with_implicit_composite_key(user_factory: types.TestFactory):CODE
LOWckan/tests/config/test_middleware.py68def test_flask_core_route_is_served(patched_app):CODE
LOWckan/tests/config/test_middleware.py77def test_secret_key_is_used_if_present(app):CODE
LOWckan/tests/config/test_middleware.py84def test_missing_secret_crashes_applicaiton(make_app):CODE
LOWckan/tests/config/test_middleware.py93def test_all_plugin_blueprints_are_registered(app):CODE
LOWckan/tests/config/test_middleware.py111def test_flask_config_values_are_parsed(app):CODE
2077 more matches not shown…
Unused Imports374 hits · 341 pts
SeverityFileLineSnippetContext
LOWckan/common.py10CODE
LOWckan/common.py29CODE
LOWckan/common.py36CODE
LOWckan/authz.py2CODE
LOWckan/types/__init__.py1CODE
LOWckan/types/__init__.py3CODE
LOWckan/types/__init__.py20CODE
LOWckan/types/__init__.py20CODE
LOWckan/types/__init__.py22CODE
LOWckan/types/__init__.py25CODE
LOWckan/types/__init__.py28CODE
LOWckan/types/__init__.py29CODE
LOWckan/types/__init__.py31CODE
LOWckan/types/__init__.py32CODE
LOWckan/types/__init__.py33CODE
LOWckan/types/logic/action_result.py1CODE
LOWckan/types/logic/action_result.py8CODE
LOWckan/types/logic/action_result.py9CODE
LOWckan/config/environment.py3CODE
LOWckan/config/middleware/common_middleware.py2CODE
LOWckan/config/middleware/__init__.py4CODE
LOWckan/config/middleware/flask_app.py1CODE
LOWckan/config/declaration/serialize.py35CODE
LOWckan/config/declaration/describe.py49CODE
LOWckan/config/declaration/option.py5CODE
LOWckan/config/declaration/__init__.py5CODE
LOWckan/config/declaration/__init__.py29CODE
LOWckan/config/declaration/load.py23CODE
LOWckan/config/declaration/load.py37CODE
LOWckan/plugins/interfaces.py7CODE
LOWckan/plugins/interfaces.py26CODE
LOWckan/plugins/interfaces.py29CODE
LOWckan/plugins/interfaces.py30CODE
LOWckan/plugins/interfaces.py31CODE
LOWckan/plugins/toolkit.py12CODE
LOWckan/plugins/toolkit.py17CODE
LOWckan/plugins/toolkit.py17CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py20CODE
LOWckan/plugins/toolkit.py40CODE
LOWckan/plugins/toolkit.py41CODE
LOWckan/plugins/toolkit.py42CODE
LOWckan/plugins/toolkit.py42CODE
LOWckan/plugins/toolkit.py42CODE
LOWckan/plugins/toolkit.py47CODE
LOWckan/plugins/toolkit.py48CODE
LOWckan/plugins/toolkit.py48CODE
LOWckan/plugins/toolkit.py48CODE
LOWckan/plugins/toolkit.py53CODE
314 more matches not shown…
Cross-File Repetition33 hits · 165 pts
SeverityFileLineSnippetContext
HIGHckan/model/package.py0jsonb_typeof(extras) = 'object' and not jsonb_path_exists(extras, '$.* ? (@.type() <> "string")')STRING
HIGHckan/model/group.py0jsonb_typeof(extras) = 'object' and not jsonb_path_exists(extras, '$.* ? (@.type() <> "string")')STRING
HIGH…n/migration/versions/106_12d64978ab44_faster_extras.py0jsonb_typeof(extras) = 'object' and not jsonb_path_exists(extras, '$.* ? (@.type() <> "string")')STRING
HIGHckan/migration/env.py0run migrations in 'offline' mode. this configures the context with just a url and not an engine, though an engine is accSTRING
HIGHcontrib/alembic/generic/env.py0run migrations in 'offline' mode. this configures the context with just a url and not an engine, though an engine is accSTRING
HIGHckanext/activity/migration/activity/env.py0run migrations in 'offline' mode. this configures the context with just a url and not an engine, though an engine is accSTRING
HIGHckanext/tracking/migration/tracking/env.py0run migrations in 'offline' mode. this configures the context with just a url and not an engine, though an engine is accSTRING
HIGH…igrations/migration/example_database_migrations/env.py0run migrations in 'offline' mode. this configures the context with just a url and not an engine, though an engine is accSTRING
HIGHckan/migration/env.py0run migrations in 'online' mode. in this scenario we need to create an engine and associate a connection with the contexSTRING
HIGHcontrib/alembic/generic/env.py0run migrations in 'online' mode. in this scenario we need to create an engine and associate a connection with the contexSTRING
HIGHckanext/activity/migration/activity/env.py0run migrations in 'online' mode. in this scenario we need to create an engine and associate a connection with the contexSTRING
HIGHckanext/tracking/migration/tracking/env.py0run migrations in 'online' mode. in this scenario we need to create an engine and associate a connection with the contexSTRING
HIGH…igrations/migration/example_database_migrations/env.py0run migrations in 'online' mode. in this scenario we need to create an engine and associate a connection with the contexSTRING
HIGHckanext/example_theme_docs/v22_webassets/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGH…anext/example_theme_docs/v14_more_custom_css/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGHckanext/example_theme_docs/v11_HTML_and_CSS/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGHckanext/example_theme_docs/v10_custom_snippet/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGH…ext/example_theme_docs/custom_config_setting/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGHckanext/example_theme_docs/v09_snippet/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGH…next/example_theme_docs/v12_extra_public_dir/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGHckanext/example_theme_docs/v15_webassets/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGH…xample_theme_docs/v08_custom_helper_function/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGHckanext/example_theme_docs/v13_custom_css/plugin.py0return a sorted list of the groups with the most datasets.STRING
HIGHckanext/example_theme_docs/v22_webassets/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
HIGH…anext/example_theme_docs/v14_more_custom_css/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
HIGHckanext/example_theme_docs/v11_HTML_and_CSS/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
HIGHckanext/example_theme_docs/v10_custom_snippet/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
HIGH…ext/example_theme_docs/custom_config_setting/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
HIGHckanext/example_theme_docs/v09_snippet/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
HIGH…next/example_theme_docs/v12_extra_public_dir/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
HIGHckanext/example_theme_docs/v15_webassets/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
HIGH…xample_theme_docs/v08_custom_helper_function/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
HIGHckanext/example_theme_docs/v13_custom_css/plugin.py0register the most_popular_groups() function above as a template helper function.STRING
Deep Nesting125 hits · 124 pts
SeverityFileLineSnippetContext
LOWckan/common.py264CODE
LOWckan/authz.py210CODE
LOWckan/authz.py66CODE
LOWckan/config/middleware/flask_app.py585CODE
LOWckan/config/declaration/serialize.py44CODE
LOWckan/config/declaration/serialize.py125CODE
LOWckan/config/declaration/serialize.py179CODE
LOWckan/config/declaration/describe.py102CODE
LOWckan/config/declaration/option.py409CODE
LOWckan/config/declaration/load.py103CODE
LOWckan/plugins/blanket.py310CODE
LOWckan/plugins/blanket.py322CODE
LOWckan/plugins/toolkit_sphinx_extension.py152CODE
LOWckan/tests/test_coding_standards.py98CODE
LOWckan/tests/helpers.py480CODE
LOWckan/tests/pytest_ckan/fixtures.py480CODE
LOWckan/tests/controllers/test_home.py66CODE
LOWckan/logic/validators.py38CODE
LOWckan/logic/validators.py714CODE
LOWckan/logic/validators.py895CODE
LOWckan/logic/__init__.py244CODE
LOWckan/logic/__init__.py448CODE
LOWckan/logic/__init__.py91CODE
LOWckan/logic/__init__.py115CODE
LOWckan/logic/__init__.py117CODE
LOWckan/logic/__init__.py562CODE
LOWckan/logic/__init__.py564CODE
LOWckan/logic/action/update.py234CODE
LOWckan/logic/action/update.py1259CODE
LOWckan/logic/action/__init__.py59CODE
LOWckan/logic/action/file.py48CODE
LOWckan/logic/action/file.py108CODE
LOWckan/logic/action/file.py142CODE
LOWckan/logic/action/get.py307CODE
LOWckan/logic/action/get.py623CODE
LOWckan/logic/action/get.py800CODE
LOWckan/logic/action/get.py1664CODE
LOWckan/logic/action/get.py1975CODE
LOWckan/cli/clean.py21CODE
LOWckan/cli/__init__.py141CODE
LOWckan/cli/__init__.py103CODE
LOWckan/cli/file.py199CODE
LOWckan/cli/file.py273CODE
LOWckan/cli/file.py365CODE
LOWckan/cli/translation.py182CODE
LOWckan/cli/views.py41CODE
LOWckan/cli/views.py277CODE
LOWckan/model/base.py192CODE
LOWckan/lib/plugins.py201CODE
LOWckan/lib/plugins.py256CODE
LOWckan/lib/app_globals.py98CODE
LOWckan/lib/authenticator.py15CODE
LOWckan/lib/formatters.py69CODE
LOWckan/lib/formatters.py88CODE
LOWckan/lib/config_tool.py180CODE
LOWckan/lib/jinja_extensions.py76CODE
LOWckan/lib/i18n.py270CODE
LOWckan/lib/create_test_data.py138CODE
LOWckan/lib/create_test_data.py302CODE
LOWckan/lib/helpers.py396CODE
65 more matches not shown…
Self-Referential Comments40 hits · 114 pts
SeverityFileLineSnippetContext
MEDIUMckan/common.py3# This file contains commonly used parts of external libraries. The idea isCOMMENT
MEDIUMckan/plugins/toolkit.py2"""This module is intended to make functions/objects consistently available toSTRING
MEDIUMckan/tests/factories.py20 # Create a user with the factory's default attributes, and get back aSTRING
MEDIUMckan/tests/factories.py37 # Create a user and specify your own user name and email (this worksSTRING
MEDIUMckan/tests/logic/action/test_get.py2128 # Create an organization so we can test that it does not get returned.COMMENT
MEDIUMckan/tests/logic/action/test_get.py2147 # Create a second organization just so we can test that it does not getCOMMENT
MEDIUMckan/tests/logic/action/test_get.py2487 # Create an organization so we can test that it doesn't get returned.COMMENT
MEDIUMckan/tests/logic/action/test_get.py611 # Create a member user and an admin user of the group.COMMENT
MEDIUMckan/tests/logic/action/test_get.py629 # Create a user who isn't a member of any group or organization.COMMENT
MEDIUMckan/tests/logic/action/test_get.py2178 # Create a second organization just so we can test that it does not getCOMMENT
MEDIUMckan/tests/pytest_ckan/ckan_setup.py52 # Create the snapshot of the initial configurationCOMMENT
MEDIUMckan/tests/cli/test_db.py208 # Create a datasetCOMMENT
MEDIUMckan/tests/cli/test_search_index.py193 # Create a datasetCOMMENT
MEDIUMckan/tests/cli/test_search_index.py241 # Create a datasetCOMMENT
MEDIUMckan/logic/action/create.py529 # Create a Package Relationship.COMMENT
MEDIUMckan/lib/plugins.py109 # Create the mappings and register the fallback behaviour if one is found.COMMENT
MEDIUMckan/lib/plugins.py142 # Create the mappings and register the fallback behaviour if one is found.COMMENT
MEDIUMckan/lib/jobs.py308 # This method is called in a worker's work horse process rightSTRING
MEDIUMckan/lib/create_test_data.py112 # Create a couple of vocabularies.COMMENT
MEDIUMckan/lib/create_test_data.py568 # Create a couple of vocabularies.COMMENT
MEDIUMckan/lib/pagination.py541 # Create a link to the first page (unless we are on the first pageSTRING
MEDIUMckan/lib/pagination.py578 # Create a link to the very last page (unless we are on the lastSTRING
MEDIUMckan/lib/pagination.py611 # Create the URL to load a certain pageSTRING
MEDIUMckan/lib/pagination.py615 # Create the URL to load the page area part of a certain page (AJAXSTRING
MEDIUMckanext/activity/tests/test_views.py630 # Create a custom Activity object. This one is inspired by:COMMENT
MEDIUMckanext/activity/tests/test_views.py722 # Create an Activity object as it was in earlier versions of CKAN.COMMENT
MEDIUMckanext/datapusher/tests/test_default_views.py33 # Create a task for `datapusher_hook` to updateCOMMENT
MEDIUMckanext/datapusher/tests/test_default_views.py82 # Create a task for `datapusher_hook` to updateCOMMENT
MEDIUMckanext/datapusher/tests/test_interfaces.py85 # Create a task for `datapusher_hook` to updateCOMMENT
MEDIUMckanext/datapusher/tests/test_action.py104 # Create a task with a state pending to mimic an ongoing jobCOMMENT
MEDIUMckanext/datapusher/tests/test_action.py138 # Create a task with a state pending to mimic an ongoing jobCOMMENT
MEDIUMckanext/datapusher/tests/test_action.py187 # Create a task with a state pending to mimic an ongoing jobCOMMENT
MEDIUMckanext/datapusher/tests/test_action.py239 # Create a task with a state pending to mimic an ongoing jobCOMMENT
MEDIUMckanext/datapusher/tests/test_action.py290 # Create a task with a state pending to mimic an ongoing jobCOMMENT
MEDIUMckanext/example_flask_iblueprint/plugin.py99 # Create a second Blueprint for plugin if neededCOMMENT
MEDIUM…le_iauthfunctions/tests/test_example_iauthfunctions.py110 # Create a user who will *not* be a member of the curators group.COMMENT
MEDIUM…le_iauthfunctions/tests/test_example_iauthfunctions.py113 # Create a user who will be a member of the curators group.COMMENT
MEDIUM…le_iauthfunctions/tests/test_example_iauthfunctions.py116 # Create the curators group, with the 'curator' user as a member.COMMENT
MEDIUM.github/workflows/github-release.yml3# Create a GitHub release when a tag is pushedCOMMENT
MEDIUMdoc/conf.py6# This file is execfile()d with the current directory set to its containing dir.COMMENT
Fake / Example Data60 hits · 73 pts
SeverityFileLineSnippetContext
LOWcypress/e2e/plugins/jquery.slug-preview.cy.js27 var target = this.element.slugPreview({placeholder: 'placeholder'});CODE
LOWcypress/e2e/plugins/jquery.slug-preview.cy.js28 assert.equal(target.find('.slug-preview-value').text(), 'placeholder');CODE
LOWckan/config/declaration/describe.py172 data["placeholder"] = option.placeholderCODE
LOWckan/config/declaration/option.py217 "placeholder",CODE
LOWckan/config/declaration/load.py136 if details["placeholder"]:CODE
LOWckan/config/declaration/load.py137 option.set_placeholder(details["placeholder"])CODE
LOWckan/tests/logic/test_validators.py193 factories.User(username="user01", email="some_email@example.org")CODE
LOWckan/tests/logic/test_validators.py198 factories.User(email="Some_Email@example.org")CODE
LOWckan/tests/logic/action/test_create.py1547 factories.User(email="some_email@example.org")STRING
LOWckan/tests/logic/action/test_create.py1553 email="Some_Email@example.org",STRING
LOWckan/tests/cli/test_generate.py18 result = cli.invoke(generate, ["fake-data", "organization"])CODE
LOWckan/tests/cli/test_generate.py28 generate, ["fake-data", "ckan.tests.factories:Dataset"]CODE
LOWckan/tests/cli/test_generate.py40 ["fake-data", "--factory-class", "ckan.tests.factories:Dataset"],CODE
LOWckan/tests/cli/test_generate.py52 generate, ["fake-data", "resource", f"--name={name}"]CODE
LOWckan/tests/cli/test_generate.py68 ["fake-data", "ckan.tests.factories:User", f"--fullname={name}"],CODE
LOWckan/tests/cli/test_generate.py79 result = cli.invoke(generate, ["fake-data", "organization"])CODE
LOWckan/tests/cli/test_generate.py88 "fake-data",CODE
LOWckan/tests/cli/test_clean.py33 fake_user = {CODE
LOWckan/tests/cli/test_clean.py34 "name": "fake-user",CODE
LOWckan/tests/cli/test_clean.py35 "email": "fake-user@example.com",CODE
LOWckan/tests/cli/test_clean.py41 fake_user = create_with_upload(CODE
LOWckan/tests/cli/test_clean.py42 "<html><body>hello world</body></html>", "index.html", **fake_userCODE
LOWckan/tests/cli/test_clean.py59 f"User {fake_user['name']} has an invalid image:"CODE
LOWckan/tests/cli/test_clean.py60 f" {fake_user['image_url']}"CODE
LOWckan/tests/cli/test_clean.py74 fake_user = {CODE
LOWckan/tests/cli/test_clean.py75 "name": "fake-user",CODE
LOWckan/tests/cli/test_clean.py76 "email": "fake-user@example.com",CODE
LOWckan/tests/cli/test_clean.py81 fake_user = create_with_upload(CODE
LOWckan/tests/cli/test_clean.py82 "<html><body>hello world</body></html>", "index.html", **fake_userCODE
LOWckan/tests/cli/test_clean.py99 assert f"Deleted user: {fake_user['name']}" in result.outputCODE
LOWckan/tests/cli/test_config.py98 "placeholder": "%(ckan.site_url)s",CODE
LOWckan/tests/cli/test_sysadmin.py61 "email=test123@example.org",CODE
LOWckan/logic/schema/__init__.py936 "placeholder": [default(""), unicode_safe],CODE
LOWckan/cli/generate.py257def fake_data(ctx: click.Context, category: Optional[str],CODE
LOWckan/cli/generate.py274 ckan generate fake-data datasetSTRING
LOWckan/cli/generate.py275 ckan generate fake-data dataset --title="My test dataset"STRING
LOWckan/cli/generate.py276 ckan generate fake-data \\STRING
LOWckan/cli/generate.py285 owner_org=$(ckan generate fake-data organization | jq .id -r)STRING
LOWckan/cli/generate.py286 ckan generate fake-data dataset --owner_org=$owner_orgSTRING
LOWckan/templates-midnight-blue/macros/autoform.html14 {'name': 'ckan.site_title', 'control': 'input', 'label': _('Site Title'), 'placeholder': ''},CODE
LOWckan/templates-midnight-blue/macros/autoform.html15 {'name': 'ckan.theme', 'control': 'select', 'options': styles, 'label': _('Style'), 'placeholder': ''},CODE
LOWckan/templates-midnight-blue/macros/autoform.html16 {'name': 'ckan.site_description', 'control': 'input', 'label': _('Site Tag Line'), 'placeholder': ''},CODE
LOWckan/templates-midnight-blue/macros/autoform.html17 {'name': 'ckan.site_logo', 'control': 'input', 'label': _('Site Tag Logo'), 'placeholder': ''},CODE
LOWckan/templates-midnight-blue/macros/autoform.html18 {'name': 'ckan.site_about', 'control': 'markdown', 'label': _('About'), 'placeholder': _('About page text')},CODE
LOWckan/templates-midnight-blue/macros/autoform.html19 {'name': 'ckan.site_intro_text', 'control': 'markdown', 'label': _('Intro Text'), 'placeholder': _('Text on home pCODE
LOWckan/templates-midnight-blue/macros/autoform.html20 {'name': 'ckan.site_custom_css', 'control': 'textarea', 'label': _('Custom CSS'), 'placeholder': _('Customisable cCODE
LOWckan/public/base/javascript/modules/autocomplete.js107 if ( this.el.attr('placeholder') ) {CODE
LOWckan/public/base/javascript/modules/autocomplete.js108 settings.placeholder = this.el.attr('placeholder');CODE
LOWckan/templates/macros/autoform.html14 {'name': 'ckan.site_title', 'control': 'input', 'label': _('Site Title'), 'placeholder': ''},CODE
LOWckan/templates/macros/autoform.html15 {'name': 'ckan.theme', 'control': 'select', 'options': styles, 'label': _('Style'), 'placeholder': ''},CODE
LOWckan/templates/macros/autoform.html16 {'name': 'ckan.site_description', 'control': 'input', 'label': _('Site Tag Line'), 'placeholder': ''},CODE
LOWckan/templates/macros/autoform.html17 {'name': 'ckan.site_logo', 'control': 'input', 'label': _('Site Tag Logo'), 'placeholder': ''},CODE
LOWckan/templates/macros/autoform.html18 {'name': 'ckan.site_about', 'control': 'markdown', 'label': _('About'), 'placeholder': _('About page text')},CODE
LOWckan/templates/macros/autoform.html19 {'name': 'ckan.site_intro_text', 'control': 'markdown', 'label': _('Intro Text'), 'placeholder': _('Text on home pCODE
LOWckan/templates/macros/autoform.html20 {'name': 'ckan.site_custom_css', 'control': 'textarea', 'label': _('Custom CSS'), 'placeholder': _('Customisable cCODE
LOW…-midnight-blue/base/javascript/modules/autocomplete.js107 if ( this.el.attr('placeholder') ) {CODE
LOW…-midnight-blue/base/javascript/modules/autocomplete.js108 settings.placeholder = this.el.attr('placeholder');CODE
LOWckanext/tabledesigner/column_types.py242 example = 'user@example.com'STRING
LOWckanext/example_flask_streaming/tests/10lines.txt5Amet justo donec enim diam, vulputate ut pharetra sit amet, aliquam. Non quam lacus suspendisse faucibus interdum posuerCODE
LOWckanext/example_flask_streaming/tests/10lines.txt5Amet justo donec enim diam, vulputate ut pharetra sit amet, aliquam. Non quam lacus suspendisse faucibus interdum posuerCODE
Cross-Language Confusion14 hits · 65 pts
SeverityFileLineSnippetContext
HIGHckan/tests/lib/test_helpers.py29 self.request_context.push()CODE
HIGHckan/lib/pagination.py443 },null); return false;"STRING
HIGHckan/lib/helpers.py375 _auto_flask_context.push()CODE
HIGHckan/lib/helpers.py568 _auto_flask_context.push()CODE
HIGH…n/migration/versions/106_12d64978ab44_faster_extras.py91 encode(substring(sha256((p.id || j.key)::bytea) for 16), 'hex')STRING
HIGH…n/migration/versions/106_12d64978ab44_faster_extras.py121 encode(substring(sha256((g.id || j.key)::bytea) for 16), 'hex')STRING
HIGHckanext/tabledesigner/column_constraints.py81 errors := errors || ARRAY[[{colname}, {error} || ': "'CODE
HIGHckanext/tabledesigner/column_constraints.py88 errors := errors || ARRAY[[{colname}, {error} ||': "'CODE
HIGHckanext/tabledesigner/column_types.py74 errors := errors || ARRAY[CODE
HIGHckanext/tabledesigner/column_types.py196 errors := errors || ARRAY[[{colname}, 'Invalid choice: "'CODE
HIGHckanext/tabledesigner/column_types.py252 errors := errors || ARRAY[{colname}, {error}];CODE
HIGHckanext/example_icolumntypes/plugin.py51 errors := errors || ARRAY[[CODE
HIGHckanext/datatablesview/tests/test_ajax.py25 {'a': 'a < b && a > 0', 'b': None}CODE
HIGHckanext/example_icolumnconstraints/plugin.py59 errors := errors || ARRAY[[CODE
Modern Structural Boilerplate52 hits · 50 pts
SeverityFileLineSnippetContext
LOWckan/types/__init__.py35__all__ = [CODE
LOWckan/config/environment.py103def update_config() -> None:CODE
LOWckan/config/declaration/__init__.py32__all__ = ["Declaration", "Key", "Flag"]CODE
LOWckan/plugins/interfaces.py44__all__ = [STRING
LOWckan/plugins/interfaces.py788 def update_config(self, config: 'CKANConfig') -> None:STRING
LOWckan/plugins/toolkit.py93__all__ = [CODE
LOWckan/plugins/blanket.py139__all__ = [CODE
LOWckan/plugins/core.py24__all__ = [CODE
LOWckan/cli/__init__.py38 def _update_defaults(self, new_defaults: dict[str, Any]) -> None:CODE
LOWckan/cli/__init__.py48 def _update_config(self) -> None:CODE
LOWckan/model/package.py42logger = logging.getLogger(__name__)CODE
LOWckan/model/package.py44__all__ = ['Package', 'package_table', 'PackageMember', 'package_member_table',CODE
LOWckan/model/package.py436 def set_license(self, license: Any) -> None:CODE
LOWckan/model/domain_object.py21__all__ = ['DomainObject', 'DomainObjectOperation']CODE
LOWckan/model/package_relationship.py26__all__ = ['PackageRelationship', 'package_relationship_table']CODE
LOWckan/model/user.py263 def set_pending(self) -> None:CODE
LOWckan/model/user.py362 def set_user_last_active(self) -> None:CODE
LOWckan/model/term_translation.py7__all__ = ['term_translation_table']CODE
LOWckan/model/modification.py11__all__ = ['DomainObjectModificationExtension']CODE
LOWckan/model/api_token.py17__all__ = [u"ApiToken", u"api_token_table"]CODE
LOWckan/model/api_token.py76 def set_extra(self, key: str, value: Any, commit: bool = False) -> None:CODE
LOWckan/model/system_info.py21__all__ = ['system_info_table', 'SystemInfo',CODE
LOWckan/model/resource.py23__all__ = ['Resource', 'resource_table']CODE
LOWckan/model/__init__.py116__all__ = [CODE
LOWckan/model/resource_view.py14__all__ = ['ResourceView', 'resource_view_table']CODE
LOWckan/model/types.py12__all__ = ['make_uuid', 'JsonType', 'JsonDictType']CODE
LOWckan/model/task_status.py13__all__ = ['TaskStatus', 'task_status_table']CODE
LOWckan/model/group.py21__all__ = ['group_table', 'Group',CODE
LOWckan/model/group.py214 def set_approval_status(self, status: str) -> None:CODE
LOWckan/model/tag.py23__all__ = ['tag_table', 'package_tag_table', 'Tag', 'PackageTag',CODE
LOWckan/model/meta.py12__all__ = ['Session']CODE
LOWckan/lib/plugins.py194def set_default_package_plugin() -> None:CODE
LOWckan/lib/plugins.py306def set_default_group_plugin() -> None:CODE
LOWckan/lib/app_globals.py69def set_theme(asset: str) -> None:CODE
LOWckan/lib/app_globals.py87def set_app_global(key: str, value: str) -> None:CODE
LOWckan/lib/i18n.py245def set_lang(language_code: str) -> None:CODE
LOWckan/lib/search/index.py80 def update_dict(self, data: dict[str, Any], defer_commit: bool = False) -> None:CODE
LOWckan/lib/files/__init__.py28__all__ = [CODE
LOWckan/lib/files/default/__init__.py5__all__ = [CODE
LOWckan/views/__init__.py101def set_controller_and_action() -> None:STRING
LOWckan/views/__init__.py105def set_ckan_current_url(environ: Any) -> None:STRING
LOWckanext/activity/model/activity.py35__all__ = ["Activity", "ActivityDetail"]CODE
LOWckanext/activity/model/__init__.py11__all__ = ["Activity"]CODE
LOWckanext/example_blanket_implementation/cli.py5__all__ = [u"blanket"]CODE
LOWckanext/example_blanket_implementation/views.py5__all__ = [u"blanket"]CODE
LOWckanext/example_blanket_implementation/logic/auth.py5__all__ = [u"sleep", u"wake_up"]CODE
LOW…ext/example_blanket_implementation/logic/validators.py5__all__ = [u"is_blanket"]CODE
LOW…xample_blanket_implementation/logic/action/__init__.py6__all__ = [u"sleep", u"wake_up"]CODE
LOWckanext/tracking/model.py27__all__ = ['TrackingSummary', 'TrackingRaw']CODE
LOWckanext/tracking/plugin.py34 def update_config(self, config: CKANConfig) -> None:CODE
LOWckanext/tracking/middleware.py13logger = logging.getLogger(__name__)CODE
LOWckanext/stats/tests/conftest.py3__all__ = [CODE
Over-Commented Block38 hits · 38 pts
SeverityFileLineSnippetContext
LOWrequirements.txt1#COMMENT
LOWrequirements.txt21cachelib==0.13.0COMMENT
LOWrequirements.txt41 # via -r requirements.inCOMMENT
LOWrequirements.txt61itsdangerous==2.2.0COMMENT
LOWrequirements.txt81 # werkzeugCOMMENT
LOWrequirements.txt101pysolr==3.11.0COMMENT
LOWrequirements.txt121 # via rqCOMMENT
LOWrequirements.txt141 # viaCOMMENT
LOWrequirements.txt161 # flask-loginCOMMENT
LOWpyproject.toml221 "E", # pycodestyle errorCOMMENT
LOWcypress/plugins/index.js1// ***********************************************************COMMENT
LOWcypress/support/e2e.js1// ***********************************************************COMMENT
LOWckan/config/declaration/__init__.py221 # storages. Load such declarations here to make them discoverable viaCOMMENT
LOWckan/public/base/javascript/plugins/jquery.masonry.js1101 }COMMENT
LOWckan/lib/dictization/model_save.py121 if old_list == obj_list:COMMENT
LOWckan/migration/alembic.ini1# A generic, single database configuration.COMMENT
LOWckan/migration/alembic.ini21# the 'revision' command, regardless of autogenerateCOMMENT
LOW…}/ckanext/{{cookiecutter.project_shortname}}/plugin.py1import ckan.plugins as pluginsCOMMENT
LOW…}/ckanext/{{cookiecutter.project_shortname}}/plugin.py41COMMENT
LOW…{cookiecutter.project_shortname}}/assets/webassets.yml1# {{ cookiecutter.project_shortname }}-js:COMMENT
LOWckanext/activity/migration/activity/alembic.ini1# A generic, single database configuration.COMMENT
LOWckanext/activity/migration/activity/alembic.ini21# the 'revision' command, regardless of autogenerateCOMMENT
LOW…anext/example_theme_docs/v07_helper_function/plugin.py21 # that CKAN will use this plugin's custom templates.COMMENT
LOWckanext/example_theme_docs/v02_empty_template/plugin.py21 # that CKAN will use this plugin's custom templates.COMMENT
LOWckanext/example_theme_docs/v05_block/plugin.py21 # that CKAN will use this plugin's custom templates.COMMENT
LOWckanext/example_theme_docs/v04_ckan_extends/plugin.py21 # that CKAN will use this plugin's custom templates.COMMENT
LOWckanext/example_theme_docs/v06_super/plugin.py21 # that CKAN will use this plugin's custom templates.COMMENT
LOWckanext/example_theme_docs/v03_jinja/plugin.py21 # that CKAN will use this plugin's custom templates.COMMENT
LOWckanext/tracking/migration/tracking/alembic.ini1# A generic, single database configuration.COMMENT
LOWckanext/tracking/migration/tracking/alembic.ini21# the 'revision' command, regardless of autogenerateCOMMENT
LOW…ions/migration/example_database_migrations/alembic.ini1# A generic, single database configuration.COMMENT
LOW…ions/migration/example_database_migrations/alembic.ini21# the 'revision' command, regardless of autogenerateCOMMENT
LOWdoc/conf.py1# -*- coding: utf-8 -*-COMMENT
LOWdoc/conf.py421# There are two options for replacing |today|: either, you set today to someCOMMENT
LOWdoc/conf.py481COMMENT
LOWdoc/conf.py501]COMMENT
LOWdoc/conf.py521#html_split_index = FalseCOMMENT
LOWdoc/conf.py541# The paper size ('letter' or 'a4').COMMENT
Excessive Try-Catch Wrapping29 hits · 28 pts
SeverityFileLineSnippetContext
LOWckan/tests/cli/test_db.py232 except Exception:CODE
LOWckan/cli/db.py67 except Exception as e:CODE
LOWckan/cli/db.py230 except Exception as e:CODE
LOWckan/cli/search_index.py62 except Exception as e:CODE
LOWckan/cli/search_index.py209 except Exception as e:CODE
LOWckan/cli/profile.py44 except Exception:CODE
LOWckan/model/base.py52 except Exception as inst:CODE
LOWckan/lib/jobs.py320 except Exception:STRING
LOWckan/lib/jobs.py325 except Exception:STRING
LOWckan/lib/redis.py56 except Exception:CODE
LOWckan/lib/search/index.py306 except Exception as e:CODE
LOWckan/lib/search/index.py317 except Exception as e:CODE
MEDIUMckan/lib/search/index.py302def commit(self) -> None:CODE
LOWckan/lib/search/__init__.py185 except Exception as e:CODE
LOWckan/lib/search/common.py43 except Exception as e:CODE
LOWckan/lib/navl/validators.py324 except Exception:CODE
LOWckan/lib/navl/validators.py328 except Exception:CODE
LOWckan/views/dataset.py611 except Exception: # We don't like bare exceptsCODE
LOWckan/views/dataset.py748 except Exception: # We don't like bare exceptsCODE
LOWckan/views/api.py121 except Exception as inst:STRING
LOWckan/views/api.py340 except Exception as e:STRING
LOWckanext/datatablesview/blueprint.py136 except Exception:STRING
LOWckanext/datapusher/cli.py73 except Exception as e:STRING
LOWckanext/datastore/tests/test_plugin.py42 except Exception as e:CODE
LOWckanext/datastore/backend/postgres.py1852 except Exception:STRING
LOWckanext/datastore/backend/postgres.py2301 except Exception:STRING
LOWckanext/example_igroupform/tests/test_controllers.py44 except Exception as e:CODE
LOWckanext/tracking/middleware.py52 except Exception as e:CODE
LOWckanext/tracking/cli/tracking.py298 except Exception as e:CODE
Redundant / Tautological Comments11 hits · 16 pts
SeverityFileLineSnippetContext
LOWckan/authz.py477 # Check if user is a collaborator with admin roleCOMMENT
LOWckan/logic/validators.py910 # Check if the dataset actually has an owner_org, even if not providedCOMMENT
LOWckan/logic/action/create.py667 # Check if collaborator already existsCOMMENT
LOWckan/lib/datapreview.py204 # Check if a view of this type already existsCOMMENT
LOWckan/lib/datapreview.py208 # Check if a view of this type can preview this resourceCOMMENT
LOWckan/lib/helpers.py441 # Check if this a relative pathCOMMENT
LOWckan/lib/mailer.py75 # Check if extension is setting reply-to via headers or use config optionCOMMENT
LOWckan/lib/dictization/model_dictize.py55 # Set options to avoid any SOLR queries for each group, which wouldCOMMENT
LOWckan/views/api.py236 # Check if action existsSTRING
LOWckanext/datapusher/logic/action.py251 # Check if the uploaded file has been modified in the meantimeCOMMENT
LOWckanext/datapusher/logic/action.py264 # Check if the URL of the file has been modified in the meantimeCOMMENT
AI Structural Patterns13 hits · 13 pts
SeverityFileLineSnippetContext
LOWckan/authz.py551CODE
LOWckan/tests/helpers.py242CODE
LOWckan/tests/helpers.py249CODE
LOWckan/tests/helpers.py257CODE
LOWckan/logic/action/create.py758CODE
LOWckan/logic/action/create.py1489CODE
LOWckan/model/group.py303CODE
LOWckan/lib/pagination.py266CODE
LOWckan/lib/helpers.py2249CODE
LOW…ext/example_theme_docs/custom_config_setting/plugin.py25CODE
LOWckanext/datastore/backend/postgres.py1161CODE
LOWckanext/example_igroupform/tests/test_controllers.py23CODE
LOWckanext/stats/stats.py196CODE
AI Slop Vocabulary7 hits · 13 pts
SeverityFileLineSnippetContext
LOWckan/tests/factories.py48 # If you later want to create a user using these attributes, just pass themSTRING
LOWckan/logic/auth/delete.py132 ## just return true as logic runs through member_deleteCOMMENT
LOWckan/logic/auth/delete.py138 ## just return true as logic runs through member_deleteCOMMENT
MEDIUMckan/views/user.py319 # and we can utilize it for later use.COMMENT
LOWckanext/activity/views.py454 # if the time difference is negative, just return the change that put usCOMMENT
LOWckanext/activity/views.py709 # if the time difference is negative, just return the change that put usCOMMENT
MEDIUM…tatablesview/templates/datatables/datatables_view.html85{#- we create tooltip here instead of javascript so we can leverage the automatic-local-datetime class date conversion CCODE
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALckan/tests/controllers/test_pagination.py107 user.name if factories.User._meta.model.VALID_NAME.match(user.name) else user[0].idCODE
Decorative Section Separators4 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUMckan/model/package.py107## -------------------COMMENT
MEDIUMdoc/conf.py32# ---------------------COMMENT
MEDIUMdoc/conf.py453# -----------------------STRING
MEDIUMdoc/conf.py539# ------------------------STRING
Slop Phrases3 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMbin/remove-old-git-branches.sh20 # you can replace python's section with something like `| jq '.[] | .head.label' -r |`COMMENT
LOWckan/model/package_relationship.py64 # don't forget to add specs to Solr's schema.xmlCOMMENT
LOWckan/model/package_relationship.py64 # don't forget to add specs to Solr's schema.xmlCOMMENT
Overly Generic Function Names3 hits · 3 pts
SeverityFileLineSnippetContext
LOWckan/tests/plugins/plugin_order/plugins.py19 def helper(self):CODE
LOWckan/tests/plugins/plugin_order/plugins.py39 def helper(self):CODE
LOWckan/lib/i18n.py227def handle_request(request: Request, tmpl_context: Any) -> str:CODE
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippetContext
LOWckan/public/base/javascript/htmx-ckan.js147 // The event is triggered on every trigger for a request, so we need to check if the elementCOMMENT
LOWckan/public-midnight-blue/base/javascript/htmx-ckan.js147 // The event is triggered on every trigger for a request, so we need to check if the elementCOMMENT