python: Fix PAR001 Redundant parentheses.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
parent
aeb89bcae5
commit
059458b4ca
21 changed files with 29 additions and 41 deletions
|
@ -36,17 +36,6 @@ python_rules = RuleList(
|
|||
"good_lines": ["def foo (self):"],
|
||||
"bad_lines": ["def foo(self: Any):"],
|
||||
},
|
||||
# This next check could have false positives, but it seems pretty
|
||||
# rare; if we find any, they can be added to the exclude list for
|
||||
# this rule.
|
||||
{
|
||||
"pattern": r" % [a-zA-Z0-9_.]*\)?$",
|
||||
"description": "Used % comprehension without a tuple",
|
||||
},
|
||||
{
|
||||
"pattern": r".*%s.* % \([a-zA-Z0-9_.]*\)$",
|
||||
"description": "Used % comprehension without a tuple",
|
||||
},
|
||||
{
|
||||
"pattern": r"__future__",
|
||||
"include_only": {"zulip_bots/zulip_bots/bots/"},
|
||||
|
|
|
@ -43,7 +43,7 @@ the Python version this command is executed with."""
|
|||
py_version = tuple(int(num) for num in py_version_list[0:2])
|
||||
venv_name = f"zulip-api-py{py_version[0]}-venv"
|
||||
|
||||
if py_version <= (3, 1) and (not options.force):
|
||||
if py_version <= (3, 1) and not options.force:
|
||||
print(
|
||||
red
|
||||
+ "Provision failed: Cannot create venv with outdated Python version ({}).\n"
|
||||
|
|
|
@ -75,7 +75,7 @@ class IRCBot(irc.bot.SingleServerIRCBot):
|
|||
in_the_specified_stream = msg["display_recipient"] == self.stream
|
||||
at_the_specified_subject = msg["subject"].casefold() == self.topic.casefold()
|
||||
if in_the_specified_stream and at_the_specified_subject:
|
||||
msg["content"] = ("@**{}**: ".format(msg["sender_full_name"])) + msg["content"]
|
||||
msg["content"] = "@**{}**: ".format(msg["sender_full_name"]) + msg["content"]
|
||||
send = lambda x: self.c.privmsg(self.channel, x)
|
||||
else:
|
||||
return
|
||||
|
|
|
@ -82,7 +82,7 @@ parser.add_argument(
|
|||
|
||||
options = parser.parse_args()
|
||||
|
||||
if not (options.zulip_email):
|
||||
if not options.zulip_email:
|
||||
parser.error("You must specify --user")
|
||||
|
||||
zulip_client = zulip.init_from_options(options)
|
||||
|
|
|
@ -227,7 +227,7 @@ for feed_url in feed_urls:
|
|||
)
|
||||
if (
|
||||
entry_time is not None
|
||||
and (time.time() - calendar.timegm(entry_time)) > OLDNESS_THRESHOLD * 60 * 60 * 24
|
||||
and time.time() - calendar.timegm(entry_time) > OLDNESS_THRESHOLD * 60 * 60 * 24
|
||||
):
|
||||
# As a safeguard against misbehaving feeds, don't try to process
|
||||
# entries older than some threshold.
|
||||
|
@ -235,7 +235,7 @@ for feed_url in feed_urls:
|
|||
if entry_hash in old_feed_hashes:
|
||||
# We've already seen this. No need to process any older entries.
|
||||
break
|
||||
if (not old_feed_hashes) and (len(new_hashes) >= 3):
|
||||
if not old_feed_hashes and len(new_hashes) >= 3:
|
||||
# On a first run, pick up the 3 most recent entries. An RSS feed has
|
||||
# entries in reverse chronological order.
|
||||
break
|
||||
|
|
|
@ -122,7 +122,7 @@ at <https://zulip.com/integrations/doc/trello>.
|
|||
parser.add_argument(
|
||||
"--trello-board-id",
|
||||
required=True,
|
||||
help=("The Trello board short ID. Can usually be found in the URL of the Trello board."),
|
||||
help="The Trello board short ID. Can usually be found in the URL of the Trello board.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--trello-api-key",
|
||||
|
|
|
@ -474,7 +474,7 @@ def process_notice(
|
|||
# Drop messages not to the listed subscriptions
|
||||
if is_personal and not options.forward_personals:
|
||||
return
|
||||
if (zephyr_class.lower() not in current_zephyr_subs) and not is_personal:
|
||||
if zephyr_class.lower() not in current_zephyr_subs and not is_personal:
|
||||
logger.debug("Skipping ... %s/%s/%s", zephyr_class, zephyr_instance, is_personal)
|
||||
return
|
||||
if notice.z_default_format.startswith(b"Zephyr error: See") or notice.z_default_format.endswith(
|
||||
|
@ -916,7 +916,7 @@ def maybe_forward_to_zephyr(message: Dict[str, Any], zulip_client: zulip.Client)
|
|||
# The key string can be used to direct any type of text.
|
||||
if message["sender_email"] == zulip_account_email:
|
||||
if not (
|
||||
(message["type"] == "stream")
|
||||
message["type"] == "stream"
|
||||
or (
|
||||
message["type"] == "private"
|
||||
and False
|
||||
|
|
|
@ -60,7 +60,7 @@ def send_message(recipients: List[str], stream: str, subject: str, message: str)
|
|||
if len(recipients) != 0 and has_stream:
|
||||
click.echo("You cannot specify both a username and a stream/subject.")
|
||||
raise SystemExit(1)
|
||||
if len(recipients) == 0 and (has_stream != has_subject):
|
||||
if len(recipients) == 0 and has_stream != has_subject:
|
||||
click.echo("Stream messages must have a subject")
|
||||
raise SystemExit(1)
|
||||
if len(recipients) == 0 and not has_stream:
|
||||
|
|
|
@ -77,7 +77,7 @@ def main() -> int:
|
|||
# Sanity check user data
|
||||
if len(options.recipients) != 0 and (options.stream or options.subject):
|
||||
parser.error("You cannot specify both a username and a stream/subject.")
|
||||
if len(options.recipients) == 0 and (bool(options.stream) != bool(options.subject)):
|
||||
if len(options.recipients) == 0 and bool(options.stream) != bool(options.subject):
|
||||
parser.error("Stream messages must have a subject")
|
||||
if len(options.recipients) == 0 and not (options.stream and options.subject):
|
||||
parser.error("You must specify a stream/subject or at least one recipient.")
|
||||
|
|
|
@ -401,7 +401,7 @@ def make_loss_response(board: chess.Board, reason: str) -> str:
|
|||
|
||||
Returns: The loss response string.
|
||||
"""
|
||||
return ("*{}* {}. **{}** wins!\n\n{}").format(
|
||||
return "*{}* {}. **{}** wins!\n\n{}".format(
|
||||
"White" if board.turn else "Black",
|
||||
reason,
|
||||
"Black" if board.turn else "White",
|
||||
|
@ -418,7 +418,7 @@ def make_not_legal_response(board: chess.Board, move_san: str) -> str:
|
|||
|
||||
Returns: The not-legal-move response string.
|
||||
"""
|
||||
return ("Sorry, the move *{}* isn't legal.\n\n{}\n\n\n{}").format(
|
||||
return "Sorry, the move *{}* isn't legal.\n\n{}\n\n\n{}".format(
|
||||
move_san, make_str(board, board.turn), make_footer()
|
||||
)
|
||||
|
||||
|
|
|
@ -62,10 +62,10 @@ def get_bot_converter_response(message: Dict[str, str], bot_handler: BotHandler)
|
|||
results = []
|
||||
|
||||
for convert_index in convert_indexes:
|
||||
if (convert_index + 1) < len(words) and words[convert_index + 1] == "help":
|
||||
if convert_index + 1 < len(words) and words[convert_index + 1] == "help":
|
||||
results.append(utils.HELP_MESSAGE)
|
||||
continue
|
||||
if (convert_index + 3) < len(words):
|
||||
if convert_index + 3 < len(words):
|
||||
number = words[convert_index + 1]
|
||||
unit_from = utils.ALIASES.get(words[convert_index + 2], words[convert_index + 2])
|
||||
unit_to = utils.ALIASES.get(words[convert_index + 3], words[convert_index + 3])
|
||||
|
@ -132,7 +132,7 @@ def get_bot_converter_response(message: Dict[str, str], bot_handler: BotHandler)
|
|||
|
||||
new_content = ""
|
||||
for idx, result in enumerate(results, 1):
|
||||
new_content += ((str(idx) + ". conversion: ") if len(results) > 1 else "") + result + "\n"
|
||||
new_content += (str(idx) + ". conversion: " if len(results) > 1 else "") + result + "\n"
|
||||
|
||||
return new_content
|
||||
|
||||
|
|
|
@ -62,16 +62,16 @@ class GameOfFifteenModel:
|
|||
if tile not in coordinates:
|
||||
raise BadMoveError("You can only move tiles which exist in the board.")
|
||||
i, j = coordinates[tile]
|
||||
if (j - 1) > -1 and board[i][j - 1] == 0:
|
||||
if j - 1 > -1 and board[i][j - 1] == 0:
|
||||
board[i][j - 1] = tile
|
||||
board[i][j] = 0
|
||||
elif (i - 1) > -1 and board[i - 1][j] == 0:
|
||||
elif i - 1 > -1 and board[i - 1][j] == 0:
|
||||
board[i - 1][j] = tile
|
||||
board[i][j] = 0
|
||||
elif (j + 1) < 3 and board[i][j + 1] == 0:
|
||||
elif j + 1 < 3 and board[i][j + 1] == 0:
|
||||
board[i][j + 1] = tile
|
||||
board[i][j] = 0
|
||||
elif (i + 1) < 3 and board[i + 1][j] == 0:
|
||||
elif i + 1 < 3 and board[i + 1][j] == 0:
|
||||
board[i + 1][j] = tile
|
||||
board[i][j] = 0
|
||||
else:
|
||||
|
|
|
@ -85,7 +85,7 @@ def generate_ticket_id(storage: Any) -> str:
|
|||
except KeyError:
|
||||
incident_num = 0
|
||||
incident_num += 1
|
||||
incident_num = incident_num % (1000)
|
||||
incident_num = incident_num % 1000
|
||||
storage.put("ticket_id", incident_num)
|
||||
ticket_id = "TICKET%04d" % (incident_num,)
|
||||
return ticket_id
|
||||
|
|
|
@ -64,7 +64,7 @@ class LinkShortenerHandler:
|
|||
|
||||
shortened_links = [self.shorten_link(link) for link in link_matches]
|
||||
link_pairs = [
|
||||
(link_match + ": " + shortened_link)
|
||||
link_match + ": " + shortened_link
|
||||
for link_match, shortened_link in zip(link_matches, shortened_links)
|
||||
if shortened_link != ""
|
||||
]
|
||||
|
|
|
@ -152,7 +152,7 @@ def is_legal_move(v1, h1, v2, h2, turn, phase, grid):
|
|||
return (
|
||||
is_in_grid(v2, h2)
|
||||
and is_empty(v2, h2, grid)
|
||||
and (not is_jump(v1, h1, v2, h2))
|
||||
and not is_jump(v1, h1, v2, h2)
|
||||
and is_own_piece(v1, h1, turn, grid)
|
||||
)
|
||||
|
||||
|
|
|
@ -34,8 +34,7 @@ class MerelsModel:
|
|||
data = game_data.GameData(merels.get_game_data(self.topic))
|
||||
|
||||
return data.get_phase() > 1 and (
|
||||
(mechanics.get_piece("X", data.grid()) <= 2)
|
||||
or (mechanics.get_piece("O", data.grid()) <= 2)
|
||||
mechanics.get_piece("X", data.grid()) <= 2 or mechanics.get_piece("O", data.grid()) <= 2
|
||||
)
|
||||
|
||||
def make_move(self, move: str, player_number: int, computer_move: bool = False) -> Any:
|
||||
|
|
|
@ -194,8 +194,8 @@ class TicTacToeModel:
|
|||
move_coords = move_coords_str.split(",")
|
||||
# Subtraction must be done to convert to the right indices,
|
||||
# since computers start numbering at 0.
|
||||
row = (int(move_coords[1])) - 1
|
||||
column = (int(move_coords[0])) - 1
|
||||
row = int(move_coords[1]) - 1
|
||||
column = int(move_coords[0]) - 1
|
||||
if board[row][column] != 0:
|
||||
raise BadMoveError("Make sure your space hasn't already been filled.")
|
||||
board[row][column] = player_number + 1
|
||||
|
|
|
@ -83,7 +83,7 @@ class TestTrelloBot(BotTestCase, DefaultTests):
|
|||
with self.mock_http_conversation("get_lists"):
|
||||
self.verify_reply(
|
||||
"get-all-lists TEST",
|
||||
("**Lists:**\n1. TEST_A\n * TEST_1\n2. TEST_B\n * TEST_2"),
|
||||
"**Lists:**\n1. TEST_A\n * TEST_1\n2. TEST_B\n * TEST_2",
|
||||
)
|
||||
|
||||
def test_command_exceptions(self) -> None:
|
||||
|
|
|
@ -134,7 +134,7 @@ def generate_quiz_id(storage: Any) -> str:
|
|||
except (KeyError, TypeError):
|
||||
quiz_num = 0
|
||||
quiz_num += 1
|
||||
quiz_num = quiz_num % (1000)
|
||||
quiz_num = quiz_num % 1000
|
||||
storage.put("quiz_id", quiz_num)
|
||||
quiz_id = "Q%03d" % (quiz_num,)
|
||||
return quiz_id
|
||||
|
|
|
@ -40,7 +40,7 @@ class WeatherHandler:
|
|||
@**Weather Bot** Portland, Me
|
||||
""".strip()
|
||||
|
||||
if (message["content"] == "help") or (message["content"] == ""):
|
||||
if message["content"] == "help" or message["content"] == "":
|
||||
response = help_content
|
||||
else:
|
||||
api_params = dict(q=message["content"], APPID=self.api_key)
|
||||
|
|
|
@ -92,7 +92,7 @@ class YodaSpeakHandler:
|
|||
def handle_input(self, message: Dict[str, str], bot_handler: BotHandler) -> None:
|
||||
original_content = message["content"]
|
||||
|
||||
if self.is_help(original_content) or (original_content == ""):
|
||||
if self.is_help(original_content) or original_content == "":
|
||||
bot_handler.send_reply(message, HELP_MESSAGE)
|
||||
|
||||
else:
|
||||
|
|
Loading…
Add table
Reference in a new issue