<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_range_by_effective_partition_key(self, effective_partition_key_value):
 """Gets the range containing the given partition key :param str effective_partition_key_value: The partition key value. :return: The partition key range. :rtype: dict """

        if _CollectionRoutingMap.MinimumInclusiveEffectivePartitionKey == effective_partition_key_value:
            return self._orderedPartitionKeyRanges[0]
        
        if _CollectionRoutingMap.MaximumExclusiveEffectivePartitionKey == effective_partition_key_value:
            return None
        
        sortedLow = [(r.min, not r.isMinInclusive) for r in self._orderedRanges]

        index = bisect.bisect_right(sortedLow, (effective_partition_key_value, True))
        if (index > 0):
            index = index -1
        return self._orderedPartitionKeyRanges[index]