From 8b2cffd34ea36639ebb3709012067692ceae7a2a Mon Sep 17 00:00:00 2001 From: Jack Robison Date: Tue, 25 Apr 2017 11:57:50 -0400 Subject: [PATCH 1/5] re-enable secure vars --- .appveyor.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 63142c3a3..3b63d3320 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -3,12 +3,12 @@ version: 1.0.{build} environment: GH_TOKEN: secure: LiI5jyuHUw6XbH4kC3gP1HX4P/v4rwD/gCNtaFhQu2AvJz1/1wALkp5ECnIxRySN -# key_pass: -# secure: u6DydPcdrUJlxGL9uc7yQRYG8+5rY6aAEE9nfCSzFyNzZlX9NniOp8Uh5ZKQqX7bGEngLI6ipbLfiJvn0XFnhbn2iTkOuMqOXVJVOehvwlQ= -# pfx_key: -# secure: 1mwqyRy7hDqDjDK+TIAoaXyXzpNgwruFNA6TPkinUcVM7A+NLD33RQLnfnwVy+R5ovD2pUfhQ6+N0Fqebv6tZh436LIEsock+6IOdpgFwrg= + key_pass: + secure: u6DydPcdrUJlxGL9uc7yQRYG8+5rY6aAEE9nfCSzFyNzZlX9NniOp8Uh5ZKQqX7bGEngLI6ipbLfiJvn0XFnhbn2iTkOuMqOXVJVOehvwlQ= + pfx_key: + secure: 1mwqyRy7hDqDjDK+TIAoaXyXzpNgwruFNA6TPkinUcVM7A+NLD33RQLnfnwVy+R5ovD2pUfhQ6+N0Fqebv6tZh436LIEsock+6IOdpgFwrg= + -# #notifications: # - provider: Slack # incoming_webhook: From a50cbdcbb80aae1f2df29bd6b05900be00d55ba2 Mon Sep 17 00:00:00 2001 From: Jack Robison Date: Tue, 25 Apr 2017 12:07:36 -0400 Subject: [PATCH 2/5] try decrypting cert --- build/build.ps1 | 5 +++++ build/lbry2.pfx.enc | Bin 0 -> 5968 bytes 2 files changed, 5 insertions(+) create mode 100644 build/lbry2.pfx.enc diff --git a/build/build.ps1 b/build/build.ps1 index 158e71598..7604057c8 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -19,11 +19,16 @@ Get-Content ..\requirements.txt | Select-String -Pattern 'gmpy|miniupnpc' -NotMa Add-Content requirements.txt "./gmpy-1.17-cp27-none-win32.whl" pip install -r requirements.txt +pip install ..\. python set_build.py pyinstaller -y daemon.onefile.spec pyinstaller -y cli.onefile.spec +nuget install secure-file -ExcludeVersion +secure-file\tools\secure-file -decrypt .\lbry2.pfx.enc -secret "$env:pfx_key" +signtool.exe sign /f .\lbry2.pfx /p "$env:key_pass" /tr http://tsa.starfieldtech.com /td SHA256 /fd SHA256 dist\*.exe + python zip_daemon.py python release_on_tag.py \ No newline at end of file diff --git a/build/lbry2.pfx.enc b/build/lbry2.pfx.enc new file mode 100644 index 0000000000000000000000000000000000000000..46e52260aab51183e669e77f96edbe1a463bf391 GIT binary patch literal 5968 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≫?re#eh04 zGzpYx)jg6$F+Y)1wEAH(kYwS`$^Bn(F*>M02fv6maS}<5k+i9fxE+~YnokO`|DrI2r%87G;Nq!Qb+%TX z-85F2Q{3$k4Gku-biuI}C& Date: Tue, 25 Apr 2017 14:21:13 -0400 Subject: [PATCH 3/5] pylint --- .pylintrc | 1 - lbrynet/dht/encoding.py | 2 +- lbrynet/dht/msgtypes.py | 2 +- lbrynet/dht/node.py | 14 +++++++------- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.pylintrc b/.pylintrc index 193d027cd..5eb1a87f0 100644 --- a/.pylintrc +++ b/.pylintrc @@ -99,7 +99,6 @@ disable= redefined-variable-type, relative-import, signature-differs, - singleton-comparison, super-init-not-called, too-few-public-methods, too-many-arguments, diff --git a/lbrynet/dht/encoding.py b/lbrynet/dht/encoding.py index 4f7a068ac..08081d95a 100644 --- a/lbrynet/dht/encoding.py +++ b/lbrynet/dht/encoding.py @@ -83,7 +83,7 @@ class Bencode(Encoding): elif type(data) == float: # This (float data type) is a non-standard extension to the original Bencode algorithm return 'f%fe' % data - elif data == None: + elif data is None: # This (None/NULL data type) is a non-standard extension # to the original Bencode algorithm return 'n' diff --git a/lbrynet/dht/msgtypes.py b/lbrynet/dht/msgtypes.py index 81f9d1a1d..3c1aeabe2 100644 --- a/lbrynet/dht/msgtypes.py +++ b/lbrynet/dht/msgtypes.py @@ -22,7 +22,7 @@ class RequestMessage(Message): """ Message containing an RPC request """ def __init__(self, nodeID, method, methodArgs, rpcID=None): - if rpcID == None: + if rpcID is None: rpcID = generate_id() Message.__init__(self, rpcID, nodeID) self.request = method diff --git a/lbrynet/dht/node.py b/lbrynet/dht/node.py index 65ce90bbe..3c66936b7 100644 --- a/lbrynet/dht/node.py +++ b/lbrynet/dht/node.py @@ -93,13 +93,13 @@ class Node(object): self.next_refresh_call = None self.next_change_token_call = None # Create k-buckets (for storing contacts) - if routingTableClass == None: + if routingTableClass is None: self._routingTable = routingtable.OptimizedTreeRoutingTable(self.id) else: self._routingTable = routingTableClass(self.id) # Initialize this node's network access mechanisms - if networkProtocol == None: + if networkProtocol is None: self._protocol = protocol.KademliaProtocol(self) else: self._protocol = networkProtocol @@ -107,7 +107,7 @@ class Node(object): self.token_secret = self._generateID() self.old_token_secret = None self.change_token() - if dataStore == None: + if dataStore is None: self._dataStore = datastore.DictDataStore() else: self._dataStore = dataStore @@ -454,7 +454,7 @@ class Node(object): to fix this (perhaps use a stream from the Protocol class?) """ # Get the sender's ID (if any) - if originalPublisherID == None: + if originalPublisherID is None: if '_rpcNodeID' in kwargs: originalPublisherID = kwargs['_rpcNodeID'] else: @@ -471,7 +471,7 @@ class Node(object): # raise TypeError, 'No contact info available' if ((self_store is False) and - (not 'token' in value or not self.verify_token(value['token'], compact_ip))): + ('token' not in value or not self.verify_token(value['token'], compact_ip))): raise ValueError('Invalid or missing token') if 'port' in value: @@ -584,7 +584,7 @@ class Node(object): """ findValue = rpc != 'findNode' - if startupShortlist == None: + if startupShortlist is None: shortlist = self._routingTable.findCloseNodes(key, constants.alpha) if key != self.id: # Update the "last accessed" timestamp for the appropriate k-bucket @@ -776,7 +776,7 @@ class _IterativeFindHelper(object): if self.key in self.find_value_result: self.outer_d.callback(self.find_value_result) return - elif len(self.active_contacts) and self.find_value == False: + elif len(self.active_contacts) and self.find_value is False: if self._is_all_done(): # TODO: Re-send the FIND_NODEs to all of the k closest nodes not already queried # From d6e7fde90a3cddd288739ed2f6ef296cd3e8eee6 Mon Sep 17 00:00:00 2001 From: Alex Grintsvayg Date: Tue, 25 Apr 2017 14:23:05 -0400 Subject: [PATCH 4/5] pointless strings --- .pylintrc | 1 - lbrynet/lbrynet_daemon/Publisher.py | 8 ++------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/.pylintrc b/.pylintrc index 5eb1a87f0..f1be5b61b 100644 --- a/.pylintrc +++ b/.pylintrc @@ -92,7 +92,6 @@ disable= no-member, no-self-use, not-context-manager, - pointless-string-statement, protected-access, redefined-builtin, redefined-outer-name, diff --git a/lbrynet/lbrynet_daemon/Publisher.py b/lbrynet/lbrynet_daemon/Publisher.py index baafb4098..241798a5b 100644 --- a/lbrynet/lbrynet_daemon/Publisher.py +++ b/lbrynet/lbrynet_daemon/Publisher.py @@ -20,11 +20,9 @@ class Publisher(object): self.certificate_id = certificate_id self.lbry_file = None - """ - Create lbry file and make claim - """ @defer.inlineCallbacks def create_and_publish_stream(self, name, bid, claim_dict, file_path): + """Create lbry file and make claim""" log.info('Starting publish for %s', name) file_name = os.path.basename(file_path) with file_utils.get_read_handle(file_path) as read_handle: @@ -47,11 +45,9 @@ class Publisher(object): yield self.lbry_file.save_status() defer.returnValue(claim_out) - """ - Make a claim without creating a lbry file - """ @defer.inlineCallbacks def publish_stream(self, name, bid, claim_dict): + """Make a claim without creating a lbry file""" claim_out = yield self.make_claim(name, bid, claim_dict) defer.returnValue(claim_out) From cdf67de46c503032d1990852f0494479e992b8fd Mon Sep 17 00:00:00 2001 From: Alex Grintsvayg Date: Tue, 25 Apr 2017 14:31:05 -0400 Subject: [PATCH 5/5] pylint type checking --- .pylintrc | 1 - lbrynet/core/Wallet.py | 2 +- lbrynet/core/client/BlobRequester.py | 2 +- lbrynet/dht/encoding.py | 28 ++++++++++++++-------------- lbrynet/dht/node.py | 4 ++-- lbrynet/undecorated.py | 2 +- 6 files changed, 19 insertions(+), 20 deletions(-) diff --git a/.pylintrc b/.pylintrc index f1be5b61b..3d95c0cfe 100644 --- a/.pylintrc +++ b/.pylintrc @@ -112,7 +112,6 @@ disable= trailing-newlines, undefined-loop-variable, ungrouped-imports, - unidiomatic-typecheck, unnecessary-lambda, unused-argument, unused-variable, diff --git a/lbrynet/core/Wallet.py b/lbrynet/core/Wallet.py index dd5c8507e..791fac047 100644 --- a/lbrynet/core/Wallet.py +++ b/lbrynet/core/Wallet.py @@ -51,7 +51,7 @@ class ClaimOutpoint(dict): return (self['txid'], self['nout']) == (compare['txid'], compare['nOut']) elif 'nout' in compare: return (self['txid'], self['nout']) == (compare['txid'], compare['nout']) - elif type(compare) in [str, unicode]: + elif isinstance(compare, (str, unicode)): return compare == self.__repr__() else: raise TypeError('cannot compare {}'.format(type(compare))) diff --git a/lbrynet/core/client/BlobRequester.py b/lbrynet/core/client/BlobRequester.py index d1681b0db..ee9fa5e1b 100644 --- a/lbrynet/core/client/BlobRequester.py +++ b/lbrynet/core/client/BlobRequester.py @@ -241,7 +241,7 @@ class RequestHelper(object): def _handle_incoming_blob(response_dict, peer, request): if request.response_identifier not in response_dict: return InvalidResponseError("response identifier not in response") - if type(response_dict[request.response_identifier]) != dict: + if not isinstance(response_dict[request.response_identifier], dict): return InvalidResponseError("response not a dict. got %s" % type(response_dict[request.response_identifier])) response = response_dict[request.response_identifier] diff --git a/lbrynet/dht/encoding.py b/lbrynet/dht/encoding.py index 08081d95a..bc7e88ca0 100644 --- a/lbrynet/dht/encoding.py +++ b/lbrynet/dht/encoding.py @@ -63,16 +63,16 @@ class Bencode(Encoding): @return: The encoded data @rtype: str """ - if type(data) in (int, long): + if isinstance(data, (int, long)): return 'i%de' % data - elif type(data) == str: + elif isinstance(data, str): return '%d:%s' % (len(data), data) - elif type(data) in (list, tuple): + elif isinstance(data, (list, tuple)): encodedListItems = '' for item in data: encodedListItems += self.encode(item) return 'l%se' % encodedListItems - elif type(data) == dict: + elif isinstance(data, dict): encodedDictItems = '' keys = data.keys() keys.sort() @@ -80,7 +80,7 @@ class Bencode(Encoding): encodedDictItems += self.encode(key) encodedDictItems += self.encode(data[key]) return 'd%se' % encodedDictItems - elif type(data) == float: + elif isinstance(data, float): # This (float data type) is a non-standard extension to the original Bencode algorithm return 'f%fe' % data elif data is None: @@ -89,7 +89,7 @@ class Bencode(Encoding): return 'n' else: print data - raise TypeError, "Cannot bencode '%s' object" % type(data) + raise TypeError("Cannot bencode '%s' object" % type(data)) def decode(self, data): """ Decoder implementation of the Bencode algorithm @@ -104,11 +104,11 @@ class Bencode(Encoding): @rtype: int, list, dict or str """ if len(data) == 0: - raise DecodeError, 'Cannot decode empty string' + raise DecodeError('Cannot decode empty string') try: return self._decodeRecursive(data)[0] except ValueError as e: - raise DecodeError, e.message + raise DecodeError(e.message) @staticmethod def _decodeRecursive(data, startIndex=0): @@ -118,14 +118,14 @@ class Bencode(Encoding): """ if data[startIndex] == 'i': endPos = data[startIndex:].find('e') + startIndex - return (int(data[startIndex + 1:endPos]), endPos + 1) + return int(data[startIndex + 1:endPos]), endPos + 1 elif data[startIndex] == 'l': startIndex += 1 decodedList = [] while data[startIndex] != 'e': listData, startIndex = Bencode._decodeRecursive(data, startIndex) decodedList.append(listData) - return (decodedList, startIndex + 1) + return decodedList, startIndex + 1 elif data[startIndex] == 'd': startIndex += 1 decodedDict = {} @@ -133,15 +133,15 @@ class Bencode(Encoding): key, startIndex = Bencode._decodeRecursive(data, startIndex) value, startIndex = Bencode._decodeRecursive(data, startIndex) decodedDict[key] = value - return (decodedDict, startIndex) + return decodedDict, startIndex elif data[startIndex] == 'f': # This (float data type) is a non-standard extension to the original Bencode algorithm endPos = data[startIndex:].find('e') + startIndex - return (float(data[startIndex + 1:endPos]), endPos + 1) + return float(data[startIndex + 1:endPos]), endPos + 1 elif data[startIndex] == 'n': # This (None/NULL data type) is a non-standard extension # to the original Bencode algorithm - return (None, startIndex + 1) + return None, startIndex + 1 else: splitPos = data[startIndex:].find(':') + startIndex try: @@ -151,4 +151,4 @@ class Bencode(Encoding): startIndex = splitPos + 1 endPos = startIndex + length bytes = data[startIndex:endPos] - return (bytes, endPos) + return bytes, endPos diff --git a/lbrynet/dht/node.py b/lbrynet/dht/node.py index 3c66936b7..25e209db4 100644 --- a/lbrynet/dht/node.py +++ b/lbrynet/dht/node.py @@ -207,7 +207,7 @@ class Node(object): def expand_and_filter(result): expanded_peers = [] - if type(result) == dict: + if isinstance(result, dict): if blob_hash in result: for peer in result[blob_hash]: if self.lbryid != peer[6:]: @@ -353,7 +353,7 @@ class Node(object): outerDf = defer.Deferred() def checkResult(result): - if type(result) == dict: + if isinstance(result, dict): # We have found the value; now see who was the closest contact without it... # ...and store the key/value pair outerDf.callback(result) diff --git a/lbrynet/undecorated.py b/lbrynet/undecorated.py index 3a95cad5d..3395be714 100644 --- a/lbrynet/undecorated.py +++ b/lbrynet/undecorated.py @@ -24,7 +24,7 @@ __version__ = '0.3.0' def undecorated(o): """Remove all decorators from a function, method or class""" # class decorator - if type(o) is type: + if isinstance(o, type): return o try: