[stem/master] Fix 'invalid escape sequence' warnings

commit 1451ee967a3d73040f56f9395c9749eb723a92da Author: Damian Johnson <atagar@torproject.org> Date: Sun May 26 11:20:20 2019 -0700 Fix 'invalid escape sequence' warnings Python 3.6 is deprecating invalid escape sequences [1][2], and as such pycodestyle 2.5.0 generates warnings for them [3]... * /home/atagar/Desktop/stem/stem/descriptor/bandwidth_file.py line 264 - W605 invalid escape sequence '\*' | :var dict measurements: **\*** mapping of relay fingerprints to their line 267 - W605 invalid escape sequence '\*' | :var dict header: **\*** header metadata line 268 - W605 invalid escape sequence '\*' | :var datetime timestamp: **\*** time when these metrics were published line 269 - W605 invalid escape sequence '\*' | :var str version: **\*** document format version line 294 - W605 invalid escape sequence '\*' | **\*** attribute is either required when we're parsed with validation or has The trick is that there's two layers of escaping at play... * For Python '\*' is not a valid escape sequence, and as such as a string it's equivilant to '\\*'... >>> '\*' == '\\*' True * For Sphinx and regexes '\*' is meaningful. All the 'invalid escapes' cited by pycodestyle are for those. Simple to fix. This replaces all invalid escape sequences with their valid counterpart. [1] https://docs.python.org/3/whatsnew/3.6.html#deprecated-python-behavior [2] https://bugs.python.org/issue27364 [3] https://trac.torproject.org/projects/tor/ticket/27270 --- cache_fallback_directories.py | 2 +- cache_manual.py | 2 +- docs/change_log.rst | 1 + stem/connection.py | 18 ++--- stem/descriptor/__init__.py | 4 +- stem/descriptor/bandwidth_file.py | 10 +-- stem/descriptor/extrainfo_descriptor.py | 28 +++---- stem/descriptor/hidden_service_descriptor.py | 16 ++-- stem/descriptor/microdescriptor.py | 12 +-- stem/descriptor/networkstatus.py | 112 +++++++++++++-------------- stem/descriptor/router_status_entry.py | 42 +++++----- stem/descriptor/server_descriptor.py | 52 ++++++------- stem/descriptor/tordnsel.py | 10 +-- stem/directory.py | 18 ++--- stem/exit_policy.py | 6 +- stem/process.py | 2 +- stem/response/__init__.py | 2 +- stem/response/events.py | 2 +- stem/util/connection.py | 26 +++---- stem/util/system.py | 2 +- stem/util/test_tools.py | 2 +- test/output.py | 6 +- test/task.py | 2 +- test/unit/directory/fallback.py | 2 +- test/unit/installation.py | 2 +- 25 files changed, 191 insertions(+), 190 deletions(-) diff --git a/cache_fallback_directories.py b/cache_fallback_directories.py index 137ce1a0..7827f712 100755 --- a/cache_fallback_directories.py +++ b/cache_fallback_directories.py @@ -19,7 +19,7 @@ except ImportError: import urllib2 as urllib GITWEB_MAN_LOG = 'https://gitweb.torproject.org/tor.git/log/src/app/config/fallback_dirs.inc' -FALLBACK_DIR_LINK = "href='/tor.git/commit/src/app/config/fallback_dirs.inc\?id=([^']*)'" +FALLBACK_DIR_LINK = "href='/tor.git/commit/src/app/config/fallback_dirs.inc\\?id=([^']*)'" if __name__ == '__main__': try: diff --git a/cache_manual.py b/cache_manual.py index 4c32725c..8e198226 100755 --- a/cache_manual.py +++ b/cache_manual.py @@ -19,7 +19,7 @@ except ImportError: import urllib2 as urllib GITWEB_MAN_LOG = 'https://gitweb.torproject.org/tor.git/log/doc/tor.1.txt' -MAN_LOG_LINK = "href='/tor.git/commit/doc/tor.1.txt\?id=([^']*)'" +MAN_LOG_LINK = "href='/tor.git/commit/doc/tor.1.txt\\?id=([^']*)'" if __name__ == '__main__': try: diff --git a/docs/change_log.rst b/docs/change_log.rst index cdb9e450..fc09eabc 100644 --- a/docs/change_log.rst +++ b/docs/change_log.rst @@ -80,6 +80,7 @@ The following are only available within Stem's `git repository * **Utilities** * :func:`~stem.util.tor_tools.is_valid_hidden_service_address` now provides *true* if a v3 hidden servie address + * Fixed 'invalid escape sequence' python 3.6 warnings (:trac:`27270`) * **Website** diff --git a/stem/connection.py b/stem/connection.py index 2283dc58..8a64c887 100644 --- a/stem/connection.py +++ b/stem/connection.py @@ -474,49 +474,49 @@ def authenticate(controller, password = None, chroot_path = None, protocolinfo_r Tor allows for authentication by reading it a cookie file, but we can't read that file (probably due to permissions). - * **\***:class:`stem.connection.IncorrectCookieValue` + * **\\***:class:`stem.connection.IncorrectCookieValue` Tor allows for authentication by reading it a cookie file, but rejected the contents of that file. - * **\***:class:`stem.connection.AuthChallengeUnsupported` + * **\\***:class:`stem.connection.AuthChallengeUnsupported` Tor doesn't recognize the AUTHCHALLENGE command. This is probably a Tor version prior to SAFECOOKIE being implement, but this exception shouldn't arise because we won't attempt SAFECOOKIE auth unless Tor claims to support it. - * **\***:class:`stem.connection.UnrecognizedAuthChallengeMethod` + * **\\***:class:`stem.connection.UnrecognizedAuthChallengeMethod` Tor couldn't recognize the AUTHCHALLENGE method Stem sent to it. This shouldn't happen at all. - * **\***:class:`stem.connection.InvalidClientNonce` + * **\\***:class:`stem.connection.InvalidClientNonce` Tor says that the client nonce provided by Stem during the AUTHCHALLENGE process is invalid. - * **\***:class:`stem.connection.AuthSecurityFailure` + * **\\***:class:`stem.connection.AuthSecurityFailure` Nonce value provided by the server was invalid. - * **\***:class:`stem.connection.OpenAuthRejected` + * **\\***:class:`stem.connection.OpenAuthRejected` Tor says that it allows for authentication without any credentials, but then rejected our authentication attempt. - * **\***:class:`stem.connection.MissingAuthInfo` + * **\\***:class:`stem.connection.MissingAuthInfo` Tor provided us with a PROTOCOLINFO reply that is technically valid, but missing the information we need to authenticate. - * **\***:class:`stem.connection.AuthenticationFailure` + * **\\***:class:`stem.connection.AuthenticationFailure` There are numerous other ways that authentication could have failed including socket failures, malformed controller responses, etc. These mostly constitute transient failures or bugs. - **\*** In practice it is highly unusual for this to occur, being more of a + **\\*** In practice it is highly unusual for this to occur, being more of a theoretical possibility rather than something you should expect. It's fine to treat these as errors. If you have a use case where this commonly happens, please file a ticket on 'trac.torproject.org'. diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py index 40df1391..ef6530ed 100644 --- a/stem/descriptor/__init__.py +++ b/stem/descriptor/__init__.py @@ -307,7 +307,7 @@ def parse_file(descriptor_file, descriptor_type = None, validate = False, docume initial_position = descriptor_file.tell() first_line = stem.util.str_tools._to_unicode(descriptor_file.readline().strip()) - metrics_header_match = re.match('^@type (\S+) (\d+).(\d+)$', first_line) + metrics_header_match = re.match('^@type (\\S+) (\\d+).(\\d+)$', first_line) if not metrics_header_match: descriptor_file.seek(initial_position) @@ -320,7 +320,7 @@ def parse_file(descriptor_file, descriptor_type = None, validate = False, docume descriptor_file = NewlineNormalizer(descriptor_file) if descriptor_type is not None: - descriptor_type_match = re.match('^(\S+) (\d+).(\d+)$', descriptor_type) + descriptor_type_match = re.match('^(\\S+) (\\d+).(\\d+)$', descriptor_type) if descriptor_type_match: desc_type, major_version, minor_version = descriptor_type_match.groups() diff --git a/stem/descriptor/bandwidth_file.py b/stem/descriptor/bandwidth_file.py index 1f000f50..9fd44859 100644 --- a/stem/descriptor/bandwidth_file.py +++ b/stem/descriptor/bandwidth_file.py @@ -261,12 +261,12 @@ class BandwidthFile(Descriptor): """ Tor bandwidth authority measurements. - :var dict measurements: **\*** mapping of relay fingerprints to their + :var dict measurements: **\\*** mapping of relay fingerprints to their bandwidth measurement metadata - :var dict header: **\*** header metadata - :var datetime timestamp: **\*** time when these metrics were published - :var str version: **\*** document format version + :var dict header: **\\*** header metadata + :var datetime timestamp: **\\*** time when these metrics were published + :var str version: **\\*** document format version :var str software: application that generated these metrics :var str software_version: version of the application that generated these metrics @@ -291,7 +291,7 @@ class BandwidthFile(Descriptor): :var RecentStats recent_stats: statistical information collected over the last 'data_period' (by default five days) - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined """ diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py index 7f13e32c..82e3154f 100644 --- a/stem/descriptor/extrainfo_descriptor.py +++ b/stem/descriptor/extrainfo_descriptor.py @@ -16,7 +16,7 @@ Extra-info descriptors are available from a few sources... * If you have 'DownloadExtraInfo 1' in your torrc... - * control port via 'GETINFO extra-info/digest/\*' queries + * control port via 'GETINFO extra-info/digest/\\*' queries * the 'cached-extrainfo' file in tor's data directory * Archived descriptors provided by `CollecTor <https://metrics.torproject.org/collector.html>`_. @@ -164,8 +164,8 @@ SINGLE_FIELDS = ( 'exit-streams-opened', ) -_timestamp_re = re.compile('^(.*) \(([0-9]+) s\)( .*)?$') -_locale_re = re.compile('^[a-zA-Z0-9\?]{2}$') +_timestamp_re = re.compile('^(.*) \\(([0-9]+) s\\)( .*)?$') +_locale_re = re.compile('^[a-zA-Z0-9\\?]{2}$') def _parse_file(descriptor_file, is_bridge = False, validate = False, **kwargs): @@ -572,12 +572,12 @@ class ExtraInfoDescriptor(Descriptor): """ Extra-info descriptor document. - :var str nickname: **\*** relay's nickname - :var str fingerprint: **\*** identity key fingerprint - :var datetime published: **\*** time in UTC when this descriptor was made + :var str nickname: **\\*** relay's nickname + :var str fingerprint: **\\*** identity key fingerprint + :var datetime published: **\\*** time in UTC when this descriptor was made :var str geoip_db_digest: sha1 of the geoIP database file for IPv4 addresses :var str geoip6_db_digest: sha1 of the geoIP database file for IPv6 addresses - :var dict transport: **\*** mapping of transport methods to their (address, + :var dict transport: **\\*** mapping of transport methods to their (address, port, args) tuple, these usually appear on bridges in which case all of those are **None** @@ -663,13 +663,13 @@ class ExtraInfoDescriptor(Descriptor): :var datetime hs_stats_end: end of the sampling interval :var int hs_rend_cells: rounded count of the RENDEZVOUS1 cells seen - :var int hs_rend_cells_attr: **\*** attributes provided for the hs_rend_cells + :var int hs_rend_cells_attr: **\\*** attributes provided for the hs_rend_cells :var int hs_dir_onions_seen: rounded count of the identities seen - :var int hs_dir_onions_seen_attr: **\*** attributes provided for the hs_dir_onions_seen + :var int hs_dir_onions_seen_attr: **\\*** attributes provided for the hs_dir_onions_seen **Padding Count Attributes:** - :var dict padding_counts: **\*** padding parameters + :var dict padding_counts: **\\*** padding parameters :var datetime padding_counts_end: end of the period when padding data is being collected :var int padding_counts_interval: length in seconds of the interval @@ -683,7 +683,7 @@ class ExtraInfoDescriptor(Descriptor): :var dict ip_versions: mapping of ip protocols to a rounded count for the number of users :var dict ip_versions: mapping of ip transports to a count for the number of users - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined .. versionchanged:: 1.4.0 @@ -906,14 +906,14 @@ class ExtraInfoDescriptor(Descriptor): class RelayExtraInfoDescriptor(ExtraInfoDescriptor): """ Relay extra-info descriptor, constructed from data such as that provided by - 'GETINFO extra-info/digest/\*', cached descriptors, and metrics + 'GETINFO extra-info/digest/\\*', cached descriptors, and metrics (`specification <https://gitweb.torproject.org/torspec.git/tree/dir-spec.txt>`_). :var ed25519_certificate str: base64 encoded ed25519 certificate :var ed25519_signature str: signature of this document using ed25519 - :var str signature: **\*** signature for this extrainfo descriptor + :var str signature: **\\*** signature for this extrainfo descriptor - **\*** attribute is required when we're parsed with validation + **\\*** attribute is required when we're parsed with validation .. versionchanged:: 1.5.0 Added the ed25519_certificate and ed25519_signature attributes. diff --git a/stem/descriptor/hidden_service_descriptor.py b/stem/descriptor/hidden_service_descriptor.py index bd35a19d..1b7f2cc3 100644 --- a/stem/descriptor/hidden_service_descriptor.py +++ b/stem/descriptor/hidden_service_descriptor.py @@ -185,15 +185,15 @@ class HiddenServiceDescriptor(Descriptor): """ Hidden service descriptor. - :var str descriptor_id: **\*** identifier for this descriptor, this is a base32 hash of several fields - :var int version: **\*** hidden service descriptor version - :var str permanent_key: **\*** long term key of the hidden service - :var str secret_id_part: **\*** hash of the time period, cookie, and replica + :var str descriptor_id: **\\*** identifier for this descriptor, this is a base32 hash of several fields + :var int version: **\\*** hidden service descriptor version + :var str permanent_key: **\\*** long term key of the hidden service + :var str secret_id_part: **\\*** hash of the time period, cookie, and replica values so our descriptor_id can be validated - :var datetime published: **\*** time in UTC when this descriptor was made - :var list protocol_versions: **\*** list of **int** versions that are supported when establishing a connection + :var datetime published: **\\*** time in UTC when this descriptor was made + :var list protocol_versions: **\\*** list of **int** versions that are supported when establishing a connection :var str introduction_points_encoded: raw introduction points blob - :var list introduction_points_auth: **\*** tuples of the form + :var list introduction_points_auth: **\\*** tuples of the form (auth_method, auth_data) for our introduction_points_content (**deprecated**, always **[]**) :var bytes introduction_points_content: decoded introduction-points content @@ -201,7 +201,7 @@ class HiddenServiceDescriptor(Descriptor): encrypted :var str signature: signature of the descriptor content - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined .. versionchanged:: 1.6.0 diff --git a/stem/descriptor/microdescriptor.py b/stem/descriptor/microdescriptor.py index 4703c914..de125f65 100644 --- a/stem/descriptor/microdescriptor.py +++ b/stem/descriptor/microdescriptor.py @@ -197,14 +197,14 @@ class Microdescriptor(Descriptor): Microdescriptor (`descriptor specification <https://gitweb.torproject.org/torspec.git/tree/dir-spec.txt>`_) - :var str onion_key: **\*** key used to encrypt EXTEND cells + :var str onion_key: **\\*** key used to encrypt EXTEND cells :var str ntor_onion_key: base64 key used to encrypt EXTEND in the ntor protocol - :var list or_addresses: **\*** alternative for our address/or_port attributes, each + :var list or_addresses: **\\*** alternative for our address/or_port attributes, each entry is a tuple of the form (address (**str**), port (**int**), is_ipv6 (**bool**)) - :var list family: **\*** nicknames or fingerprints of declared family - :var stem.exit_policy.MicroExitPolicy exit_policy: **\*** relay's exit policy - :var stem.exit_policy.MicroExitPolicy exit_policy_v6: **\*** exit policy for IPv6 + :var list family: **\\*** nicknames or fingerprints of declared family + :var stem.exit_policy.MicroExitPolicy exit_policy: **\\*** relay's exit policy + :var stem.exit_policy.MicroExitPolicy exit_policy_v6: **\\*** exit policy for IPv6 :var hash identifiers: mapping of key types (like rsa1024 or ed25519) to their base64 encoded identity, this is only used for collision prevention (:trac:`11743`) @@ -215,7 +215,7 @@ class Microdescriptor(Descriptor): :var str identifier_type: identity digest key type (**deprecated**, use identifiers instead) - **\*** attribute is required when we're parsed with validation + **\\*** attribute is required when we're parsed with validation .. versionchanged:: 1.1.0 Added the identifier and identifier_type attributes. diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py index e970dc73..b0589f2a 100644 --- a/stem/descriptor/networkstatus.py +++ b/stem/descriptor/networkstatus.py @@ -538,24 +538,24 @@ class NetworkStatusDocumentV2(NetworkStatusDocument): :var dict routers: fingerprints to :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV2` contained in the document - :var int version: **\*** document version + :var int version: **\\*** document version - :var str hostname: **\*** hostname of the authority - :var str address: **\*** authority's IP address - :var int dir_port: **\*** authority's DirPort - :var str fingerprint: **\*** authority's fingerprint - :var str contact: **\*** authority's contact information - :var str signing_key: **\*** authority's public signing key + :var str hostname: **\\*** hostname of the authority + :var str address: **\\*** authority's IP address + :var int dir_port: **\\*** authority's DirPort + :var str fingerprint: **\\*** authority's fingerprint + :var str contact: **\\*** authority's contact information + :var str signing_key: **\\*** authority's public signing key :var list client_versions: list of recommended client tor version strings :var list server_versions: list of recommended server tor version strings - :var datetime published: **\*** time when the document was published - :var list options: **\*** list of things that this authority decides + :var datetime published: **\\*** time when the document was published + :var list options: **\\*** list of things that this authority decides - :var str signing_authority: **\*** name of the authority signing the document - :var str signature: **\*** authority's signature for the document + :var str signing_authority: **\\*** name of the authority signing the document + :var str signature: **\\*** authority's signature for the document - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined """ @@ -943,27 +943,27 @@ class NetworkStatusDocumentV3(NetworkStatusDocument): :var dict routers: fingerprint to :class:`~stem.descriptor.router_status_entry.RouterStatusEntryV3` mapping for relays contained in the document - :var int version: **\*** document version - :var str version_flavor: **\*** flavor associated with the document (such as 'ns' or 'microdesc') - :var bool is_consensus: **\*** **True** if the document is a consensus - :var bool is_vote: **\*** **True** if the document is a vote - :var bool is_microdescriptor: **\*** **True** if this is a microdescriptor + :var int version: **\\*** document version + :var str version_flavor: **\\*** flavor associated with the document (such as 'ns' or 'microdesc') + :var bool is_consensus: **\\*** **True** if the document is a consensus + :var bool is_vote: **\\*** **True** if the document is a vote + :var bool is_microdescriptor: **\\*** **True** if this is a microdescriptor flavored document, **False** otherwise - :var datetime valid_after: **\*** time when the consensus became valid - :var datetime fresh_until: **\*** time when the next consensus should be produced - :var datetime valid_until: **\*** time when this consensus becomes obsolete - :var int vote_delay: **\*** number of seconds allowed for collecting votes + :var datetime valid_after: **\\*** time when the consensus became valid + :var datetime fresh_until: **\\*** time when the next consensus should be produced + :var datetime valid_until: **\\*** time when this consensus becomes obsolete + :var int vote_delay: **\\*** number of seconds allowed for collecting votes from all authorities - :var int dist_delay: **\*** number of seconds allowed for collecting + :var int dist_delay: **\\*** number of seconds allowed for collecting signatures from all authorities :var list client_versions: list of recommended client tor versions :var list server_versions: list of recommended server tor versions - :var list packages: **\*** list of :data:`~stem.descriptor.networkstatus.PackageVersion` entries - :var list known_flags: **\*** list of :data:`~stem.Flag` for the router's flags - :var dict params: **\*** dict of parameter(**str**) => value(**int**) mappings - :var list directory_authorities: **\*** list of :class:`~stem.descriptor.networkstatus.DirectoryAuthority` + :var list packages: **\\*** list of :data:`~stem.descriptor.networkstatus.PackageVersion` entries + :var list known_flags: **\\*** list of :data:`~stem.Flag` for the router's flags + :var dict params: **\\*** dict of parameter(**str**) => value(**int**) mappings + :var list directory_authorities: **\\*** list of :class:`~stem.descriptor.networkstatus.DirectoryAuthority` objects that have generated this document - :var list signatures: **\*** :class:`~stem.descriptor.networkstatus.DocumentSignature` + :var list signatures: **\\*** :class:`~stem.descriptor.networkstatus.DocumentSignature` of the authorities that have signed the document **Consensus Attributes:** @@ -985,7 +985,7 @@ class NetworkStatusDocumentV3(NetworkStatusDocument): :var list consensus_methods: list of ints for the supported method versions :var datetime published: time when the document was published - :var dict flag_thresholds: **\*** mapping of internal performance thresholds used while making the vote, values are **ints** or **floats** + :var dict flag_thresholds: **\\*** mapping of internal performance thresholds used while making the vote, values are **ints** or **floats** :var dict recommended_client_protocols: recommended protocols for clients :var dict recommended_relay_protocols: recommended protocols for relays @@ -997,7 +997,7 @@ class NetworkStatusDocumentV3(NetworkStatusDocument): to generate this vote, this is a mapping of hash functions to their resulting digest value - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as None if undefined .. versionchanged:: 1.4.0 @@ -1519,13 +1519,13 @@ class DirectoryAuthority(Descriptor): * The authority's nickname ends with '-legacy'. * There's no **contact** or **vote_digest** attribute. - :var str nickname: **\*** authority's nickname - :var str v3ident: **\*** identity key fingerprint used to sign votes and consensus - :var str hostname: **\*** hostname of the authority - :var str address: **\*** authority's IP address - :var int dir_port: **\*** authority's DirPort - :var int or_port: **\*** authority's ORPort - :var bool is_legacy: **\*** if the authority's using the legacy format + :var str nickname: **\\*** authority's nickname + :var str v3ident: **\\*** identity key fingerprint used to sign votes and consensus + :var str hostname: **\\*** hostname of the authority + :var str address: **\\*** authority's IP address + :var int dir_port: **\\*** authority's DirPort + :var int or_port: **\\*** authority's ORPort + :var bool is_legacy: **\\*** if the authority's using the legacy format :var str contact: contact information, this is included if is_legacy is **False** **Consensus Attributes:** @@ -1535,12 +1535,12 @@ class DirectoryAuthority(Descriptor): **Vote Attributes:** :var str legacy_dir_key: fingerprint of and obsolete identity key - :var stem.descriptor.networkstatus.KeyCertificate key_certificate: **\*** + :var stem.descriptor.networkstatus.KeyCertificate key_certificate: **\\*** authority's key certificate - :var bool is_shared_randomness_participate: **\*** **True** if this authority + :var bool is_shared_randomness_participate: **\\*** **True** if this authority participates in establishing a shared random value, **False** otherwise - :var list shared_randomness_commitments: **\*** list of + :var list shared_randomness_commitments: **\\*** list of :data:`~stem.descriptor.networkstatus.SharedRandomnessCommitment` entries :var int shared_randomness_previous_reveal_count: number of commitments used to generate the last shared random value @@ -1551,7 +1551,7 @@ class DirectoryAuthority(Descriptor): :var str shared_randomness_current_value: base64 encoded current shared random value - **\*** mandatory attribute + **\\*** mandatory attribute .. versionchanged:: 1.4.0 Renamed our 'fingerprint' attribute to 'v3ident' (prior attribute exists @@ -1734,19 +1734,19 @@ class KeyCertificate(Descriptor): """ Directory key certificate for a v3 network status document. - :var int version: **\*** version of the key certificate + :var int version: **\\*** version of the key certificate :var str address: authority's IP address :var int dir_port: authority's DirPort - :var str fingerprint: **\*** authority's fingerprint - :var str identity_key: **\*** long term authority identity key - :var datetime published: **\*** time when this key was generated - :var datetime expires: **\*** time after which this key becomes invalid - :var str signing_key: **\*** directory server's public signing key + :var str fingerprint: **\\*** authority's fingerprint + :var str identity_key: **\\*** long term authority identity key + :var datetime published: **\\*** time when this key was generated + :var datetime expires: **\\*** time after which this key becomes invalid + :var str signing_key: **\\*** directory server's public signing key :var str crosscert: signature made using certificate's signing key - :var str certification: **\*** signature of this key certificate signed with + :var str certification: **\\*** signature of this key certificate signed with the identity key - **\*** mandatory attribute + **\\*** mandatory attribute """ TYPE_ANNOTATION_NAME = 'dir-key-certificate-3' @@ -1887,20 +1887,20 @@ class DetachedSignature(Descriptor): .. versionadded:: 1.8.0 - :var str consensus_digest: **\*** digest of the consensus being signed - :var datetime valid_after: **\*** time when the consensus became valid - :var datetime fresh_until: **\*** time when the next consensus should be produced - :var datetime valid_until: **\*** time when this consensus becomes obsolete - :var list additional_digests: **\*** + :var str consensus_digest: **\\*** digest of the consensus being signed + :var datetime valid_after: **\\*** time when the consensus became valid + :var datetime fresh_until: **\\*** time when the next consensus should be produced + :var datetime valid_until: **\\*** time when this consensus becomes obsolete + :var list additional_digests: **\\*** :class:`~stem.descriptor.networkstatus.DocumentDigest` for additional consensus flavors - :var list additional_signatures: **\*** + :var list additional_signatures: **\\*** :class:`~stem.descriptor.networkstatus.DocumentSignature` for additional consensus flavors - :var list signatures: **\*** :class:`~stem.descriptor.networkstatus.DocumentSignature` + :var list signatures: **\\*** :class:`~stem.descriptor.networkstatus.DocumentSignature` of the authorities that have signed the document - **\*** mandatory attribute + **\\*** mandatory attribute """ TYPE_ANNOTATION_NAME = 'detached-signature-3' diff --git a/stem/descriptor/router_status_entry.py b/stem/descriptor/router_status_entry.py index 7d75d40d..344c5697 100644 --- a/stem/descriptor/router_status_entry.py +++ b/stem/descriptor/router_status_entry.py @@ -6,7 +6,7 @@ Parsing for router status entries, the information for individual routers within a network status document. This information is provided from a few sources... -* control port via 'GETINFO ns/\*' and 'GETINFO md/\*' queries +* control port via 'GETINFO ns/\\*' and 'GETINFO md/\\*' queries * router entries in a network status document, like the cached-consensus **Module Overview:** @@ -393,16 +393,16 @@ class RouterStatusEntry(Descriptor): Information about an individual router stored within a network status document. This is the common parent for concrete status entry types. - :var stem.descriptor.networkstatus.NetworkStatusDocument document: **\*** document that this descriptor came from + :var stem.descriptor.networkstatus.NetworkStatusDocument document: **\\*** document that this descriptor came from - :var str nickname: **\*** router's nickname - :var str fingerprint: **\*** router's fingerprint - :var datetime published: **\*** router's publication - :var str address: **\*** router's IP address - :var int or_port: **\*** router's ORPort - :var int dir_port: **\*** router's DirPort + :var str nickname: **\\*** router's nickname + :var str fingerprint: **\\*** router's fingerprint + :var datetime published: **\\*** router's publication + :var str address: **\\*** router's IP address + :var int or_port: **\\*** router's ORPort + :var int dir_port: **\\*** router's DirPort - :var list flags: **\*** list of :data:`~stem.Flag` associated with the relay + :var list flags: **\\*** list of :data:`~stem.Flag` associated with the relay :var stem.version.Version version: parsed version of tor, this is **None** if the relay's using a new versioning scheme @@ -509,9 +509,9 @@ class RouterStatusEntryV2(RouterStatusEntry): Information about an individual router stored within a version 2 network status document. - :var str digest: **\*** router's upper-case hex digest + :var str digest: **\\*** router's upper-case hex digest - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined """ @@ -543,11 +543,11 @@ class RouterStatusEntryV3(RouterStatusEntry): Information about an individual router stored within a version 3 network status document. - :var list or_addresses: **\*** relay's OR addresses, this is a tuple listing + :var list or_addresses: **\\*** relay's OR addresses, this is a tuple listing of the form (address (**str**), port (**int**), is_ipv6 (**bool**)) :var str identifier_type: identity digest key type :var str identifier: base64 encoded identity digest - :var str digest: **\*** router's upper-case hex digest + :var str digest: **\\*** router's upper-case hex digest :var int bandwidth: bandwidth measured to be available by the relay, this is an arbitrary units (currently kilobytes per second) heuristic generated by @@ -555,17 +555,17 @@ class RouterStatusEntryV3(RouterStatusEntry): :var int measured: *bandwidth* vote provided by a bandwidth authority :var bool is_unmeasured: *bandwidth* measurement isn't based on three or more measurements - :var list unrecognized_bandwidth_entries: **\*** bandwidth weighting + :var list unrecognized_bandwidth_entries: **\\*** bandwidth weighting information that isn't yet recognized :var stem.exit_policy.MicroExitPolicy exit_policy: router's exit policy :var dict protocols: mapping of protocols to their supported versions - :var list microdescriptor_hashes: **\*** tuples of two values, the list of + :var list microdescriptor_hashes: **\\*** tuples of two values, the list of consensus methods for generating a set of digests and the 'algorithm => digest' mappings - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined .. versionchanged:: 1.5.0 @@ -625,19 +625,19 @@ class RouterStatusEntryMicroV3(RouterStatusEntry): Information about an individual router stored within a microdescriptor flavored network status document. - :var list or_addresses: **\*** relay's OR addresses, this is a tuple listing + :var list or_addresses: **\\*** relay's OR addresses, this is a tuple listing of the form (address (**str**), port (**int**), is_ipv6 (**bool**)) :var int bandwidth: bandwidth claimed by the relay (in kb/s) :var int measured: bandwidth measured to be available by the relay :var bool is_unmeasured: bandwidth measurement isn't based on three or more measurements - :var list unrecognized_bandwidth_entries: **\*** bandwidth weighting + :var list unrecognized_bandwidth_entries: **\\*** bandwidth weighting information that isn't yet recognized :var dict protocols: mapping of protocols to their supported versions - :var str digest: **\*** router's hex encoded digest of our corresponding + :var str digest: **\\*** router's hex encoded digest of our corresponding microdescriptor (**deprecated**, use microdescriptor_digest instead) - :var str microdescriptor_digest: **\*** router's base64 encoded digest of our corresponding microdescriptor + :var str microdescriptor_digest: **\\*** router's base64 encoded digest of our corresponding microdescriptor .. versionchanged:: 1.6.0 Added the protocols attribute. @@ -648,7 +648,7 @@ class RouterStatusEntryMicroV3(RouterStatusEntry): .. versionchanged:: 1.7.0 Added the microdescriptor_digest attribute to replace our now deprecated digest attribute. - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined """ diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py index 88003fe0..2d9133f5 100644 --- a/stem/descriptor/server_descriptor.py +++ b/stem/descriptor/server_descriptor.py @@ -6,7 +6,7 @@ Parsing for Tor server descriptors, which contains the infrequently changing information about a Tor relay (contact information, exit policy, public keys, etc). This information is provided from a few sources... -* The control port via 'GETINFO desc/\*' queries. +* The control port via 'GETINFO desc/\\*' queries. * The 'cached-descriptors' file in Tor's data directory. @@ -287,7 +287,7 @@ def _parse_platform_line(descriptor, entries): # version, but might as well try to save our caller the effort. value = _value('platform', entries) - platform_match = re.match('^(?:node-)?Tor (\S*).* on (.*)$', value) + platform_match = re.match('^(?:node-)?Tor (\\S*).* on (.*)$', value) if platform_match: version_str, descriptor.operating_system = platform_match.groups() @@ -459,44 +459,44 @@ class ServerDescriptor(Descriptor): """ Common parent for server descriptors. - :var str nickname: **\*** relay's nickname + :var str nickname: **\\*** relay's nickname :var str fingerprint: identity key fingerprint - :var datetime published: **\*** time in UTC when this descriptor was made + :var datetime published: **\\*** time in UTC when this descriptor was made - :var str address: **\*** IPv4 address of the relay - :var int or_port: **\*** port used for relaying - :var int socks_port: **\*** port used as client (**deprecated**, always **None**) - :var int dir_port: **\*** port used for descriptor mirroring + :var str address: **\\*** IPv4 address of the relay + :var int or_port: **\\*** port used for relaying + :var int socks_port: **\\*** port used as client (**deprecated**, always **None**) + :var int dir_port: **\\*** port used for descriptor mirroring :var bytes platform: line with operating system and tor version :var stem.version.Version tor_version: version of tor :var str operating_system: operating system :var int uptime: uptime when published in seconds :var bytes contact: contact information - :var stem.exit_policy.ExitPolicy exit_policy: **\*** stated exit policy - :var stem.exit_policy.MicroExitPolicy exit_policy_v6: **\*** exit policy for IPv6 - :var BridgeDistribution bridge_distribution: **\*** preferred method of providing this relay's + :var stem.exit_policy.ExitPolicy exit_policy: **\\*** stated exit policy + :var stem.exit_policy.MicroExitPolicy exit_policy_v6: **\\*** exit policy for IPv6 + :var BridgeDistribution bridge_distribution: **\\*** preferred method of providing this relay's address if a bridge - :var set family: **\*** nicknames or fingerprints of declared family + :var set family: **\\*** nicknames or fingerprints of declared family - :var int average_bandwidth: **\*** average rate it's willing to relay in bytes/s - :var int burst_bandwidth: **\*** burst rate it's willing to relay in bytes/s - :var int observed_bandwidth: **\*** estimated capacity based on usage in bytes/s + :var int average_bandwidth: **\\*** average rate it's willing to relay in bytes/s + :var int burst_bandwidth: **\\*** burst rate it's willing to relay in bytes/s + :var int observed_bandwidth: **\\*** estimated capacity based on usage in bytes/s :var list link_protocols: link protocols supported by the relay :var list circuit_protocols: circuit protocols supported by the relay - :var bool is_hidden_service_dir: **\*** indicates if the relay serves hidden + :var bool is_hidden_service_dir: **\\*** indicates if the relay serves hidden service descriptors - :var bool hibernating: **\*** hibernating when published - :var bool allow_single_hop_exits: **\*** flag if single hop exiting is allowed - :var bool allow_tunneled_dir_requests: **\*** flag if tunneled directory + :var bool hibernating: **\\*** hibernating when published + :var bool allow_single_hop_exits: **\\*** flag if single hop exiting is allowed + :var bool allow_tunneled_dir_requests: **\\*** flag if tunneled directory requests are accepted - :var bool extra_info_cache: **\*** flag if a mirror for extra-info documents + :var bool extra_info_cache: **\\*** flag if a mirror for extra-info documents :var str extra_info_digest: upper-case hex encoded digest of our extra-info document :var str extra_info_sha256_digest: base64 encoded sha256 digest of our extra-info document :var bool eventdns: flag for evdns backend (**deprecated**, always unset) :var str ntor_onion_key: base64 key used to encrypt EXTEND in the ntor protocol - :var list or_addresses: **\*** alternative for our address/or_port + :var list or_addresses: **\\*** alternative for our address/or_port attributes, each entry is a tuple of the form (address (**str**), port (**int**), is_ipv6 (**bool**)) :var dict protocols: mapping of protocols to their supported versions @@ -511,7 +511,7 @@ class ServerDescriptor(Descriptor): :var int write_history_interval: seconds per interval :var list write_history_values: bytes written during each interval - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined .. versionchanged:: 1.5.0 @@ -785,14 +785,14 @@ class RelayDescriptor(ServerDescriptor): :var str ed25519_master_key: base64 encoded master key for our ed25519 certificate :var str ed25519_signature: signature of this document using ed25519 - :var str onion_key: **\*** key used to encrypt EXTEND cells + :var str onion_key: **\\*** key used to encrypt EXTEND cells :var str onion_key_crosscert: signature generated using the onion_key :var str ntor_onion_key_crosscert: signature generated using the ntor-onion-key :var str ntor_onion_key_crosscert_sign: sign of the corresponding ed25519 public key - :var str signing_key: **\*** relay's long-term identity key - :var str signature: **\*** signature for this descriptor + :var str signing_key: **\\*** relay's long-term identity key + :var str signature: **\\*** signature for this descriptor - **\*** attribute is required when we're parsed with validation + **\\*** attribute is required when we're parsed with validation .. versionchanged:: 1.5.0 Added the ed25519_certificate, ed25519_master_key, ed25519_signature, diff --git a/stem/descriptor/tordnsel.py b/stem/descriptor/tordnsel.py index a40467b4..8a651864 100644 --- a/stem/descriptor/tordnsel.py +++ b/stem/descriptor/tordnsel.py @@ -51,12 +51,12 @@ class TorDNSEL(Descriptor): TorDNSEL descriptor (`exitlist specification <https://www.torproject.org/tordnsel/exitlist-spec.txt>`_) - :var str fingerprint: **\*** authority's fingerprint - :var datetime published: **\*** time in UTC when this descriptor was made - :var datetime last_status: **\*** time in UTC when the relay was seen in a v2 network status - :var list exit_addresses: **\*** list of (str address, datetime date) tuples consisting of the found IPv4 exit address and the time + :var str fingerprint: **\\*** authority's fingerprint + :var datetime published: **\\*** time in UTC when this descriptor was made + :var datetime last_status: **\\*** time in UTC when the relay was seen in a v2 network status + :var list exit_addresses: **\\*** list of (str address, datetime date) tuples consisting of the found IPv4 exit address and the time - **\*** attribute is either required when we're parsed with validation or has + **\\*** attribute is either required when we're parsed with validation or has a default value, others are left as **None** if undefined """ diff --git a/stem/directory.py b/stem/directory.py index 7239f9a0..01eca70b 100644 --- a/stem/directory.py +++ b/stem/directory.py @@ -62,18 +62,18 @@ GITWEB_AUTHORITY_URL = 'https://gitweb.torproject.org/tor.git/plain/src/app/conf GITWEB_FALLBACK_URL = 'https://gitweb.torproject.org/tor.git/plain/src/app/config/fallback_dirs.inc' FALLBACK_CACHE_PATH = os.path.join(os.path.dirname(__file__), 'cached_fallbacks.cfg') -AUTHORITY_NAME = re.compile('"(\S+) orport=(\d+) .*"') -AUTHORITY_V3IDENT = re.compile('"v3ident=([\dA-F]{40}) "') -AUTHORITY_IPV6 = re.compile('"ipv6=\[([\da-f:]+)\]:(\d+) "') -AUTHORITY_ADDR = re.compile('"([\d\.]+):(\d+) ([\dA-F ]{49})",') +AUTHORITY_NAME = re.compile('"(\\S+) orport=(\\d+) .*"') +AUTHORITY_V3IDENT = re.compile('"v3ident=([\\dA-F]{40}) "') +AUTHORITY_IPV6 = re.compile('"ipv6=\\[([\\da-f:]+)\\]:(\\d+) "') +AUTHORITY_ADDR = re.compile('"([\\d\\.]+):(\\d+) ([\\dA-F ]{49})",') FALLBACK_DIV = '/* ===== */' -FALLBACK_MAPPING = re.compile('/\*\s+(\S+)=(\S*)\s+\*/') +FALLBACK_MAPPING = re.compile('/\\*\\s+(\\S+)=(\\S*)\\s+\\*/') -FALLBACK_ADDR = re.compile('"([\d\.]+):(\d+) orport=(\d+) id=([\dA-F]{40}).*') -FALLBACK_NICKNAME = re.compile('/\* nickname=(\S+) \*/') -FALLBACK_EXTRAINFO = re.compile('/\* extrainfo=([0-1]) \*/') -FALLBACK_IPV6 = re.compile('" ipv6=\[([\da-f:]+)\]:(\d+)"') +FALLBACK_ADDR = re.compile('"([\\d\\.]+):(\\d+) orport=(\\d+) id=([\\dA-F]{40}).*') +FALLBACK_NICKNAME = re.compile('/\\* nickname=(\\S+) \\*/') +FALLBACK_EXTRAINFO = re.compile('/\\* extrainfo=([0-1]) \\*/') +FALLBACK_IPV6 = re.compile('" ipv6=\\[([\\da-f:]+)\\]:(\\d+)"') def _match_with(lines, regexes, required = None): diff --git a/stem/exit_policy.py b/stem/exit_policy.py index 5bdadf9b..76d75e55 100644 --- a/stem/exit_policy.py +++ b/stem/exit_policy.py @@ -139,7 +139,7 @@ def get_config_policy(rules, ip_address = None): if not rule: continue - if not re.search(':[\d\-\*]+$', rule): + if not re.search(':[\\d\\-\\*]+$', rule): rule = '%s:*' % rule if 'private' in rule: @@ -642,7 +642,7 @@ class ExitPolicyRule(object): This should be treated as an immutable object. .. versionchanged:: 1.5.0 - Support for 'accept6/reject6' entries and '\*4/6' wildcards. + Support for 'accept6/reject6' entries and '\\*4/6' wildcards. :var bool is_accept: indicates if exiting is allowed or disallowed @@ -714,7 +714,7 @@ class ExitPolicyRule(object): """ **True** if we'll match against **any** address, **False** otherwise. - Note that this is different than \*4, \*6, or '/0' address which are + Note that this is different than \\*4, \\*6, or '/0' address which are wildcards for only either IPv4 or IPv6. :returns: **bool** for if our address matching is a wildcard diff --git a/stem/process.py b/stem/process.py index 522ee7bf..80824bdc 100644 --- a/stem/process.py +++ b/stem/process.py @@ -139,7 +139,7 @@ def launch_tor(tor_cmd = 'tor', args = None, torrc_path = None, completion_perce signal.setitimer(signal.ITIMER_REAL, timeout) bootstrap_line = re.compile('Bootstrapped ([0-9]+)%') - problem_line = re.compile('\[(warn|err)\] (.*)$') + problem_line = re.compile('\\[(warn|err)\\] (.*)$') last_problem = 'Timed out' while True: diff --git a/stem/response/__init__.py b/stem/response/__init__.py index ea4d2331..7d2c5c5c 100644 --- a/stem/response/__init__.py +++ b/stem/response/__init__.py @@ -50,7 +50,7 @@ __all__ = [ 'SingleLineResponse', ] -KEY_ARG = re.compile('^(\S+)=') +KEY_ARG = re.compile('^(\\S+)=') def convert(response_type, message, **kwargs): diff --git a/stem/response/events.py b/stem/response/events.py index da0b3f9d..a9f563c6 100644 --- a/stem/response/events.py +++ b/stem/response/events.py @@ -19,7 +19,7 @@ from stem.util import connection, log, str_tools, tor_tools # because some positional arguments, like circuit paths, can have an equal # sign. -KW_ARG = re.compile('^(.*) ([A-Za-z0-9_]+)=(\S*)$') +KW_ARG = re.compile('^(.*) ([A-Za-z0-9_]+)=(\\S*)$') QUOTED_KW_ARG = re.compile('^(.*) ([A-Za-z0-9_]+)="(.*)"$') CELL_TYPE = re.compile('^[a-z0-9_]+$') PARSE_NEWCONSENSUS_EVENTS = True diff --git a/stem/util/connection.py b/stem/util/connection.py index d9a23815..2ddecd74 100644 --- a/stem/util/connection.py +++ b/stem/util/connection.py @@ -47,7 +47,7 @@ Connection and networking based utility functions. **NETSTAT_WINDOWS** netstat command under Windows **SS** ss command **LSOF** lsof command - **SOCKSTAT** sockstat command under \*nix + **SOCKSTAT** sockstat command under \\*nix **BSD_SOCKSTAT** sockstat command under FreeBSD **BSD_PROCSTAT** procstat command under FreeBSD **BSD_FSTAT** fstat command under OpenBSD @@ -125,28 +125,28 @@ RESOLVER_FILTER = { Resolver.PROC: '', # tcp 0 586 192.168.0.1:44284 38.229.79.2:443 ESTABLISHED 15843/tor - Resolver.NETSTAT: '^{protocol}\s+.*\s+{local}\s+{remote}\s+ESTABLISHED\s+{pid}/{name}\s*$', + Resolver.NETSTAT: '^{protocol}\\s+.*\\s+{local}\\s+{remote}\\s+ESTABLISHED\\s+{pid}/{name}\\s*$', # tcp 586 192.168.0.1:44284 38.229.79.2:443 ESTABLISHED 15843 - Resolver.NETSTAT_WINDOWS: '^\s*{protocol}\s+{local}\s+{remote}\s+ESTABLISHED\s+{pid}\s*$', + Resolver.NETSTAT_WINDOWS: '^\\s*{protocol}\\s+{local}\\s+{remote}\\s+ESTABLISHED\\s+{pid}\\s*$', # tcp ESTAB 0 0 192.168.0.20:44415 38.229.79.2:443 users:(("tor",15843,9)) - Resolver.SS: '^{protocol}\s+ESTAB\s+.*\s+{local}\s+{remote}\s+users:\(\("{name}",(?:pid=)?{pid},(?:fd=)?[0-9]+\)\)$', + Resolver.SS: '^{protocol}\\s+ESTAB\\s+.*\\s+{local}\\s+{remote}\\s+users:\\(\\("{name}",(?:pid=)?{pid},(?:fd=)?[0-9]+\\)\\)$', # tor 3873 atagar 45u IPv4 40994 0t0 TCP 10.243.55.20:45724->194.154.227.109:9001 (ESTABLISHED) - Resolver.LSOF: '^{name}\s+{pid}\s+.*\s+{protocol}\s+{local}->{remote} \(ESTABLISHED\)$', + Resolver.LSOF: '^{name}\\s+{pid}\\s+.*\\s+{protocol}\\s+{local}->{remote} \\(ESTABLISHED\\)$', # atagar tor 15843 tcp4 192.168.0.20:44092 68.169.35.102:443 ESTABLISHED - Resolver.SOCKSTAT: '^\S+\s+{name}\s+{pid}\s+{protocol}4\s+{local}\s+{remote}\s+ESTABLISHED$', + Resolver.SOCKSTAT: '^\\S+\\s+{name}\\s+{pid}\\s+{protocol}4\\s+{local}\\s+{remote}\\s+ESTABLISHED$', # _tor tor 4397 12 tcp4 172.27.72.202:54011 127.0.0.1:9001 - Resolver.BSD_SOCKSTAT: '^\S+\s+{name}\s+{pid}\s+\S+\s+{protocol}4\s+{local}\s+{remote}$', + Resolver.BSD_SOCKSTAT: '^\\S+\\s+{name}\\s+{pid}\\s+\\S+\\s+{protocol}4\\s+{local}\\s+{remote}$', # 3561 tor 4 s - rw---n-- 2 0 TCP 10.0.0.2:9050 10.0.0.1:22370 - Resolver.BSD_PROCSTAT: '^\s*{pid}\s+{name}\s+.*\s+{protocol}\s+{local}\s+{remote}$', + Resolver.BSD_PROCSTAT: '^\\s*{pid}\\s+{name}\\s+.*\\s+{protocol}\\s+{local}\\s+{remote}$', # _tor tor 15843 20* internet stream tcp 0x0 192.168.1.100:36174 --> 4.3.2.1:443 - Resolver.BSD_FSTAT: '^\S+\s+{name}\s+{pid}\s+.*\s+{protocol}\s+\S+\s+{local}\s+[-<]-[->]\s+{remote}$', + Resolver.BSD_FSTAT: '^\\S+\\s+{name}\\s+{pid}\\s+.*\\s+{protocol}\\s+\\S+\\s+{local}\\s+[-<]-[->]\\s+{remote}$', } @@ -243,11 +243,11 @@ def get_connections(resolver = None, process_pid = None, process_name = None): raise IOError("Unable to query '%s': %s" % (resolver_command, exc)) resolver_regex_str = RESOLVER_FILTER[resolver].format( - protocol = '(?P<protocol>\S+)', - local = '(?P<local>[\[\]0-9a-f.:]+)', - remote = '(?P<remote>[\[\]0-9a-f.:]+)', + protocol = '(?P<protocol>\\S+)', + local = '(?P<local>[\\[\\]0-9a-f.:]+)', + remote = '(?P<remote>[\\[\\]0-9a-f.:]+)', pid = process_pid if process_pid else '[0-9]*', - name = process_name if process_name else '\S*', + name = process_name if process_name else '\\S*', ) _log('Resolver regex: %s' % resolver_regex_str) diff --git a/stem/util/system.py b/stem/util/system.py index 80e80f75..c04eb673 100644 --- a/stem/util/system.py +++ b/stem/util/system.py @@ -706,7 +706,7 @@ def pid_by_name(process_name, multiple = False): results = stem.util.system.call('tasklist', None) if results: - tasklist_regex = re.compile('^\s*%s\s+(?P<pid>[0-9]*)' % process_name) + tasklist_regex = re.compile('^\\s*%s\\s+(?P<pid>[0-9]*)' % process_name) for line in results: match = tasklist_regex.search(line) diff --git a/stem/util/test_tools.py b/stem/util/test_tools.py index 4455c284..03741d98 100644 --- a/stem/util/test_tools.py +++ b/stem/util/test_tools.py @@ -323,7 +323,7 @@ def test_runtimes(): def clean_orphaned_pyc(paths): """ - Deletes any file with a \*.pyc extention without a corresponding \*.py. This + Deletes any file with a \\*.pyc extention without a corresponding \\*.py. This helps to address a common gotcha when deleting python files... * You delete module 'foo.py' and run the tests to ensure that you haven't diff --git a/test/output.py b/test/output.py index 0eedfa27..9df1bc93 100644 --- a/test/output.py +++ b/test/output.py @@ -169,7 +169,7 @@ def strip_module(line_type, line_content): repetitive, and redundant with the headers. """ - m = re.match('.*( \(test\..*?\)).*', line_content) + m = re.match('.*( \\(test\\..*?\\)).*', line_content) if m: line_content = line_content.replace(m.groups()[0], '', 1) @@ -182,7 +182,7 @@ def runtimes(line_type, line_content): Provides test runtimes if showing verbose results. """ - m = re.search('(test\.[^)]*)', line_content) + m = re.search('(test\\.[^)]*)', line_content) if m and line_type == LineType.OK: test = '%s.%s' % (m.group(0), line_content.split()[0]) @@ -283,7 +283,7 @@ class ErrorTracker(object): else: self._errors.append(line_content) - module_match = re.match('.*\((test\.\S+)\.\S+\).*', line_content) + module_match = re.match('.*\\((test\\.\\S+)\\.\\S+\\).*', line_content) if module_match: self._error_modules.add(module_match.group(1)) diff --git a/test/task.py b/test/task.py index 832b397f..a7dc15a6 100644 --- a/test/task.py +++ b/test/task.py @@ -175,7 +175,7 @@ def _check_for_unused_tests(paths): with open(py_path) as f: file_contents = f.read() - test_match = re.search('^class (\S*)\(unittest.TestCase\):$', file_contents, re.MULTILINE) + test_match = re.search('^class (\\S*)\\(unittest.TestCase\\):$', file_contents, re.MULTILINE) if test_match: class_name = test_match.groups()[0] diff --git a/test/unit/directory/fallback.py b/test/unit/directory/fallback.py index 59d59567..3f5ceca3 100644 --- a/test/unit/directory/fallback.py +++ b/test/unit/directory/fallback.py @@ -131,7 +131,7 @@ class TestFallback(unittest.TestCase): @patch(URL_OPEN, Mock(return_value = io.BytesIO(FALLBACK_GITWEB_CONTENT.replace(b'version=2.0.0', b'version')))) def test_from_remote_malformed_header(self): - self.assertRaisesRegexp(IOError, 'Malformed fallback directory header line: /\* version \*/', stem.directory.Fallback.from_remote) + self.assertRaisesRegexp(IOError, 'Malformed fallback directory header line: /\\* version \\*/', stem.directory.Fallback.from_remote) def test_from_remote_malformed(self): test_values = { diff --git a/test/unit/installation.py b/test/unit/installation.py index feb52d89..fd8709ba 100644 --- a/test/unit/installation.py +++ b/test/unit/installation.py @@ -31,7 +31,7 @@ class TestInstallation(unittest.TestCase): # # packages = ['stem', 'stem.descriptor', 'stem.util'], - modules = json.loads(re.search('packages = (\[.*\])', self.setup_contents).group(1).replace("'", '"')) + modules = json.loads(re.search('packages = (\\[.*\\])', self.setup_contents).group(1).replace("'", '"')) module_paths = dict([(m, os.path.join(test.STEM_BASE, m.replace('.', os.path.sep))) for m in modules]) for module, path in module_paths.items():
participants (1)
-
atagar@torproject.org