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:
BaseAPIAPI 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.prevent_reactivation (
Optional[bool], default:None) – Prevent reactivation of a removed rule.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", ... )
- delete(key)[source]
Delete a custom rule.
Requires ‘Administer Quality Profiles’ permission.
Example
>>> client.rules.delete(key="python:my-rule")
- repositories(language=None, q=None)[source]
List rule repositories.
- Parameters:
- 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.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.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.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.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.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:
- 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:
- 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.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.
- 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:
SonarQubeModelA parameter for a rule.
- key
Parameter key.
- html_desc
HTML description.
- default_value
Default value.
- type
Parameter type.
- 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:
SonarQubeModelA 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)
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)
- 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:
SonarQubeModelResponse 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:
SonarQubeModelResponse from showing a rule.
- rule
The rule details.
- actives
Active instances of the rule in quality profiles.
- 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:
SonarQubeModelResponse from listing rule repositories.
- repositories
List of repositories.
- 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:
SonarQubeModelResponse from listing rule tags.
- tags
List of tags.
- 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].