include::../description.adoc[]

== Noncompliant Code Example

With the default threshold of 3:
----
def run():
    prepare("this is a duplicate")  # Noncompliant - "this is a duplicate" is duplicated 3 times
    execute("this is a duplicate")
    release("this is a duplicate")
----

== Compliant Solution

----
ACTION_1 = "action1"

def run():
    prepare(ACTION_1)
    execute(ACTION_1)
    release(ACTION_1)
----

== Exceptions

No issue will be raised on:
* duplicated string in decorators
* strings with less than 5 characters
* strings with only letters, numbers and underscores

----
@app.route("/api/users/", methods=['GET', 'POST', 'PUT'])
def users():
    pass

@app.route("/api/projects/", methods=['GET', 'POST', 'PUT'])  # Compliant
def projects():
    pass
----
