You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pr@cassandra.apache.org by "Copilot (via GitHub)" <gi...@apache.org> on 2026/04/08 14:05:45 UTC
Re: [PR] Pylint reports some missing functions in cqlshlib [cassandra]
Copilot commented on code in PR #4653:
URL: https://github.com/apache/cassandra/pull/4653#discussion_r3051878750
##########
pylib/cqlshlib/saferscanner.py:
##########
@@ -30,6 +30,7 @@ class SaferScannerBase(re.Scanner):
@classmethod
def subpat(cls, phrase, flags):
+ # pylint: disable=no-member
return cls.scrub_sub(re.sre_parse.parse(phrase, flags), flags)
Review Comment:
The standalone `# pylint: disable=no-member` directives inside methods disable the check for the remainder of the current scope (function/method), which can unintentionally hide real `no-member` issues later in the same method. Prefer either (a) importing the internal modules explicitly (e.g., `from re import sre_parse` / `from re import _parser`) so Pylint can resolve the symbols without suppression, or (b) using a tightly-scoped disable/enable pair around only the minimal block that needs it.
##########
pylib/cqlshlib/saferscanner.py:
##########
@@ -38,6 +39,7 @@ def scrub_sub(cls, sub, flags):
seqtypes = (type(()), type([]))
for op, arg in sub.data:
if type(arg) in seqtypes:
+ # pylint: disable=no-member
arg = [cls.scrub_sub(a, flags) if isinstance(a, re.sre_parse.SubPattern) else a
Review Comment:
The standalone `# pylint: disable=no-member` directives inside methods disable the check for the remainder of the current scope (function/method), which can unintentionally hide real `no-member` issues later in the same method. Prefer either (a) importing the internal modules explicitly (e.g., `from re import sre_parse` / `from re import _parser`) so Pylint can resolve the symbols without suppression, or (b) using a tightly-scoped disable/enable pair around only the minimal block that needs it.
##########
pylib/cqlshlib/saferscanner.py:
##########
@@ -49,6 +51,7 @@ def scrub_sub(cls, sub, flags):
raise ValueError("Named captures not allowed in SaferScanner lexicon")
if sub.pattern.flags ^ flags:
raise ValueError("RE flag setting not allowed in SaferScanner lexicon (%s)" % (bin(sub.pattern.flags),))
+ # pylint: disable=no-member
return re.sre_parse.SubPattern(sub.pattern, scrubbedsub)
Review Comment:
The standalone `# pylint: disable=no-member` directives inside methods disable the check for the remainder of the current scope (function/method), which can unintentionally hide real `no-member` issues later in the same method. Prefer either (a) importing the internal modules explicitly (e.g., `from re import sre_parse` / `from re import _parser`) so Pylint can resolve the symbols without suppression, or (b) using a tightly-scoped disable/enable pair around only the minimal block that needs it.
##########
pylib/cqlshlib/saferscanner.py:
##########
@@ -57,6 +60,7 @@ class Py36SaferScanner(SaferScannerBase):
def __init__(self, lexicon, flags=0):
self.lexicon = lexicon
p = []
+ # pylint: disable=no-member
s = re.sre_parse.Pattern()
Review Comment:
The standalone `# pylint: disable=no-member` directives inside methods disable the check for the remainder of the current scope (function/method), which can unintentionally hide real `no-member` issues later in the same method. Prefer either (a) importing the internal modules explicitly (e.g., `from re import sre_parse` / `from re import _parser`) so Pylint can resolve the symbols without suppression, or (b) using a tightly-scoped disable/enable pair around only the minimal block that needs it.
##########
pylib/cqlshlib/saferscanner.py:
##########
@@ -73,6 +77,7 @@ class Py38SaferScanner(SaferScannerBase):
def __init__(self, lexicon, flags=0):
self.lexicon = lexicon
p = []
+ # pylint: disable=no-member
s = re.sre_parse.State()
Review Comment:
The standalone `# pylint: disable=no-member` directives inside methods disable the check for the remainder of the current scope (function/method), which can unintentionally hide real `no-member` issues later in the same method. Prefer either (a) importing the internal modules explicitly (e.g., `from re import sre_parse` / `from re import _parser`) so Pylint can resolve the symbols without suppression, or (b) using a tightly-scoped disable/enable pair around only the minimal block that needs it.
##########
pylib/cqlshlib/cqlhandling.py:
##########
@@ -132,6 +132,43 @@ def cql_parse(self, text, startsymbol='Start'):
tokens = self.cql_massage_tokens(tokens)
return self.parse(startsymbol, tokens, init_bindings={'*SRC*': text})
+ @staticmethod
+ def dequote_value(cqlword):
+ cqlword = cqlword.strip()
+ if cqlword == '':
+ return cqlword
+ if cqlword[0] == "'" and cqlword[-1] == "'":
+ cqlword = cqlword[1:-1].replace("''", "'")
+ return cqlword
+
+ @staticmethod
+ def dequote_name(name):
+ name = name.strip()
+ if name == '':
+ return name
+ if name[0] == '"' and name[-1] == '"':
+ return name[1:-1].replace('""', '"')
+ else:
+ return name.lower()
+
+ @staticmethod
+ def escape_value(value):
+ if value is None:
+ return 'NULL' # this totally won't work
+ if isinstance(value, bool):
+ value = str(value).lower()
+ elif isinstance(value, float):
+ return '%f' % value
+ elif isinstance(value, int):
+ return str(value)
Review Comment:
`escape_value()` assumes any non-bool/non-float/non-int value supports `.replace()`. If callers pass common non-string types (e.g., UUID, datetime), this will raise `AttributeError`. A concrete fix is to stringify the value before escaping (e.g., convert to `str` for the final branch, then apply `.replace()`), while keeping the existing special-casing for numeric/bool formatting.
```suggestion
return str(value)
value = str(value)
```
##########
pylib/cqlshlib/saferscanner.py:
##########
@@ -89,6 +94,7 @@ class Py311SaferScanner(SaferScannerBase):
def __init__(self, lexicon, flags=0):
self.lexicon = lexicon
p = []
+ # pylint: disable=no-member
s = re._parser.State()
Review Comment:
The standalone `# pylint: disable=no-member` directives inside methods disable the check for the remainder of the current scope (function/method), which can unintentionally hide real `no-member` issues later in the same method. Prefer either (a) importing the internal modules explicitly (e.g., `from re import sre_parse` / `from re import _parser`) so Pylint can resolve the symbols without suppression, or (b) using a tightly-scoped disable/enable pair around only the minimal block that needs it.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: pr-unsubscribe@cassandra.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscribe@cassandra.apache.org
For additional commands, e-mail: pr-help@cassandra.apache.org