Rules

API for managing SonarQube rules.

Rules API for SonarQube SDK.

This module provides methods to search and manage SonarQube rules.

Example

Using the Rules API:

from sonarqube import SonarQubeClient

client = SonarQubeClient(base_url="...", token="...")

# Search for rules
rules = client.rules.search(languages=["py"])
for rule in rules.rules:
    print(f"{rule.key}: {rule.name}")
class sonarqube.api.rules.RulesAPI(client)[source]

Bases: BaseAPI

API for managing SonarQube rules.

Rules are the coding standards that SonarQube uses to analyze code. This API provides methods to search, view, and customize rules.

API_PATH

Base path for rules API (“/api/rules”).

Example

Using the rules API:

# Search for Python rules
rules = client.rules.search(languages=["py"])

# Get rule details
rule = client.rules.show(key="python:S1234")
Parameters:

client (HTTPClient)

create(custom_key, markdown_description, name, template_key, clean_code_attribute=None, impacts=None, params=None, prevent_reactivation=None, severity=None, status=None, type_=None)[source]

Create a custom rule.

Requires ‘Administer Quality Profiles’ permission.

Parameters:
  • custom_key (str) – Key for the custom rule.

  • markdown_description (str) – Rule description in markdown.

  • name (str) – Rule name.

  • template_key (str) – Template rule key.

  • clean_code_attribute (Optional[str], default: None) – Clean code attribute.

  • impacts (Optional[str], default: None) – Impacts specification.

  • params (Optional[str], default: None) – Rule parameters.

  • prevent_reactivation (Optional[bool], default: None) – Prevent reactivation of a removed rule.

  • severity (Optional[str], default: None) – Rule severity.

  • status (Optional[str], default: None) – Rule status.

  • type – Rule type.

  • type_ (str | None)

Return type:

Rule

Returns:

The created rule.

Example

>>> rule = client.rules.create(
...     custom_key="my-rule",
...     markdown_description="Description",
...     name="My Custom Rule",
...     template_key="python:S100",
... )
Parameters:
  • type_ (Optional[str], default: None)

  • custom_key (str)

  • markdown_description (str)

  • name (str)

  • template_key (str)

  • clean_code_attribute (str | None)

  • impacts (str | None)

  • params (str | None)

  • prevent_reactivation (bool | None)

  • severity (str | None)

  • status (str | None)

Return type:

Rule

delete(key)[source]

Delete a custom rule.

Requires ‘Administer Quality Profiles’ permission.

Parameters:

key (str) – Rule key.

Return type:

None

Example

>>> client.rules.delete(key="python:my-rule")
repositories(language=None, q=None)[source]

List rule repositories.

Parameters:
  • language (Optional[str], default: None) – Filter by language.

  • q (Optional[str], default: None) – Search query for repository name.

Return type:

RuleRepositoriesResponse

Returns:

Response containing list of repositories.

Example

>>> repos = client.rules.repositories(language="py")
>>> for repo in repos.repositories:
...     print(repo)
search(activation=None, active_severities=None, asc=None, available_since=None, clean_code_attribute_categories=None, cwe=None, f=None, facets=None, impact_severities=None, impact_software_qualities=None, include_external=None, inheritance=None, is_template=None, languages=None, owasp_top10=None, owasp_top10_2021=None, p=None, ps=None, q=None, qprofile=None, repositories=None, rule_key=None, s=None, sans_top25=None, severities=None, sonarsource_security=None, statuses=None, tags=None, template_key=None, types=None)[source]

Search for rules.

Parameters:
  • activation (Optional[bool], default: None) – Filter by activation status in quality profile.

  • active_severities (Optional[list[str]], default: None) – Filter by active severities.

  • asc (Optional[bool], default: None) – Ascending sort order.

  • available_since (Optional[str], default: None) – Filter by availability date.

  • clean_code_attribute_categories (Optional[list[str]], default: None) – Clean code attribute categories.

  • cwe (Optional[list[str]], default: None) – Filter by CWE identifiers.

  • f (Optional[list[str]], default: None) – Fields to return.

  • facets (Optional[list[str]], default: None) – Facets to return.

  • impact_severities (Optional[list[str]], default: None) – Impact severities.

  • impact_software_qualities (Optional[list[str]], default: None) – Impact software qualities.

  • include_external (Optional[bool], default: None) – Include external rules.

  • inheritance (Optional[list[str]], default: None) – Filter by inheritance.

  • is_template (Optional[bool], default: None) – Filter template rules.

  • languages (Optional[list[str]], default: None) – Filter by languages.

  • owasp_top10 (Optional[list[str]], default: None) – Filter by OWASP Top 10 2017.

  • owasp_top10_2021 (Optional[list[str]], default: None) – Filter by OWASP Top 10 2021.

  • p (Optional[int], default: None) – Page number.

  • ps (Optional[int], default: None) – Page size.

  • q (Optional[str], default: None) – Search query.

  • qprofile (Optional[str], default: None) – Quality profile key.

  • repositories (Optional[list[str]], default: None) – Filter by repositories.

  • rule_key (Optional[str], default: None) – Filter by rule key.

  • s (Optional[str], default: None) – Sort field.

  • sans_top25 (Optional[list[str]], default: None) – Filter by SANS Top 25.

  • severities (Optional[list[str]], default: None) – Filter by severities.

  • sonarsource_security (Optional[list[str]], default: None) – Filter by SonarSource security.

  • statuses (Optional[list[str]], default: None) – Filter by statuses.

  • tags (Optional[list[str]], default: None) – Filter by tags.

  • template_key (Optional[str], default: None) – Filter by template key.

  • types (Optional[list[str]], default: None) – Filter by types.

Return type:

RuleSearchResponse

Returns:

Response containing list of rules.

Example

>>> response = client.rules.search(languages=["py"])
>>> for rule in response.rules:
...     print(f"{rule.key}: {rule.name}")
show(key, actives=None)[source]

Get rule details.

Parameters:
  • key (str) – Rule key.

  • actives (Optional[bool], default: None) – Include active instances in quality profiles.

Return type:

RuleShowResponse

Returns:

Response containing rule details.

Example

>>> response = client.rules.show(key="python:S1234")
>>> print(response.rule.name)
tags(ps=None, q=None)[source]

List rule tags.

Parameters:
  • ps (Optional[int], default: None) – Page size.

  • q (Optional[str], default: None) – Search query for tags.

Return type:

RuleTagsResponse

Returns:

Response containing list of tags.

Example

>>> response = client.rules.tags()
>>> for tag in response.tags:
...     print(tag)
update(key, markdown_description=None, markdown_note=None, name=None, params=None, remediation_fn_base_effort=None, remediation_fn_type=None, remediation_gap_multiplier=None, severity=None, status=None, tags=None)[source]

Update a rule.

Requires ‘Administer Quality Profiles’ permission.

Parameters:
  • key (str) – Rule key.

  • markdown_description (Optional[str], default: None) – Rule description in markdown.

  • markdown_note (Optional[str], default: None) – Note in markdown.

  • name (Optional[str], default: None) – Rule name.

  • params (Optional[str], default: None) – Rule parameters.

  • remediation_fn_base_effort (Optional[str], default: None) – Remediation function base effort.

  • remediation_fn_type (Optional[str], default: None) – Remediation function type.

  • remediation_gap_multiplier (Optional[str], default: None) – Remediation gap multiplier.

  • severity (Optional[str], default: None) – Rule severity.

  • status (Optional[str], default: None) – Rule status.

  • tags (Optional[list[str]], default: None) – Rule tags.

Return type:

Rule

Returns:

The updated rule.

Example

>>> rule = client.rules.update(key="python:S1234", tags=["team-a", "security"])

Models

Pydantic models for Rules API.

This module provides models for the /api/rules endpoints including searching and managing rules.

Example

Using rule models:

from sonarqube.models.rules import RuleSearchResponse

response = client.rules.search(languages=["py"])
for rule in response.rules:
    print(f"{rule.key}: {rule.name}")
class sonarqube.models.rules.RuleParam(**data)[source]

Bases: SonarQubeModel

A parameter for a rule.

key

Parameter key.

html_desc

HTML description.

default_value

Default value.

type

Parameter type.

Parameters:
  • data (Any)

  • key (str)

  • htmlDesc (str | None)

  • defaultValue (str | None)

  • type (str | None)

key: str
html_desc: Optional[str]
default_value: Optional[str]
type: Optional[str]
model_config: ClassVar[ConfigDict] = {'extra': 'ignore', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True, 'validate_default': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class sonarqube.models.rules.Rule(**data)[source]

Bases: SonarQubeModel

A SonarQube rule.

key

Unique rule key.

repo

Rule repository.

name

Rule name.

created_at

Creation date.

html_desc

HTML description.

md_desc

Markdown description.

severity

Rule severity.

status

Rule status.

is_template

Whether this is a template rule.

template_key

Template rule key if this is based on a template.

tags

Rule tags.

sys_tags

System tags.

lang

Language key.

lang_name

Language name.

params

Rule parameters.

type

Rule type (BUG, VULNERABILITY, CODE_SMELL, SECURITY_HOTSPOT).

internal_key

Internal rule key.

is_external

Whether this is an external rule.

Example

>>> rule = Rule(
...     key="python:S1234",
...     repo="python",
...     name="Unused variables should be removed",
...     severity="MAJOR",
... )
Parameters:
  • data (Any)

  • key (str)

  • repo (str | None)

  • name (str | None)

  • createdAt (str | None)

  • htmlDesc (str | None)

  • mdDesc (str | None)

  • severity (str | None)

  • status (str | None)

  • isTemplate (bool | None)

  • templateKey (str | None)

  • tags (list[str] | None)

  • sysTags (list[str] | None)

  • lang (str | None)

  • langName (str | None)

  • params (list[RuleParam] | None)

  • type (str | None)

  • internalKey (str | None)

  • isExternal (bool | None)

  • cleanCodeAttribute (str | None)

  • cleanCodeAttributeCategory (str | None)

  • impacts (list[dict[str, Any]] | None)

  • descriptionSections (list[dict[str, Any]] | None)

  • educationPrinciples (list[str] | None)

key: str
repo: Optional[str]
name: Optional[str]
created_at: Optional[str]
html_desc: Optional[str]
md_desc: Optional[str]
severity: Optional[str]
status: Optional[str]
is_template: Optional[bool]
template_key: Optional[str]
tags: Optional[list[str]]
sys_tags: Optional[list[str]]
lang: Optional[str]
lang_name: Optional[str]
params: Optional[list[RuleParam]]
type: Optional[str]
internal_key: Optional[str]
is_external: Optional[bool]
clean_code_attribute: Optional[str]
clean_code_attribute_category: Optional[str]
impacts: Optional[list[dict[str, Any]]]
description_sections: Optional[list[dict[str, Any]]]
education_principles: Optional[list[str]]
model_config: ClassVar[ConfigDict] = {'extra': 'ignore', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True, 'validate_default': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class sonarqube.models.rules.RuleSearchResponse(**data)[source]

Bases: SonarQubeModel

Response from searching rules.

total

Total number of rules.

p

Page number.

ps

Page size.

rules

List of rules.

facets

Facet information.

Example

>>> response = client.rules.search(languages=["py"])
>>> print(f"Found {response.total} rules")
>>> for rule in response.rules:
...     print(rule.name)
Parameters:
total: int
p: int
ps: int
rules: list[Rule]
facets: Optional[list[dict[str, Any]]]
paging: Optional[Paging]
model_config: ClassVar[ConfigDict] = {'extra': 'ignore', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True, 'validate_default': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class sonarqube.models.rules.RuleShowResponse(**data)[source]

Bases: SonarQubeModel

Response from showing a rule.

rule

The rule details.

actives

Active instances of the rule in quality profiles.

Parameters:
rule: Rule
actives: Optional[list[dict[str, Any]]]
model_config: ClassVar[ConfigDict] = {'extra': 'ignore', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True, 'validate_default': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class sonarqube.models.rules.RuleRepositoriesResponse(**data)[source]

Bases: SonarQubeModel

Response from listing rule repositories.

repositories

List of repositories.

Parameters:
repositories: list[dict[str, Any]]
model_config: ClassVar[ConfigDict] = {'extra': 'ignore', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True, 'validate_default': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class sonarqube.models.rules.RuleTagsResponse(**data)[source]

Bases: SonarQubeModel

Response from listing rule tags.

tags

List of tags.

Parameters:
tags: list[str]
model_config: ClassVar[ConfigDict] = {'extra': 'ignore', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True, 'validate_default': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].