fix merged conflicts

This commit is contained in:
jai.s 2019-10-18 19:41:42 +05:30
commit b18ed5e80f
No known key found for this signature in database
GPG Key ID: 360CFA25EFC67D12
57 changed files with 459 additions and 438 deletions

View File

@ -158,7 +158,7 @@ def encodeAddress(version, stream, ripe):
raise Exception(
'Programming error in encodeAddress: The length of'
' a given ripe hash was not 20.')
ripe = ripe.lstrip('\x00')
ripe = ripe.lstrip('\x00'.encode('utf-8'))
storedBinaryData = encodeVarint(version) + encodeVarint(stream) + ripe
@ -180,7 +180,6 @@ def decodeAddress(address):
data (almost certainly a ripe hash))
"""
# pylint: disable=too-many-return-statements,too-many-statements,too-many-return-statements,too-many-branches
address = str(address).strip()
if address[:3] == 'BM-':
@ -192,7 +191,7 @@ def decodeAddress(address):
return status, 0, 0, ''
# after converting to hex, the string will be prepended
# with a 0x and appended with a L
hexdata = hex(integer)[2:-1]
hexdata = hex(integer)[2:]
if len(hexdata) % 2 != 0:
hexdata = '0' + hexdata
@ -248,7 +247,7 @@ def decodeAddress(address):
embeddedRipeData
elif len(embeddedRipeData) == 18:
return status, addressVersionNumber, streamNumber, \
'\x00\x00' + embeddedRipeData
'\x00\x00'.encode('utf-8') + embeddedRipeData
elif len(embeddedRipeData) < 18:
return 'ripetooshort', 0, 0, ''
elif len(embeddedRipeData) > 20:
@ -265,7 +264,8 @@ def decodeAddress(address):
return 'ripetoolong', 0, 0, ''
elif len(embeddedRipeData) < 4:
return 'ripetooshort', 0, 0, ''
x00string = '\x00' * (20 - len(embeddedRipeData))
x00string = '\x00'.encode('utf-8') * (20 - len(embeddedRipeData))
return status, addressVersionNumber, streamNumber, \
x00string + embeddedRipeData

View File

@ -46,13 +46,13 @@ def generate_hash(string):
# make input case insensitive
string = str.lower(string)
hash_object = hashlib.md5(str.encode(string))
print hash_object.hexdigest()
print(hash_object.hexdigest())
# returned object is a hex string
return hash_object.hexdigest()
except IndexError:
print "Error: Please enter a string as an argument."
print("Error: Please enter a string as an argument.")
def random_color(hash_string):

View File

@ -1,19 +1,41 @@
#:import Toolbar kivymd.toolbar.Toolbar
#:import NavigationLayout kivymd.navigationdrawer.NavigationLayout
#:import NavigationDrawerDivider kivymd.navigationdrawer.NavigationDrawerDivider
#:import NavigationDrawerSubheader kivymd.navigationdrawer.NavigationDrawerSubheader
#:import MDCheckbox kivymd.selectioncontrols.MDCheckbox
#:import MDList kivymd.list.MDList
#:import OneLineListItem kivymd.list.OneLineListItem
#:import MDTextField kivymd.textfields.MDTextField
#:import MDToolbar kivymd.uix.toolbar.MDToolbar
#:import ThemeManager kivymd.theming.ThemeManager
#:import MDNavigationDrawer kivymd.uix.navigationdrawer.MDNavigationDrawer
#:import NavigationLayout kivymd.uix.navigationdrawer.NavigationLayout
#:import NavigationDrawerDivider kivymd.uix.navigationdrawer.NavigationDrawerDivider
#:import NavigationDrawerToolbar kivymd.uix.navigationdrawer.NavigationDrawerToolbar
#:import NavigationDrawerSubheader kivymd.uix.navigationdrawer.NavigationDrawerSubheader
#:import MDCheckbox kivymd.uix.selectioncontrol.MDCheckbox
#:import MDSwitch kivymd.uix.selectioncontrol.MDSwitch
#:import MDList kivymd.uix.list.MDList
#:import OneLineListItem kivymd.uix.list.OneLineListItem
#:import TwoLineListItem kivymd.uix.list.TwoLineListItem
#:import ThreeLineListItem kivymd.uix.list.ThreeLineListItem
#:import OneLineAvatarListItem kivymd.uix.list.OneLineAvatarListItem
#:import OneLineIconListItem kivymd.uix.list.OneLineIconListItem
#:import OneLineAvatarIconListItem kivymd.uix.list.OneLineAvatarIconListItem
#:import MDTextField kivymd.uix.textfield.MDTextField
#:import MDSpinner kivymd.uix.spinner.MDSpinner
#:import MDCard kivymd.uix.card.MDCard
#:import MDSeparator kivymd.uix.card.MDSeparator
#:import MDDropdownMenu kivymd.uix.menu.MDDropdownMenu
#:import get_color_from_hex kivy.utils.get_color_from_hex
#:import colors kivymd.color_definitions.colors
#:import MDTabbedPanel kivymd.tabs.MDTabbedPanel
#:import MDTab kivymd.tabs.MDTab
#:import MDFloatingActionButton kivymd.button.MDFloatingActionButton
#:import MDSlider kivymd.uix.slider.MDSlider
#:import MDTabs kivymd.uix.tab.MDTabs
#:import MDProgressBar kivymd.uix.progressbar.MDProgressBar
#:import MDAccordion kivymd.uix.accordion.MDAccordion
#:import MDAccordionItem kivymd.uix.accordion.MDAccordionItem
#:import MDAccordionSubItem kivymd.uix.accordion.MDAccordionSubItem
#:import MDFloatingActionButton kivymd.uix.button.MDFloatingActionButton
#:import Factory kivy.factory.Factory
#:import MDScrollViewRefreshLayout kivymd.refreshlayout.MDScrollViewRefreshLayout
#:import MDTextButton kivymd.uix.button.MDTextButton
#:import FadeTransition kivy.uix.screenmanager.FadeTransition
#:import MDScrollViewRefreshLayout kivymd.uix.refreshlayout.MDScrollViewRefreshLayout
#:import MDTabsBase kivymd.uix.tab.MDTabsBase
<Tab@BoxLayout+MDTabsBase>
#:set color_button (0.784, 0.443, 0.216, 1) # brown
#:set color_button_pressed (0.659, 0.522, 0.431, 1) # darker brown
@ -151,7 +173,7 @@ NavigationLayout:
BoxLayout:
id: box_layout
orientation: 'vertical'
Toolbar:
MDToolbar:
id: toolbar
title: app.current_address_label()
opacity: 1 if app.addressexist() else 0
@ -314,10 +336,9 @@ NavigationLayout:
BoxLayout:
AnchorLayout:
MDRaisedButton:
size_hint: .6, .35
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H4'
text: root.available_credits
font_size: '13sp'
color: (1,1,1,1)
@ -363,7 +384,6 @@ NavigationLayout:
txt_input: txt_input
rv: rv
size : (890, 60)
size_hint: 1,1
MyTextInput:
id: txt_input
size_hint_y: None
@ -437,19 +457,17 @@ NavigationLayout:
padding: dp(10)
BoxLayout:
MDLabel:
font_style: 'Body1'
font_style: 'Subtitle2'
theme_text_color: 'Primary'
text: "You may generate addresses by using either random numbers or by using a passphrase If you use a passphrase, the address is called a deterministic; address The Random Number option is selected by default but deterministic addresses have several \n pros and cons:\n"
halign: 'center'
bold: True
color:app.theme_cls.primary_dark
BoxLayout:
MDLabel:
font_style: 'Caption'
font_style: 'Subtitle2'
theme_text_color: 'Primary'
text: "If talk about pros You can recreate your addresses on any computer from memory, You need-not worry about backing up your keys.dat file as long as you can remember your passphrase and aside talk about cons You must remember (or write down) your You must remember the address version number and the stream number along with your passphrase If you choose a weak passphrase and someone on the Internet can brute-force it, they can read your messages and send messages as you"
halign: 'center'
bold: True
color:app.theme_cls.primary_dark
MDCheckbox:
id: grp_chkbox_1
@ -457,12 +475,11 @@ NavigationLayout:
active: True
allow_no_selection: False
MDLabel:
font_style: 'Caption'
font_style: 'Body2'
theme_text_color: 'Primary'
text: "use a random number generator to make an address"
halign: 'center'
size_hint_y: None
bold: True
height: self.texture_size[1] + dp(4)
color: [0.941, 0, 0,1]
MDCheckbox:
@ -470,22 +487,20 @@ NavigationLayout:
group: 'test'
allow_no_selection: False
MDLabel:
font_style: 'Caption'
font_style: 'Body2'
theme_text_color: 'Primary'
text: "use a pseudo number generator to make an address"
halign: 'center'
size_hint_y: None
bold: True
color: [0.941, 0, 0,1]
height: self.texture_size[1] + dp(4)
BoxLayout:
AnchorLayout:
MDRaisedButton:
size_hint: .5, .35
height: dp(40)
on_press: app.root.ids.scr_mngr.current = 'random'
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'proceed'
font_size: '13sp'
color: (1,1,1,1)
@ -501,19 +516,17 @@ NavigationLayout:
padding: dp(20)
spacing: 100
MDLabel:
font_style: 'Body1'
font_style: 'Subtitle2'
theme_text_color: 'Primary'
text: "Random Addresses"
halign: 'center'
bold: True
color:app.theme_cls.primary_dark
MDLabel:
font_style: 'Body1'
font_style: 'Subtitle2'
theme_text_color: 'Primary'
text: "Here you may generate as many addresses as you like, Indeed creating and abandoning addresses is encouraged"
halign: 'center'
bold: True
color:app.theme_cls.primary_dark
MDTextField:
@ -525,12 +538,11 @@ NavigationLayout:
BoxLayout:
AnchorLayout:
MDRaisedButton:
size_hint: .5, None
height: dp(40)
on_release: root.generateaddress(app)
opposite_colors: True
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'next'
font_size: '13sp'
color: (1,1,1,1)
@ -558,7 +570,7 @@ NavigationLayout:
size_hint: .6, .55
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Server'
font_size: '13sp'
color: (1,1,1,1)
@ -571,7 +583,7 @@ NavigationLayout:
size_hint: .6, .55
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Import or export data'
font_size: '13sp'
color: (1,1,1,1)
@ -584,7 +596,7 @@ NavigationLayout:
size_hint: .6, .55
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Restart background service'
font_size: '13sp'
color: (1,1,1,1)
@ -596,7 +608,6 @@ NavigationLayout:
theme_text_color: 'Primary'
text: "bitmessage is 11 seconds behind the network"
halign: 'center'
bold: True
color: [0.941, 0, 0,1]
BoxLayout:
@ -610,7 +621,6 @@ NavigationLayout:
theme_text_color: 'Primary'
text: "show settings (for advanced users only)"
halign: 'left'
bold: True
color: app.theme_cls.primary_dark
<MyAddress>:
@ -662,20 +672,20 @@ NavigationLayout:
size: self.size
MDLabel:
size_hint_y: None
font_style: 'Headline'
font_style: 'H5'
theme_text_color: 'Primary'
text: 'Platinum'
halign: 'center'
color: 1,1,1,1
MDLabel:
font_style: 'Subhead'
font_style: 'Subtitle1'
theme_text_color: 'Primary'
text: 'We provide subscriptions for proof of work calculation for first month. '
halign: 'center'
color: 1,1,1,1
MDLabel:
id: free_pak
font_style: 'Headline'
font_style: 'H5'
theme_text_color: 'Primary'
text: '€ 50.0'
halign: 'center'
@ -687,11 +697,11 @@ NavigationLayout:
Rectangle:
pos: self.pos
size: self.size
size_hint: 1, None
size: dp(app.window_size[0]) - 2*dp(app.window_size[0]/16 if app.window_size[0] <= 720 else app.window_size[0]/4*1.1) - 10 , 1
height: dp(40)
on_press: root.get_available_credits(self)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Get Free Credits'
font_size: '13sp'
color: (0,0,0,1)
@ -708,19 +718,19 @@ NavigationLayout:
size: self.size
MDLabel:
size_hint_y: None
font_style: 'Headline'
font_style: 'H5'
theme_text_color: 'Primary'
text: 'Silver'
halign: 'center'
color: 1,1,1,1
MDLabel:
font_style: 'Subhead'
font_style: 'Subtitle1'
theme_text_color: 'Primary'
text: 'We provide for proof of work calculation for six month. '
halign: 'center'
color: 1,1,1,1
MDLabel:
font_style: 'Headline'
font_style: 'H5'
theme_text_color: 'Primary'
text: '€ 100.0'
halign: 'center'
@ -732,10 +742,10 @@ NavigationLayout:
Rectangle:
pos: self.pos
size: self.size
size_hint: 1, None
size: dp(app.window_size[0]) - 2*dp(app.window_size[0]/16 if app.window_size[0] <= 720 else app.window_size[0]/4*1.1) - 10 , 1
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Get Monthly Credits'
font_size: '13sp'
color: (0,0,0,1)
@ -752,19 +762,19 @@ NavigationLayout:
size: self.size
MDLabel:
size_hint_y: None
font_style: 'Headline'
font_style: 'H5'
theme_text_color: 'Primary'
text: 'Gold'
halign: 'center'
color: 1,1,1,1
MDLabel:
font_style: 'Subhead'
font_style: 'Subtitle1'
theme_text_color: 'Primary'
text: 'We provide for proof of work calculation for 1years. '
halign: 'center'
color: 1,1,1,1
MDLabel:
font_style: 'Headline'
font_style: 'H5'
theme_text_color: 'Primary'
text: '€ 500.0'
halign: 'center'
@ -776,10 +786,10 @@ NavigationLayout:
Rectangle:
pos: self.pos
size: self.size
size_hint: 1, None
size: dp(app.window_size[0]) - 2*dp(app.window_size[0]/16 if app.window_size[0] <= 720 else app.window_size[0]/4*1.1) - 10 , 1
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Get Yearly Credits'
font_size: '13sp'
color: (0,0,0,1)
@ -826,7 +836,7 @@ NavigationLayout:
on_release:
root.savecontact()
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Save'
font_size: '13sp'
color: (1,1,1,1)
@ -837,7 +847,7 @@ NavigationLayout:
on_press: root.dismiss()
on_press: root.close_pop()
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Cancel'
font_size: '13sp'
color: (1,1,1,1)
@ -846,7 +856,7 @@ NavigationLayout:
size_hint: 2, None
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Scan QR code'
font_size: '13sp'
color: (1,1,1,1)
@ -855,12 +865,11 @@ NavigationLayout:
<NetworkStat>:
name: 'networkstat'
MDTabbedPanel:
MDTabs:
id: tab_panel
tab_display_mode:'text'
MDTab:
name: 'connections'
Tab:
text: "Total connections"
ScrollView:
do_scroll_x: False
@ -873,16 +882,15 @@ NavigationLayout:
BoxLayout:
AnchorLayout:
MDRaisedButton:
size_hint: .6, .35
size_hint: .6, .3
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: root.text_variable_1
font_size: '13sp'
color: (1,1,1,1)
halign: 'center'
MDTab:
name: 'processes'
Tab:
text: 'Processes'
ScrollView:
do_scroll_x: False
@ -895,10 +903,10 @@ NavigationLayout:
BoxLayout:
AnchorLayout:
MDRaisedButton:
size_hint: .7, .6
size_hint: .7, .55
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: root.text_variable_2
font_size: '13sp'
color: (1,1,1,1)
@ -908,10 +916,10 @@ NavigationLayout:
BoxLayout:
AnchorLayout:
MDRaisedButton:
size_hint: .7, .6
size_hint: .7, .55
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: root.text_variable_3
font_size: '13sp'
color: (1,1,1,1)
@ -921,10 +929,10 @@ NavigationLayout:
BoxLayout:
AnchorLayout:
MDRaisedButton:
size_hint: .7, .6
size_hint: .7, .55
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: root.text_variable_4
font_size: '13sp'
color: (1,1,1,1)
@ -934,10 +942,10 @@ NavigationLayout:
BoxLayout:
AnchorLayout:
MDRaisedButton:
size_hint: .7, .6
size_hint: .7, .55
height: dp(40)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: root.text_variable_5
font_size: '13sp'
color: (1,1,1,1)
@ -953,31 +961,31 @@ NavigationLayout:
height: dp(500) + self.minimum_height
padding: dp(32)
MDLabel:
font_style: 'Headline'
font_style: 'Subtitle1'
theme_text_color: 'Primary'
text: root.subject
halign: 'left'
font_size: '20sp'
CopyTextBtn:
MDLabel:
font_style: 'Subhead'
font_style: 'H4'
theme_text_color: 'Primary'
text: "From: " + root.from_addr
halign: 'left'
CopyTextBtn:
MDLabel:
font_style: 'Subhead'
font_style: 'H4'
theme_text_color: 'Primary'
text: "To: " + root.to_addr
halign: 'left'
CopyTextBtn:
MDLabel:
font_style: 'Subhead'
font_style: 'H4'
theme_text_color: 'Primary'
text: root.status
halign: 'left'
MDLabel:
font_style: 'Subhead'
font_style: 'H4'
theme_text_color: 'Primary'
text: root.message
halign: 'left'
@ -1036,25 +1044,25 @@ NavigationLayout:
spacing:dp(25)
MDLabel:
id: myaddr_label
font_style: 'Title'
font_style: 'Subtitle2'
theme_text_color: 'Primary'
text: "Label"
font_size: '17sp'
halign: 'left'
MDLabel:
font_style: 'Subhead'
font_style: 'Body1'
theme_text_color: 'Primary'
text: root.address_label
font_size: '15sp'
halign: 'left'
MDLabel:
font_style: 'Title'
font_style: 'Subtitle2'
theme_text_color: 'Primary'
text: "Address"
font_size: '17sp'
halign: 'left'
MDLabel:
font_style: 'Subhead'
font_style: 'Body1'
theme_text_color: 'Primary'
text: root.address
font_size: '15sp'
@ -1068,7 +1076,7 @@ NavigationLayout:
height: dp(40)
on_press: root.send_message_from()
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Send message from'
font_size: '13sp'
color: (1,1,1,1)
@ -1080,7 +1088,7 @@ NavigationLayout:
on_press: app.root.ids.scr_mngr.current = 'showqrcode'
on_press: app.root.ids.sc15.qrdisplay()
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Show QR code'
font_size: '13sp'
color: (1,1,1,1)
@ -1091,7 +1099,7 @@ NavigationLayout:
on_press: root.dismiss()
on_press: root.close_pop()
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Cancel'
font_size: '13sp'
color: (1,1,1,1)
@ -1115,14 +1123,14 @@ NavigationLayout:
orientation: 'vertical'
spacing:dp(20)
MDLabel:
font_style: 'Title'
font_style: 'Subtitle2'
theme_text_color: 'Primary'
text: "Label"
font_size: '17sp'
halign: 'left'
MDTextField:
id: add_label
font_style: 'Subhead'
font_style: 'Body1'
font_size: '15sp'
halign: 'left'
text: root.address_label
@ -1130,13 +1138,13 @@ NavigationLayout:
required: True
helper_text_mode: "on_error"
MDLabel:
font_style: 'Title'
font_style: 'Subtitle2'
theme_text_color: 'Primary'
text: "Address"
font_size: '17sp'
halign: 'left'
MDLabel:
font_style: 'Subhead'
font_style: 'Body1'
theme_text_color: 'Primary'
text: root.address
font_size: '15sp'
@ -1150,7 +1158,7 @@ NavigationLayout:
height: dp(40)
on_press: root.send_message_to()
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Send message to'
font_size: '13sp'
color: (1,1,1,1)
@ -1161,7 +1169,7 @@ NavigationLayout:
font_size: '10sp'
on_press: root.update_addbook_label(root.address)
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Save'
font_size: '13sp'
color: (1,1,1,1)
@ -1172,7 +1180,7 @@ NavigationLayout:
on_press: root.dismiss()
on_press: root.close_pop()
MDLabel:
font_style: 'Title'
font_style: 'H6'
text: 'Cancel'
font_size: '13sp'
color: (1,1,1,1)

View File

@ -19,8 +19,7 @@ from kivy.properties import (
ListProperty,
NumericProperty,
ObjectProperty,
StringProperty
)
StringProperty)
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
@ -36,36 +35,37 @@ from kivy.uix.screenmanager import Screen
from kivy.uix.spinner import Spinner
from kivy.uix.textinput import TextInput
from kivy.utils import platform
import kivy_helper_search
from kivymd.button import MDIconButton
from kivymd.dialog import MDDialog
from kivymd.label import MDLabel
from kivymd.list import (
from bitmessagekivy import kivy_helper_search
from kivymd.uix.dialog import MDDialog
from kivymd.uix.button import MDIconButton
from kivymd.uix.label import MDLabel
from kivymd.uix.list import (
ILeftBody,
ILeftBodyTouch,
IRightBodyTouch,
TwoLineAvatarIconListItem,
TwoLineListItem
)
from kivymd.navigationdrawer import (
TwoLineListItem)
from kivymd.uix.navigationdrawer import (
MDNavigationDrawer,
NavigationDrawerHeaderBase
)
from kivymd.selectioncontrols import MDCheckbox
NavigationDrawerHeaderBase)
from kivymd.uix.selectioncontrol import MDCheckbox
from kivymd.theming import ThemeManager
import queues
from semaphores import kivyuisignaler
import state
from uikivysignaler import UIkivySignaler
import identiconGeneration
from bitmessagekivy.uikivysignaler import UIkivySignaler
# pylint: disable=unused-argument, too-few-public-methods, import-error
from bitmessagekivy import identiconGeneration
import os
from kivy.core.clipboard import Clipboard
# pylint: disable=unused-argument, too-few-public-methods
def toast(text):
"""Method will display the toast message."""
# pylint: disable=redefined-outer-name
from kivymd.toast.kivytoast import toast
from kivymd.toast.kivytoast import toast # pylint: disable=redefined-outer-name
toast(text)
return
@ -92,7 +92,7 @@ class Inbox(Screen):
def init_ui(self, dt=0):
"""Clock Schdule for method inbox accounts."""
self.inboxaccounts()
print dt
print(dt)
def inboxaccounts(self):
"""Load inbox accounts."""
@ -156,12 +156,11 @@ class Inbox(Screen):
self.ids.ml.add_widget(carousel)
else:
content = MDLabel(
font_style='Body1',
font_style='Caption',
theme_text_color='Primary',
text="No message found!" if state.searcing_text
else "yet no message for this account!!!!!!!!!!!!!",
halign='center',
bold=True,
size_hint_y=None,
valign='top')
self.ids.ml.add_widget(content)
@ -184,9 +183,11 @@ class Inbox(Screen):
"UPDATE inbox SET folder = 'trash' WHERE msgid = ?;", str(
data_index))
try:
msg_count_objs = self.parent.parent.parent.parent.children[2].children[0].ids
except Exception:
msg_count_objs = self.parent.parent.parent.parent.parent.children[2].children[0].ids
msg_count_objs = \
self.parent.parent.parent.parent.children[2].children[0].ids
except Exception as e:
msg_count_objs = \
self.parent.parent.parent.parent.parent.children[2].children[0].ids
if int(state.inbox_count) > 0:
msg_count_objs.inbox_cnt.badge_text = str(
int(state.inbox_count) - 1)
@ -273,12 +274,11 @@ class MyAddress(Screen):
self.ids.ml.add_widget(meny)
else:
content = MDLabel(
font_style='Body1',
font_style='Caption',
theme_text_color='Primary',
text="No address found!" if state.searcing_text
else "yet no address is created by user!!!!!!!!!!!!!",
halign='center',
bold=True,
size_hint_y=None,
valign='top')
self.ids.ml.add_widget(content)
@ -306,6 +306,7 @@ class MyAddress(Screen):
self.init_ui()
self.ids.refresh_layout.refresh_done()
self.tick = 0
Clock.schedule_once(refresh_callback, 1)
@staticmethod
@ -330,7 +331,7 @@ class AddressBook(Screen):
def init_ui(self, dt=0):
"""Clock Schdule for method AddressBook."""
self.loadAddresslist(None, 'All', '')
print dt
print (dt)
def loadAddresslist(self, account, where="", what=""):
"""Clock Schdule for method AddressBook."""
@ -367,12 +368,11 @@ class AddressBook(Screen):
self.ids.ml.add_widget(carousel)
else:
content = MDLabel(
font_style='Body1',
font_style='Caption',
theme_text_color='Primary',
text="No contact found!" if state.searcing_text
else "No contact found yet...... ",
halign='center',
bold=True,
size_hint_y=None,
valign='top')
self.ids.ml.add_widget(content)
@ -430,7 +430,7 @@ class SelectableLabel(RecycleDataViewBehavior, Label):
"""Respond to the selection of items in the view."""
self.selected = is_selected
if is_selected:
print "selection changed to {0}".format(rv.data[index])
print("selection changed to {0}".format(rv.data[index]))
rv.parent.txt_input.text = rv.parent.txt_input.text.replace(
rv.parent.txt_input.text, rv.data[index]['text'])
@ -438,39 +438,39 @@ class SelectableLabel(RecycleDataViewBehavior, Label):
class RV(RecycleView):
"""Recycling View."""
def __init__(self, **kwargs):
def __init__(self, **kwargs): # pylint: disable=useless-super-delegation
"""Recycling Method."""
# pylint: disable=useless-super-delegation
super(RV, self).__init__(**kwargs)
class DropDownWidget(BoxLayout):
"""Adding Dropdown Widget."""
# pylint: disable=too-many-statements, inconsistent-return-statements, too-many-locals
txt_input = ObjectProperty()
rv = ObjectProperty()
def send(self, navApp):
def send(self, navApp): # pylint: disable=too-many-statements, inconsistent-return-statements
"""Send message from one address to another."""
# pylint: disable=too-many-locals
fromAddress = str(self.ids.ti.text)
toAddress = str(self.ids.txt_input.text)
subject = self.ids.subject.text.encode('utf-8').strip()
message = self.ids.body.text.encode('utf-8').strip()
encoding = 3
print "message: ", self.ids.body.text
print ("message: ", self.ids.body.text)
sendMessageToPeople = True
if sendMessageToPeople:
if toAddress != '' and subject and message:
from addresses import decodeAddress
status, addressVersionNumber, streamNumber, ripe = decodeAddress(toAddress)
status, addressVersionNumber, streamNumber, ripe = \
decodeAddress(toAddress)
if status == 'success':
if state.detailPageType == 'draft' and state.send_draft_mail:
sqlExecute(
"UPDATE sent SET toaddress = ?"
", fromaddress = ? , subject = ?"
", message = ?, folder = 'sent'"
" WHERE ackdata = ?;",
"UPDATE sent SET toaddress = ? \
, fromaddress = ? , subject = ?\
, message = ?, folder = 'sent'\
WHERE ackdata = ?;",
toAddress,
fromAddress,
subject,
@ -485,12 +485,12 @@ class DropDownWidget(BoxLayout):
toAddress = addBMIfNotPresent(toAddress)
statusIconColor = 'red'
if addressVersionNumber > 4 or addressVersionNumber <= 1:
print "addressVersionNumber > 4 \
or addressVersionNumber <= 1"
print("addressVersionNumber > 4 \
or addressVersionNumber <= 1")
if streamNumber > 1 or streamNumber == 0:
print "streamNumber > 1 or streamNumber == 0"
print("streamNumber > 1 or streamNumber == 0")
if statusIconColor == 'red':
print "shared.statusIconColor == 'red'"
print("shared.statusIconColor == 'red'")
stealthLevel = BMConfigParser().safeGetInt(
'bitmessagesettings', 'ackstealthlevel')
from helper_ackPayload import genAckPayload
@ -525,7 +525,7 @@ class DropDownWidget(BoxLayout):
toLabel = ''
queues.workerQueue.put(('sendmessage', toAddress))
print "sqlExecute successfully #######################"
print ("sqlExecute successfully #######################")
self.parent.parent.current = 'inbox'
state.in_composer = True
navApp.back_press()
@ -577,9 +577,8 @@ class MyTextInput(TextInput):
starting_no = NumericProperty(3)
suggestion_text = ''
def __init__(self, **kwargs):
def __init__(self, **kwargs): # pylint: disable=useless-super-delegation
"""Getting Text Input."""
# pylint: disable=useless-super-delegation
super(MyTextInput, self).__init__(**kwargs)
def on_text(self, instance, value):
@ -609,9 +608,8 @@ class MyTextInput(TextInput):
class Payment(Screen):
"""Payment Method."""
def get_available_credits(self, instance):
def get_available_credits(self, instance): # pylint: disable=no-self-use
"""Method helps to get the available credits"""
# pylint: disable=no-self-use
state.availabe_credit = instance.parent.children[1].text
existing_credits = state.kivyapp.root.ids.sc18.ids.ml.children[0].children[0].children[0].children[0].text
if len(existing_credits.split(' ')) > 1:
@ -724,7 +722,7 @@ class Sent(Screen):
def init_ui(self, dt=0):
"""Clock Schdule for method sent accounts."""
self.sentaccounts()
print dt
print(dt)
def sentaccounts(self):
"""Load sent accounts."""
@ -740,7 +738,8 @@ class Sent(Screen):
data = []
queryreturn = kivy_helper_search.search_sql(
xAddress, account, "sent", where, what, False)
if state.msg_counter_objs and state.association == state.check_sent_acc:
if state.msg_counter_objs and state.association == \
state.check_sent_acc:
state.msg_counter_objs.send_cnt.badge_text = str(len(queryreturn))
state.sent_count = str(int(state.sent_count) + 1)
state.all_count = str(int(state.all_count) + 1)
@ -791,12 +790,11 @@ class Sent(Screen):
self.ids.ml.add_widget(carousel)
else:
content = MDLabel(
font_style='Body1',
font_style='Caption',
theme_text_color='Primary',
text="No message found!" if state.searcing_text
else "yet no message for this account!!!!!!!!!!!!!",
halign='center',
bold=True,
size_hint_y=None,
valign='top')
self.ids.ml.add_widget(content)
@ -832,8 +830,8 @@ class Sent(Screen):
state.trash_count = str(int(state.trash_count) + 1)
state.all_count = str(int(state.all_count) - 1)
sqlExecute(
"UPDATE sent SET folder = 'trash'"
" WHERE ackdata = ?;", str(data_index))
"UPDATE sent SET folder = 'trash' \
WHERE ackdata = ?;", str(data_index))
self.ids.ml.remove_widget(instance.parent.parent)
toast('Deleted')
self.update_trash()
@ -841,8 +839,8 @@ class Sent(Screen):
def archive(self, data_index, instance, *args):
"""Archive sent mail from sent mail listing."""
sqlExecute(
"UPDATE sent SET folder = 'trash'"
" WHERE ackdata = ?;", str(data_index))
"UPDATE sent SET folder = 'trash' \
WHERE ackdata = ?;", str(data_index))
self.ids.ml.remove_widget(instance.parent.parent)
self.update_trash()
@ -873,13 +871,14 @@ class Trash(Screen):
if state.association == '':
if BMConfigParser().addresses():
state.association = BMConfigParser().addresses()[0]
inbox = sqlQuery(
"SELECT toaddress, fromaddress, subject, message, folder, received from"
" inbox WHERE folder = 'trash' and toaddress = '{}';".format(
"SELECT toaddress, fromaddress, subject, message, folder, received from \
inbox WHERE folder = 'trash' and toaddress = '{}';".format(
state.association))
sent = sqlQuery(
"SELECT toaddress, fromaddress, subject, message, folder, lastactiontime from"
" sent WHERE folder = 'trash' and fromaddress = '{}';".format(
"SELECT toaddress, fromaddress, subject, message, folder, lastactiontime from \
sent WHERE folder = 'trash' and fromaddress = '{}';".format(
state.association))
trash_data = inbox + sent
@ -916,11 +915,10 @@ class Trash(Screen):
self.ids.ml.add_widget(carousel)
else:
content = MDLabel(
font_style='Body1',
font_style='Caption',
theme_text_color='Primary',
text="yet no trashed message for this account!!!!!!!!!!!!!",
halign='center',
bold=True,
size_hint_y=None,
valign='top')
self.ids.ml.add_widget(content)
@ -956,9 +954,8 @@ class Setting(Screen):
pass
class NavigateApp(App):
class NavigateApp(App): # pylint: disable=too-many-public-methods
"""Navigation Layout of class."""
# pylint: disable=too-many-public-methods
theme_cls = ThemeManager()
previous_date = ObjectProperty()
@ -989,6 +986,7 @@ class NavigateApp(App):
def build(self):
"""Method builds the widget."""
import os
main_widget = Builder.load_file(
os.path.join(os.path.dirname(__file__), 'main.kv'))
self.nav_drawer = Navigatorss()
@ -1029,24 +1027,25 @@ class NavigateApp(App):
self.root.ids.sc1.ids.ml.clear_widgets()
self.root.ids.sc1.loadMessagelist(state.association)
self.root.ids.scr_mngr.current = 'inbox'
msg_counter_objs = self.root_window.children[1].children[2].children[0].ids
msg_counter_objs = \
self.root_window.children[1].children[2].children[0].ids
state.sent_count = str(
sqlQuery(
"SELECT COUNT(*) FROM sent WHERE fromaddress = '{}' and"
" folder = 'sent' ;".format(state.association))[0][0])
"SELECT COUNT(*) FROM sent WHERE fromaddress = '{}' and \
folder = 'sent' ;".format(state.association))[0][0])
state.inbox_count = str(
sqlQuery(
"SELECT COUNT(*) FROM inbox WHERE toaddress = '{}' and"
" folder = 'inbox' ;".format(state.association))[0][0])
state.trash_count = str(sqlQuery(
"SELECT (SELECT count(*) FROM sent"
" where fromaddress = '{0}' and folder = 'trash' )"
"+(SELECT count(*) FROM inbox where toaddress = '{0}' and"
" folder = 'trash') AS SumCount".format(state.association))[0][0])
"SELECT COUNT(*) FROM inbox WHERE toaddress = '{}' and \
folder = 'inbox' ;".format(state.association))[0][0])
state.trash_count = str(sqlQuery("SELECT (SELECT count(*) FROM sent \
where fromaddress = '{0}' and folder = 'trash' ) \
+(SELECT count(*) FROM inbox where toaddress = '{0}' and \
folder = 'trash') AS SumCount".format(state.association))[0][0])
state.draft_count = str(
sqlQuery(
"SELECT COUNT(*) FROM sent WHERE fromaddress = '{}' and"
" folder = 'draft' ;".format(state.association))[0][0])
"SELECT COUNT(*) FROM sent WHERE fromaddress = '{}' and \
folder = 'draft' ;".format(state.association))[0][0])
state.all_count = str(int(state.sent_count) + int(state.inbox_count))
if msg_counter_objs:
@ -1091,7 +1090,7 @@ class NavigateApp(App):
if not os.path.exists(directory):
os.makedirs(directory)
except OSError:
print 'Error: Creating directory. ' + directory
print('Error: Creating directory. ' + directory)
@staticmethod
def get_default_image():
@ -1167,8 +1166,10 @@ class NavigateApp(App):
def back_press(self):
"""Method used for going back from composer to previous page."""
self.root.ids.toolbar.right_action_items = [['account-plus', lambda x: self.addingtoaddressbook()]]
self.root.ids.toolbar.left_action_items = [['menu', lambda x: self.root.toggle_nav_drawer()]]
self.root.ids.toolbar.right_action_items = \
[['account-plus', lambda x: self.addingtoaddressbook()]]
self.root.ids.toolbar.left_action_items = \
[['menu', lambda x: self.root.toggle_nav_drawer()]]
self.root.ids.scr_mngr.current = 'inbox' \
if state.in_composer else 'allmails'\
if state.is_allmail else state.detailPageType\
@ -1183,7 +1184,7 @@ class NavigateApp(App):
@staticmethod
def on_stop():
"""On stop methos is used for stoping the runing script."""
print "*******************EXITING FROM APPLICATION*******************"
print("*******************EXITING FROM APPLICATION*******************")
import shutdown
shutdown.doCleanShutdown()
@ -1232,7 +1233,7 @@ class NavigateApp(App):
self.root.ids.sc1.ids.ml.clear_widgets()
try:
self.root.ids.sc1.children[2].children[1].ids.search_field.text = ''
except Exception:
except Exception as e:
self.root.ids.sc1.children[1].children[1].ids.search_field.text = ''
self.root.ids.sc1.loadMessagelist(state.association)
elif instance.text == 'Draft':
@ -1252,7 +1253,7 @@ class NavigateApp(App):
self.root.ids.sc10.ids.ml.clear_widgets()
try:
self.root.ids.sc10.children[1].children[1].ids.search_field.text = ''
except Exception:
except Exception as e:
self.root.ids.sc10.children[2].children[1].ids.search_field.text = ''
self.root.ids.sc10.init_ui()
return
@ -1285,9 +1286,8 @@ class NavigateApp(App):
class GrashofPopup(Popup):
"""Methods for saving contacts, error messages."""
def __init__(self, **kwargs):
def __init__(self, **kwargs): # pylint: disable=useless-super-delegation
"""Grash of pop screen settings."""
# pylint: disable=useless-super-delegation
super(GrashofPopup, self).__init__(**kwargs)
def savecontact(self):
@ -1429,16 +1429,16 @@ class MailDetail(Screen):
self.page_type = state.detailPageType if state.detailPageType else ''
if state.detailPageType == 'sent' or state.detailPageType == 'draft':
data = sqlQuery(
"select toaddress, fromaddress, subject, message, status,"
" ackdata from sent where ackdata = ?;", state.mail_id)
"select toaddress, fromaddress, subject, message, status, \
ackdata from sent where ackdata = ?;", state.mail_id)
state.status = self
state.ackdata = data[0][5]
self.assign_mail_details(data)
state.kivyapp.set_mail_detail_header()
elif state.detailPageType == 'inbox':
data = sqlQuery(
"select toaddress, fromaddress, subject, message from inbox"
" where msgid = ?;", str(state.mail_id))
"select toaddress, fromaddress, subject, message from inbox \
where msgid = ?;", str(state.mail_id))
self.assign_mail_details(data)
state.kivyapp.set_mail_detail_header()
@ -1461,16 +1461,16 @@ class MailDetail(Screen):
msg_count_objs = state.kivyapp.root.children[2].children[0].ids
if state.detailPageType == 'sent':
sqlExecute(
"UPDATE sent SET folder = 'trash' WHERE"
" ackdata = ?;", str(state.mail_id))
"UPDATE sent SET folder = 'trash' WHERE \
ackdata = ?;", str(state.mail_id))
msg_count_objs.send_cnt.badge_text = str(int(state.sent_count) - 1)
state.sent_count = str(int(state.sent_count) - 1)
self.parent.screens[3].ids.ml.clear_widgets()
self.parent.screens[3].loadSent(state.association)
elif state.detailPageType == 'inbox':
sqlExecute(
"UPDATE inbox SET folder = 'trash' WHERE"
" msgid = ?;", str(state.mail_id))
"UPDATE inbox SET folder = 'trash' WHERE \
msgid = ?;", str(state.mail_id))
msg_count_objs.inbox_cnt.badge_text = str(int(state.inbox_count) - 1)
state.inbox_count = str(int(state.inbox_count) - 1)
self.parent.screens[0].ids.ml.clear_widgets()
@ -1499,8 +1499,8 @@ class MailDetail(Screen):
def inbox_reply(self):
"""Method used for replying inbox messages."""
data = sqlQuery(
"select toaddress, fromaddress, subject, message from inbox where"
" msgid = ?;", str(state.mail_id))
"select toaddress, fromaddress, subject, message from inbox where \
msgid = ?;", str(state.mail_id))
composer_obj = self.parent.screens[2].children[0].ids
composer_obj.ti.text = data[0][0]
composer_obj.btn.text = data[0][0]
@ -1518,7 +1518,8 @@ class MailDetail(Screen):
def write_msg(self, navApp):
"""Method used to write on draft mail."""
state.send_draft_mail = state.mail_id
composer_ids = self.parent.parent.parent.parent.ids.sc3.children[0].ids
composer_ids = \
self.parent.parent.parent.parent.ids.sc3.children[0].ids
composer_ids.ti.text = state.write_msg['from_addr']
composer_ids.btn.text = state.write_msg['from_addr']
composer_ids.txt_input.text = state.write_msg['to_addr']
@ -1544,9 +1545,8 @@ class MyaddDetailPopup(Popup):
address_label = StringProperty()
address = StringProperty()
def __init__(self, **kwargs):
def __init__(self, **kwargs): # pylint: disable=useless-super-delegation
"""My Address Details screen setting."""
# pylint: disable=useless-super-delegation
super(MyaddDetailPopup, self).__init__(**kwargs)
def set_address(self, address, label):
@ -1577,9 +1577,8 @@ class AddbookDetailPopup(Popup):
address_label = StringProperty()
address = StringProperty()
def __init__(self, **kwargs):
def __init__(self, **kwargs): # pylint: disable=useless-super-delegation
"""Method used set screen of address detail page."""
# pylint: disable=useless-super-delegation
super(AddbookDetailPopup, self).__init__(**kwargs)
def set_addbook_data(self, address, label):
@ -1590,9 +1589,8 @@ class AddbookDetailPopup(Popup):
def update_addbook_label(self, address):
"""Updating the label of address book address."""
if str(self.ids.add_label.text):
sqlExecute(
"UPDATE addressbook SET label = '{}' WHERE"
" address = '{}';".format(str(self.ids.add_label.text), address))
sqlExecute("UPDATE addressbook SET label = '{}' WHERE \
address = '{}';".format(str(self.ids.add_label.text), address))
self.parent.children[1].ids.sc11.ids.ml.clear_widgets()
self.parent.children[1].ids.sc11.loadAddresslist(None, 'All', '')
self.dismiss()
@ -1644,7 +1642,7 @@ class Draft(Screen):
def init_ui(self, dt=0):
"""Clock Schdule for method draft accounts."""
self.sentaccounts()
print dt
print (dt)
def sentaccounts(self):
"""Load draft accounts."""
@ -1698,11 +1696,10 @@ class Draft(Screen):
self.ids.ml.add_widget(carousel)
else:
content = MDLabel(
font_style='Body1',
font_style='Caption',
theme_text_color='Primary',
text="yet no message for this account!!!!!!!!!!!!!",
halign='center',
bold=True,
size_hint_y=None,
valign='top')
self.ids.ml.add_widget(content)
@ -1724,7 +1721,8 @@ class Draft(Screen):
sqlExecute("DELETE FROM sent WHERE ackdata = ?;", str(
data_index))
try:
msg_count_objs = self.parent.parent.parent.parent.children[2].children[0].ids
msg_count_objs = \
self.parent.parent.parent.parent.children[2].children[0].ids
except Exception:
msg_count_objs = self.parent.parent.parent.parent.parent.children[
2].children[0].ids
@ -1749,7 +1747,8 @@ class Draft(Screen):
sendMessageToPeople = True
if sendMessageToPeople:
from addresses import decodeAddress
status, addressVersionNumber, streamNumber, ripe = decodeAddress(toAddress)
status, addressVersionNumber, streamNumber, ripe = \
decodeAddress(toAddress)
from addresses import addBMIfNotPresent
toAddress = addBMIfNotPresent(toAddress)
statusIconColor = 'red'
@ -1810,7 +1809,7 @@ class Allmails(Screen):
def init_ui(self, dt=0):
"""Clock Schdule for method all mails."""
self.mailaccounts()
print dt
print (dt)
def mailaccounts(self):
"""Load all mails for account."""
@ -1857,11 +1856,10 @@ class Allmails(Screen):
self.ids.ml.add_widget(carousel)
else:
content = MDLabel(
font_style='Body1',
font_style='Caption',
theme_text_color='Primary',
text="yet no message for this account!!!!!!!!!!!!!",
halign='center',
bold=True,
size_hint_y=None,
valign='top')
self.ids.ml.add_widget(content)

View File

@ -179,13 +179,13 @@ def signal_handler(signum, frame):
if shared.thisapp.daemon or not state.enableGUI:
shutdown.doCleanShutdown()
else:
print '# Thread: %s(%d)' % (thread.name, thread.ident)
print ('# Thread: {}({})'.format(thread.name, thread.ident))
for filename, lineno, name, line in traceback.extract_stack(frame):
print 'File: "%s", line %d, in %s' % (filename, lineno, name)
print ("File: '{}', line {}, in {}" .format(filename, lineno, name))
if line:
print ' %s' % line.strip()
print 'Unfortunately you cannot use Ctrl+C when running the UI \
because the UI captures the signal.'
print (' {}'.format(line.strip()))
print('Unfortunately you cannot use Ctrl+C when running the UI \
because the UI captures the signal.')
class Main: # pylint: disable=no-init, old-style-class
@ -282,7 +282,7 @@ class Main: # pylint: disable=no-init, old-style-class
if daemon:
with shared.printLock:
print 'Running as a daemon. Send TERM signal to end.'
print('Running as a daemon. Send TERM signal to end.')
self.daemonize()
self.setSignalHandler()
@ -358,7 +358,7 @@ class Main: # pylint: disable=no-init, old-style-class
# Not needed if objproc disabled
if state.enableObjProc:
shared.reloadMyAddressHashes()
shared.reloadBroadcastSendersForWhichImWatching()
# shared.reloadBroadcastSendersForWhichImWatching()
# API is also objproc dependent
if config.safeGetBoolean('bitmessagesettings', 'apienabled'):
import api # pylint: disable=relative-import
@ -373,7 +373,7 @@ class Main: # pylint: disable=no-init, old-style-class
asyncoreThread = BMNetworkThread()
asyncoreThread.daemon = True
asyncoreThread.start()
for i in range(config.getint('threads', 'receive')):
for i in range(config.safeGet('threads', 'receive')):
receiveQueueThread = ReceiveQueueThread(i)
receiveQueueThread.daemon = True
receiveQueueThread.start()
@ -405,7 +405,7 @@ class Main: # pylint: disable=no-init, old-style-class
if state.curses:
if not depends.check_curses():
sys.exit()
print 'Running with curses'
print('Running with curses')
import bitmessagecurses
bitmessagecurses.runwrapper()
@ -498,23 +498,22 @@ class Main: # pylint: disable=no-init, old-style-class
# signal.signal(signal.SIGINT, signal.SIG_DFL)
@staticmethod
def usage():
"""After passing argument, method displays the usages"""
print 'Usage: ' + sys.argv[0] + ' [OPTIONS]'
print '''
Options:
def usage(self):
print('Usage: ' + sys.argv[0] + ' [OPTIONS]')
print ('''
Options:
-h, --help show this help message and exit
-c, --curses use curses (text mode) interface
-d, --daemon run in daemon (background) mode
-t, --test dryrun, make testing
All parameters are optional.
'''
All parameters are optional.
''')
def stop(self): # pylint: disable=no-self-use
"""Method helps to stop the Bitmessage Deamon"""
with shared.printLock:
print 'Stopping Bitmessage Deamon.'
print('Stopping Bitmessage Deamon.')
shutdown.doCleanShutdown()
# ..todo: nice function but no one is using this

View File

@ -1,5 +1,5 @@
from PyQt4 import QtCore, QtGui
from Queue import Queue
from queue.Queue import Queue
from time import time
class BMStatusBar(QtGui.QStatusBar):

View File

@ -2,7 +2,7 @@
BMConfigParser class definition and default configuration settings
"""
import ConfigParser
import configparser
import shutil
import os
from datetime import datetime
@ -42,35 +42,35 @@ BMConfigDefaults = {
@Singleton
class BMConfigParser(ConfigParser.SafeConfigParser):
"""Singleton class inherited from ConfigParser.SafeConfigParser
class BMConfigParser(configparser.ConfigParser):
"""Singleton class inherited from ConfigParsedadfeConfigParser
with additional methods specific to bitmessage config."""
_temp = {}
def set(self, section, option, value=None):
if self._optcre is self.OPTCRE or value:
if not isinstance(value, basestring):
if not isinstance(value, str):
raise TypeError("option values must be strings")
if not self.validate(section, option, value):
raise ValueError("Invalid value %s" % value)
return ConfigParser.ConfigParser.set(self, section, option, value)
return configparser.ConfigParser.set(self, section, option, value)
def get(self, section, option, raw=False, variables=None):
try:
if section == "bitmessagesettings" and option == "timeformat":
return ConfigParser.ConfigParser.get(
self, section, option, raw, variables)
return configparser.ConfigParser.get(
self, section, option, raw=True, vars=variables)
try:
return self._temp[section][option]
except KeyError:
pass
return ConfigParser.ConfigParser.get(
self, section, option, True, variables)
except ConfigParser.InterpolationError:
return ConfigParser.ConfigParser.get(
self, section, option, True, variables)
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError) as e:
return configparser.ConfigParser.get(
self, section, option, raw=True, vars=variables)
except configparser.InterpolationError:
return configparser.ConfigParser.get(
self, section, option, raw=True, vars=variables)
except (configparser.NoSectionError, configparser.NoOptionError) as e:
try:
return BMConfigDefaults[section][option]
except (KeyError, ValueError, AttributeError):
@ -84,49 +84,58 @@ class BMConfigParser(ConfigParser.SafeConfigParser):
self._temp[section] = {option: value}
def safeGetBoolean(self, section, field):
config = configparser.ConfigParser()
try:
return self.getboolean(section, field)
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError,
#Used in the python2.7
# return self.getboolean(section, field)
#Used in the python3.5.2
return config.getboolean(section, field)
except (configparser.NoSectionError, configparser.NoOptionError,
ValueError, AttributeError):
return False
def safeGetInt(self, section, field, default=0):
config = configparser.ConfigParser()
try:
return self.getint(section, field)
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError,
#Used in the python2.7
# return self.getint(section, field)
#Used in the python3.5.2
return config.getint(section, field)
except (configparser.NoSectionError, configparser.NoOptionError,
ValueError, AttributeError):
return default
def safeGet(self, section, option, default=None):
try:
return self.get(section, option)
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError,
except (configparser.NoSectionError, configparser.NoOptionError,
ValueError, AttributeError):
return default
def items(self, section, raw=False, variables=None):
return ConfigParser.ConfigParser.items(self, section, True, variables)
return configparser.ConfigParser.items(self, section, True, variables)
def addresses(self):
return filter(
lambda x: x.startswith('BM-'), BMConfigParser().sections())
return [x for x in BMConfigParser().sections() if x.startswith('BM-')]
def read(self, filenames):
ConfigParser.ConfigParser.read(self, filenames)
configparser.ConfigParser.read(self, filenames)
for section in self.sections():
for option in self.options(section):
try:
if not self.validate(
section, option,
ConfigParser.ConfigParser.get(self, section, option)
self[section][option]
):
try:
newVal = BMConfigDefaults[section][option]
except configparser.NoSectionError:
continue
except KeyError:
continue
ConfigParser.ConfigParser.set(
configparser.ConfigParser.set(
self, section, option, newVal)
except ConfigParser.InterpolationError:
except configparser.InterpolationError:
continue
def save(self):
@ -144,7 +153,7 @@ class BMConfigParser(ConfigParser.SafeConfigParser):
# didn't exist before.
fileNameExisted = False
# write the file
with open(fileName, 'wb') as configfile:
with open(fileName, 'w') as configfile:
self.write(configfile)
# delete the backup
if fileNameExisted:
@ -152,7 +161,7 @@ class BMConfigParser(ConfigParser.SafeConfigParser):
def validate(self, section, option, value):
try:
return getattr(self, 'validate_%s_%s' % (section, option))(value)
return getattr(self, 'validate_{}_{}'.format(section, option))(value)
except AttributeError:
return True

View File

@ -29,7 +29,6 @@ class addressGenerator(StoppableThread):
super(addressGenerator, self).stopThread()
def run(self):
while state.shutdown == 0:
queueValue = queues.addressGeneratorQueue.get()
nonceTrialsPerByte = 0
@ -134,7 +133,7 @@ class addressGenerator(StoppableThread):
ripe = RIPEMD160Hash(sha.digest()).digest()
if (
ripe[:numberOfNullBytesDemandedOnFrontOfRipeHash] ==
'\x00' * numberOfNullBytesDemandedOnFrontOfRipeHash
'\x00'.encode('utf-8') * numberOfNullBytesDemandedOnFrontOfRipeHash
):
break
logger.info(
@ -151,19 +150,20 @@ class addressGenerator(StoppableThread):
# The user must have a pretty fast computer.
# time.time() - startTime equaled zero.
pass
address = encodeAddress(
addressVersionNumber, streamNumber, ripe)
# An excellent way for us to store our keys
# is in Wallet Import Format. Let us convert now.
# https://en.bitcoin.it/wiki/Wallet_import_format
privSigningKey = '\x80' + potentialPrivSigningKey
privSigningKey = '\x80'.encode('utf-8') + potentialPrivSigningKey
checksum = hashlib.sha256(hashlib.sha256(
privSigningKey).digest()).digest()[0:4]
privSigningKeyWIF = arithmetic.changebase(
privSigningKey + checksum, 256, 58)
privEncryptionKey = '\x80' + potentialPrivEncryptionKey
privEncryptionKey = '\x80'.encode('utf-8') + potentialPrivEncryptionKey
checksum = hashlib.sha256(hashlib.sha256(
privEncryptionKey).digest()).digest()[0:4]
privEncryptionKeyWIF = arithmetic.changebase(

View File

@ -1,4 +1,4 @@
import Queue
import queue as Queue
import threading
import time

View File

@ -143,8 +143,8 @@ class singleCleaner(StoppableThread):
# inv/object tracking
for connection in \
BMConnectionPool().inboundConnections.values() + \
BMConnectionPool().outboundConnections.values():
list(BMConnectionPool().inboundConnections.values()) + \
list(BMConnectionPool().outboundConnections.values()):
connection.clean()
# discovery tracking

View File

@ -51,8 +51,8 @@ class sqlThread(threading.Thread):
'''INSERT INTO subscriptions VALUES('Bitmessage new releases/announcements','BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw',1)''')
self.cur.execute(
'''CREATE TABLE settings (key blob, value blob, UNIQUE(key) ON CONFLICT REPLACE)''' )
self.cur.execute( '''INSERT INTO settings VALUES('version','10')''')
self.cur.execute( '''INSERT INTO settings VALUES('lastvacuumtime',?)''', (
self.cur.execute('''INSERT INTO settings VALUES('version','10')''')
self.cur.execute('''INSERT INTO settings VALUES('lastvacuumtime',?)''', (
int(time.time()),))
self.cur.execute(
'''CREATE TABLE objectprocessorqueue (objecttype int, data blob, UNIQUE(objecttype, data) ON CONFLICT REPLACE)''' )
@ -70,9 +70,11 @@ class sqlThread(threading.Thread):
# If the settings version is equal to 2 or 3 then the
# sqlThread will modify the pubkeys table and change
# the settings version to 4.
settingsversion = BMConfigParser().getint(
'bitmessagesettings', 'settingsversion')
# settingsversion = BMConfigParser().getint('bitmessagesettings', 'settingsversion')
# In the Python3 I am below condition converting into int
# settingsversion = int(BMConfigParser().get('bitmessagesettings', 'settingsversion') \
# if BMConfigParser().get('bitmessagesettings', 'settingsversion') else 0)
settingsversion = BMConfigParser().safeGetInt('bitmessagesettings', 'settingsvesion')
# People running earlier versions of PyBitmessage do not have the
# usedpersonally field in their pubkeys table. Let's add it.
if settingsversion == 2:

View File

@ -23,7 +23,7 @@ Use: `from debug import logger` to import this facility into whatever module you
"""
import ConfigParser
import configparser
import logging
import logging.config
import os
@ -47,12 +47,13 @@ def configureLogging():
fail_msg = ''
try:
logging_config = os.path.join(state.appdata, 'logging.dat')
logging.config.fileConfig(logging_config)
# right now I am commenting the logger
# logging.config.fileConfig(logging_config, disable_existing_loggers=False)
return (
False,
'Loaded logger configuration from %s' % logging_config
)
except (OSError, ConfigParser.NoSectionError):
except (OSError, configparser.NoSectionError):
if os.path.isfile(logging_config):
fail_msg = \
'Failed to load logger configuration from %s, using default' \

View File

@ -419,11 +419,11 @@ def check_dependencies(verbose=False, optional=False):
'PyBitmessage requires Python 2.7.4 or greater'
' (but not Python 3+)')
has_all_dependencies = False
if sys.hexversion >= 0x3000000:
logger.error(
'PyBitmessage does not support Python 3+. Python 2.7.4'
' or greater is required.')
has_all_dependencies = False
# if sys.hexversion >= 0x3000000:
# logger.error(
# 'PyBitmessage does not support Python 3+. Python 2.7.4'
# ' or greater is required.')
# has_all_dependencies = False
check_functions = [check_ripemd160, check_sqlite, check_openssl]
if optional:

View File

@ -4,7 +4,8 @@ from pyelliptic import arithmetic
# This function expects that pubkey begin with \x04
def calculateBitcoinAddressFromPubkey(pubkey):
if len(pubkey) != 65:
print 'Could not calculate Bitcoin address from pubkey because function was passed a pubkey that was', len(pubkey), 'bytes long rather than 65.'
print ('Could not calculate Bitcoin address from pubkey because function was passed a pubkey that was'\
'{}, bytes long rather than 65.'.format(len(pubkey)))
return "error"
ripe = hashlib.new('ripemd160')
sha = hashlib.new('sha256')
@ -25,7 +26,8 @@ def calculateBitcoinAddressFromPubkey(pubkey):
def calculateTestnetAddressFromPubkey(pubkey):
if len(pubkey) != 65:
print 'Could not calculate Bitcoin address from pubkey because function was passed a pubkey that was', len(pubkey), 'bytes long rather than 65.'
print ('Could not calculate Bitcoin address from pubkey because function was passed a pubkey that was',\
'{}, bytes long rather than 65.'.format(pubkey))
return "error"
ripe = hashlib.new('ripemd160')
sha = hashlib.new('sha256')

View File

@ -1,7 +1,7 @@
"""Helper Sql performs sql operations."""
import threading
import Queue
import queue as Queue
sqlSubmitQueue = Queue.Queue()
# SQLITE3 is so thread-unsafe that they won't even let you call it from different threads using your own locks.

View File

@ -7,7 +7,7 @@ Helper Start performs all the startup operations.
# pylint: disable=too-many-branches,too-many-statements
from __future__ import print_function
import ConfigParser
import configparser
import os
import platform
import sys
@ -25,20 +25,23 @@ StoreConfigFilesInSameDirectoryAsProgramByDefault = False
def _loadTrustedPeer():
trustedPeer = ''
try:
trustedPeer = BMConfigParser().get('bitmessagesettings', 'trustedpeer')
except ConfigParser.Error:
except configparser.Error:
# This probably means the trusted peer wasn't specified so we
# can just leave it as None
return
try:
if trustedPeer != None:
host, port = trustedPeer.split(':')
state.trustedPeer = state.Peer(host, int(port))
except ValueError:
sys.exit(
'Bad trustedpeer config setting! It should be set as'
' trustedpeer=<hostname>:<portnumber>'
)
state.trustedPeer = state.Peer(host, int(port))
def loadConfig():
@ -137,11 +140,12 @@ def loadConfig():
_loadTrustedPeer()
def updateConfig():
"""Save the config"""
config = BMConfigParser()
settingsversion = config.getint('bitmessagesettings', 'settingsversion')
# Used python2.7
# settingsversion = int(BMConfigParser().get('bitmessagesettings', 'settingsversion') \
settingsversion = BMConfigParser().safeGetInt('bitmessagesettings', 'settingsvesion')
if settingsversion == 1:
config.set('bitmessagesettings', 'socksproxytype', 'none')
config.set('bitmessagesettings', 'sockshostname', 'localhost')

View File

@ -15,8 +15,8 @@ def makeCryptor(privkey):
"""Return a private pyelliptic.ECC() instance"""
private_key = a.changebase(privkey, 16, 256, minlen=32)
public_key = pointMult(private_key)
privkey_bin = '\x02\xca\x00\x20' + private_key
pubkey_bin = '\x02\xca\x00\x20' + public_key[1:-32] + '\x00\x20' + public_key[-32:]
privkey_bin = '\x02\xca\x00\x20'.encode('utf-8') + private_key
pubkey_bin = '\x02\xca\x00\x20'.encode('utf-8') + public_key[1:-32] + '\x00\x20'.encode('utf-8') + public_key[-32:]
cryptor = pyelliptic.ECC(curve='secp256k1', privkey=privkey_bin, pubkey=pubkey_bin)
return cryptor

View File

@ -40,8 +40,8 @@ def json_serialize_knownnodes(output):
Reorganize knownnodes dict and write it as JSON to output
"""
_serialized = []
for stream, peers in knownNodes.iteritems():
for peer, info in peers.iteritems():
for stream, peers in iter(knownNodes.items()):
for peer, info in iter(peers.items()):
info.update(rating=round(info.get('rating', 0), 2))
_serialized.append({
'stream': stream, 'peer': peer._asdict(), 'info': info
@ -85,7 +85,7 @@ def saveKnownNodes(dirName=None):
if dirName is None:
dirName = state.appdata
with knownNodesLock:
with open(os.path.join(dirName, 'knownnodes.dat'), 'wb') as output:
with open(os.path.join(dirName, 'knownnodes.dat'), 'w') as output:
json_serialize_knownnodes(output)
@ -106,7 +106,7 @@ def createDefaultKnownNodes():
def readKnownNodes():
try:
with open(state.appdata + 'knownnodes.dat', 'rb') as source:
with open(state.appdata + 'knownnodes.dat', 'r') as source:
with knownNodesLock:
try:
json_deserialize_knownnodes(source)

View File

@ -64,20 +64,30 @@ else:
if time_format != DEFAULT_TIME_FORMAT:
try:
#Check day names
for i in xrange(7):
unicode(time.strftime(time_format, (0, 0, 0, 0, 0, 0, i, 0, 0)), encoding)
new_time_format = time_format
import sys
if sys.version_info >= (3, 0, 0) and time_format == '%%c':
time_format = '%c'
for i in range(7):
#this work for python2.7
# unicode(time.strftime(time_format, (0, 0, 0, 0, 0, 0, i, 0, 0)), encoding)
#this code for the python3
(time.strftime(time_format, (0, 0, 0, 0, 0, 0, i, 0, 0))).encode()
#Check month names
for i in xrange(1, 13):
unicode(time.strftime(time_format, (0, i, 0, 0, 0, 0, 0, 0, 0)), encoding)
for i in range(1, 13):
# unicode(time.strftime(time_format, (0, i, 0, 0, 0, 0, 0, 0, 0)), encoding)
(time.strftime(time_format, (0, i, 0, 0, 0, 0, 0, 0, 0))).encode()
#Check AM/PM
unicode(time.strftime(time_format, (0, 0, 0, 11, 0, 0, 0, 0, 0)), encoding)
unicode(time.strftime(time_format, (0, 0, 0, 13, 0, 0, 0, 0, 0)), encoding)
(time.strftime(time_format, (0, 0, 0, 11, 0, 0, 0, 0, 0))).encode()
(time.strftime(time_format, (0, 0, 0, 13, 0, 0, 0, 0, 0))).encode()
#Check DST
unicode(time.strftime(time_format, (0, 0, 0, 0, 0, 0, 0, 0, 1)), encoding)
(time.strftime(time_format, (0, 0, 0, 0, 0, 0, 0, 0, 1))).encode()
except:
logger.exception('Could not decode locale formatted timestamp')
time_format = DEFAULT_TIME_FORMAT
encoding = DEFAULT_ENCODING
time_format = new_time_format
def setlocale(category, newlocale):
locale.setlocale(category, newlocale)

View File

@ -4,7 +4,7 @@ src/messagetypes/__init__.py
"""
from importlib import import_module
from os import path, listdir
from string import lower
try:
from kivy.utils import platform
except:

View File

@ -3,7 +3,7 @@ src/multiqueue.py
=================
"""
import Queue
import queue as Queue
from collections import deque
import helper_random

View File

@ -1,4 +1,4 @@
import Queue
import queue as Queue
from helper_threading import StoppableThread
from network.connectionpool import BMConnectionPool

View File

@ -30,7 +30,10 @@ class AdvancedDispatcher(asyncore.dispatcher):
_buf_len = 131072 # 128kB
def __init__(self, sock=None):
if not hasattr(self, '_map'):
# python 2 below condition is used
# if not hasattr(self, '_map'):
# python 3 below condition is used
if not '_map' in dir(self):
asyncore.dispatcher.__init__(self, sock)
self.read_buf = bytearray()
self.write_buf = bytearray()

View File

@ -769,8 +769,8 @@ class dispatcher:
try:
retattr = getattr(self.socket, attr)
except AttributeError:
raise AttributeError("%s instance has no attribute '%s'"
% (self.__class__.__name__, attr))
raise AttributeError("{} instance has no attribute {}"
.format(self.__class__.__name__, attr))
else:
msg = "%(me)s.%(attr)s is deprecated; use %(me)s.socket.%(attr)s " \
"instead" % {'me': self.__class__.__name__, 'attr': attr}
@ -788,7 +788,7 @@ class dispatcher:
def log_info(self, message, log_type='info'):
"""Conditionally print a message"""
if log_type not in self.ignore_log_types:
print '%s: %s' % (log_type, message)
print ('{}: {}'.format((log_type, message)))
def handle_read_event(self):
"""Handle a read event"""

View File

@ -11,7 +11,7 @@ import time
from binascii import hexlify
import addresses
import connectionpool
import network.connectionpool
import knownnodes
import protocol
import state
@ -26,9 +26,9 @@ from network.bmobject import (
BMObjectInvalidError, BMObjectAlreadyHaveError)
from network.node import Node
from network.proxy import ProxyError
from objectracker import missingObjects, ObjectTracker
from network.objectracker import missingObjects, ObjectTracker
from queues import objectProcessorQueue, portCheckerQueue, invQueue, addrQueue
from randomtrackingdict import RandomTrackingDict
from network.randomtrackingdict import RandomTrackingDict
class BMProtoError(ProxyError):
@ -86,7 +86,7 @@ class BMProto(AdvancedDispatcher, ObjectTracker):
"""Process incoming header"""
self.magic, self.command, self.payloadLength, self.checksum = \
protocol.Header.unpack(self.read_buf[:protocol.Header.size])
self.command = self.command.rstrip('\x00')
self.command = self.command.rstrip('\x00'.encode('utf-8'))
if self.magic != 0xE9BEB4D9:
# skip 1 byte in order to sync
self.set_state("bm_header", length=1)

View File

@ -7,20 +7,19 @@ import re
import socket
import time
import asyncore_pollchoose as asyncore
import network.asyncore_pollchoose as asyncore
import helper_random
import knownnodes
import protocol
import state
from bmconfigparser import BMConfigParser
from connectionchooser import chooseConnection
from network.connectionchooser import chooseConnection
from debug import logger
from proxy import Proxy
from network.proxy import Proxy
from singleton import Singleton
from tcp import (
bootstrap, Socks4aBMConnection, Socks5BMConnection,
TCPConnection, TCPServer)
from udp import UDPSocket
from network.tcp import (
TCPServer, Socks5BMConnection, Socks4aBMConnection, TCPConnection)
from network.udp import UDPSocket
@Singleton
@ -237,7 +236,7 @@ class BMConnectionPool(object):
except ValueError:
Proxy.onion_proxy = None
established = sum(
1 for c in self.outboundConnections.values()
1 for c in list(self.outboundConnections.values())
if (c.connected and c.fullyEstablished))
pending = len(self.outboundConnections) - established
if established < BMConfigParser().safeGetInt(
@ -275,10 +274,15 @@ class BMConnectionPool(object):
continue
self.lastSpawned = time.time()
print('++++++++++++++++++++++++++++++++++++++++++')
print('self.inboundConnections.values()-{}'.format(self.inboundConnections.values()))
print('self.outboundConnections.values() -{}'.format(self.outboundConnections.values()))
print('+++++++++++++++++++++++++++++++++++++++++++')
else:
for i in (
self.inboundConnections.values() +
self.outboundConnections.values()
list(self.inboundConnections.values()) +
list(self.outboundConnections.values())
):
# FIXME: rating will be increased after next connection
i.handle_close()
@ -324,8 +328,8 @@ class BMConnectionPool(object):
reaper = []
for i in (
self.inboundConnections.values() +
self.outboundConnections.values()
list(self.inboundConnections.values()) +
list(self.outboundConnections.values())
):
minTx = time.time() - 20
if i.fullyEstablished:
@ -338,10 +342,10 @@ class BMConnectionPool(object):
time.time() - i.lastTx)
i.set_state("close")
for i in (
self.inboundConnections.values() +
self.outboundConnections.values() +
self.listeningSockets.values() +
self.udpSockets.values()
list(self.inboundConnections.values()) +
list(self.outboundConnections.values()) +
list(self.listeningSockets.values()) +
list(self.udpSockets.values())
):
if not (i.accepting or i.connecting or i.connected):
reaper.append(i)

View File

@ -7,7 +7,7 @@ from random import choice, sample, expovariate
from threading import RLock
from time import time
import connectionpool
from network import connectionpool
import state
from debug import logging
from queues import invQueue
@ -99,12 +99,12 @@ class Dandelion(): # pylint: disable=old-style-class
with self.lock:
if len(self.stem) < MAX_STEMS:
self.stem.append(connection)
for k in (k for k, v in self.nodeMap.iteritems() if v is None):
for k in (k for k, v in iter(self.nodeMap.items()) if v is None):
self.nodeMap[k] = connection
for k, v in {
k: v for k, v in self.hashMap.iteritems()
for k, v in iter({
k: v for k, v in iter(self.hashMap.items())
if v.child is None
}.iteritems():
}).items():
self.hashMap[k] = Stem(
connection, v.stream, self.poissonTimeout())
invQueue.put((v.stream, k, v.child))
@ -120,13 +120,13 @@ class Dandelion(): # pylint: disable=old-style-class
self.stem.remove(connection)
# active mappings to pointing to the removed node
for k in (
k for k, v in self.nodeMap.iteritems() if v == connection
k for k, v in iter(self.nodeMap.items()) if v == connection
):
self.nodeMap[k] = None
for k, v in {
k: v for k, v in self.hashMap.iteritems()
for k, v in iter({
k: v for k, v in iter(self.hashMap.items())
if v.child == connection
}.iteritems():
}).items():
self.hashMap[k] = Stem(
None, v.stream, self.poissonTimeout())
@ -167,7 +167,7 @@ class Dandelion(): # pylint: disable=old-style-class
with self.lock:
deadline = time()
toDelete = [
[v.stream, k, v.child] for k, v in self.hashMap.iteritems()
[v.stream, k, v.child] for k, v in iter(self.hashMap.items())
if v.timeout < deadline
]
@ -182,8 +182,8 @@ class Dandelion(): # pylint: disable=old-style-class
try:
# random two connections
self.stem = sample(
connectionpool.BMConnectionPool(
).outboundConnections.values(), MAX_STEMS)
list(connectionpool.BMConnectionPool(
).outboundConnections.values()), MAX_STEMS)
# not enough stems available
except ValueError:
self.stem = connectionpool.BMConnectionPool(

View File

@ -7,12 +7,12 @@ import time
import addresses
import helper_random
import protocol
from dandelion import Dandelion
from network.dandelion import Dandelion
from debug import logger
from helper_threading import StoppableThread
from inventory import Inventory
from network.connectionpool import BMConnectionPool
from objectracker import missingObjects
from network.objectracker import missingObjects
class DownloadThread(StoppableThread):
@ -32,7 +32,7 @@ class DownloadThread(StoppableThread):
"""Expire pending downloads eventually"""
deadline = time.time() - DownloadThread.requestExpires
try:
toDelete = [k for k, v in missingObjects.iteritems() if v < deadline]
toDelete = [k for k, v in iter(missingObjects.items()) if v < deadline]
except RuntimeError:
pass
else:
@ -46,7 +46,7 @@ class DownloadThread(StoppableThread):
# Choose downloading peers randomly
connections = [
x for x in
BMConnectionPool().inboundConnections.values() + BMConnectionPool().outboundConnections.values()
list(BMConnectionPool().inboundConnections.values()) + list(BMConnectionPool().outboundConnections.values())
if x.fullyEstablished]
helper_random.randomshuffle(connections)
try:

View File

@ -2,7 +2,7 @@ import socket
from advanceddispatcher import AdvancedDispatcher
import asyncore_pollchoose as asyncore
from proxy import ProxyError
from network.proxy import ProxyError
from socks5 import Socks5Connection, Socks5Resolver
from socks4a import Socks4aConnection, Socks4aResolver

View File

@ -2,7 +2,7 @@
src/network/invthread.py
========================
"""
import Queue
import queue as Queue
import random
from time import time

View File

@ -7,7 +7,7 @@ from threading import RLock
import network.connectionpool
from network.dandelion import Dandelion
from randomtrackingdict import RandomTrackingDict
from network.randomtrackingdict import RandomTrackingDict
haveBloom = False

View File

@ -6,9 +6,9 @@ src/network/proxy.py
import socket
import time
import asyncore_pollchoose as asyncore
import network.asyncore_pollchoose as asyncore
import state
from advanceddispatcher import AdvancedDispatcher
from network.advanceddispatcher import AdvancedDispatcher
from bmconfigparser import BMConfigParser
from debug import logger

View File

@ -140,20 +140,20 @@ if __name__ == '__main__':
k = RandomTrackingDict()
d = {}
print "populating random tracking dict"
print ("populating random tracking dict")
a.append(time())
for i in range(50000):
k[randString()] = True
a.append(time())
print "done"
print ("done")
while k:
retval = k.randomKeys(1000)
if not retval:
print "error getting random keys"
print ("error getting random keys")
try:
k.randomKeys(100)
print "bad"
print( "bad")
except KeyError:
pass
for i in retval:
@ -161,4 +161,4 @@ if __name__ == '__main__':
a.append(time())
for x in range(len(a) - 1):
print "%i: %.3f" % (x, a[x + 1] - a[x])
print("{}i: {}.3f".format(x, a[x + 1] - a[x]))

View File

@ -1,5 +1,5 @@
import errno
import Queue
import queue as Queue
import socket
from debug import logger

View File

@ -6,7 +6,7 @@ src/network/socks4a.py
import socket
import struct
from proxy import Proxy, ProxyError, GeneralProxyError
from network.proxy import Proxy, ProxyError, GeneralProxyError
class Socks4aError(ProxyError):
@ -141,4 +141,4 @@ class Socks4aResolver(Socks4a):
PyBitmessage, a callback needs to be implemented which hasn't
been done yet.
"""
print "Resolved %s as %s" % (self.host, self.proxy_sock_name())
print("Resolved {} as {}".format(self.host, self.proxy_sock_name()))

View File

@ -9,7 +9,7 @@ import socket
import struct
import state
from proxy import GeneralProxyError, Proxy, ProxyError
from network.proxy import GeneralProxyError, Proxy, ProxyError
class Socks5AuthError(ProxyError):
@ -218,4 +218,4 @@ class Socks5Resolver(Socks5):
To use this within PyBitmessage, a callback needs to be
implemented which hasn't been done yet.
"""
print "Resolved %s as %s" % (self.host, self.proxy_sock_name())
print("Resolved {} as {}".format(self.host, self.proxy_sock_name()))

View File

@ -4,9 +4,9 @@ src/network/stats.py
"""
import time
import asyncore_pollchoose as asyncore
from network import asyncore_pollchoose as asyncore
from network.connectionpool import BMConnectionPool
from objectracker import missingObjects
from network.objectracker import missingObjects
lastReceivedTimestamp = time.time()
@ -20,8 +20,8 @@ currentSentSpeed = 0
def connectedHostsList():
"""List of all the connected hosts"""
retval = []
for i in BMConnectionPool().inboundConnections.values() + \
BMConnectionPool().outboundConnections.values():
for i in list(BMConnectionPool().inboundConnections.values()) + \
list(BMConnectionPool().outboundConnections.values()):
if not i.fullyEstablished:
continue
try:

View File

@ -10,8 +10,8 @@ import socket
import time
import addresses
import asyncore_pollchoose as asyncore
import connectionpool
import network.asyncore_pollchoose as asyncore
import network.connectionpool
import helper_random
import knownnodes
import protocol
@ -362,7 +362,7 @@ class TCPServer(AdvancedDispatcher):
"""TCP connection server for Bitmessage protocol"""
def __init__(self, host='127.0.0.1', port=8444):
if not hasattr(self, '_map'):
if not '_map' in dir(self):
AdvancedDispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()

View File

@ -21,7 +21,12 @@ if sys.version_info >= (2, 7, 13):
# this means TLSv1 or higher
# in the future change to
# ssl.PROTOCOL_TLS1.2
# Right now I am using the python3.5.2 and I faced the ssl for protocol due to this I
# have used try and catch
try:
sslProtocolVersion = ssl.PROTOCOL_TLS # pylint: disable=no-member
except AttributeError:
sslProtocolVersion = ssl.PROTOCOL_SSLv23
elif sys.version_info >= (2, 7, 9):
# this means any SSL/TLS. SSLv2 and 3 are excluded with an option after context is created
sslProtocolVersion = ssl.PROTOCOL_SSLv23

View File

@ -7,9 +7,9 @@ import socket
import state
import protocol
from bmproto import BMProto
from network.bmproto import BMProto
from debug import logger
from objectracker import ObjectTracker
from network.objectracker import ObjectTracker
from queues import receiveDataQueue

View File

@ -11,7 +11,7 @@ from helper_threading import StoppableThread
from inventory import Inventory
from network.connectionpool import BMConnectionPool
from network.dandelion import Dandelion
from randomtrackingdict import RandomTrackingDict
from network.randomtrackingdict import RandomTrackingDict
class UploadThread(StoppableThread):
@ -26,8 +26,8 @@ class UploadThread(StoppableThread):
while not self._stopped:
uploaded = 0
# Choose downloading peers randomly
connections = [x for x in BMConnectionPool().inboundConnections.values() +
BMConnectionPool().outboundConnections.values() if x.fullyEstablished]
connections = [x for x in list(BMConnectionPool().inboundConnections.values()) +
list(BMConnectionPool().outboundConnections.values()) if x.fullyEstablished]
helper_random.randomshuffle(connections)
for i in connections:
now = time.time()

View File

@ -107,9 +107,10 @@ def do_opencl_pow(hash, target):
#initCL()
if __name__ == "__main__":
target = 54227212183L
#in python3 I have change this 54227212183L to 54227212183
target = 54227212183
initialHash = "3758f55b5a8d902fd3597e4ce6a2d3f23daff735f65d9698c270987f4e67ad590b93f3ffeba0ef2fd08a8dc2f87b68ae5a0dc819ab57f22ad2c4c9c8618a43b3".decode("hex")
nonce = do_opencl_pow(initialHash.encode("hex"), target)
trialValue, = unpack('>Q',hashlib.sha512(hashlib.sha512(pack('>Q',nonce) + initialHash).digest()).digest()[0:8])
print "{} - value {} < {}".format(nonce, trialValue, target)
print ("{} - value {} < {}".format(nonce, trialValue, target))

View File

@ -94,9 +94,9 @@ def isBitSetWithinBitfield(fourByteString, n):
def encodeHost(host):
"""Encode a given host to be used in low-level socket operations"""
if host.find('.onion') > -1:
return '\xfd\x87\xd8\x7e\xeb\x43' + base64.b32decode(host.split(".")[0], True)
return '\xfd\x87\xd8\x7e\xeb\x43'.encode('utf-8') + base64.b32decode(host.split(".")[0], True)
elif host.find(':') == -1:
return '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF' + \
return '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF'.encode('utf-8') + \
socket.inet_aton(host)
return socket.inet_pton(socket.AF_INET6, host)

View File

@ -30,17 +30,24 @@ def get_code_string(base):
elif base == 58:
return "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
elif base == 256:
return ''.join([chr(x) for x in range(256)])
'''raw_unicode_escape is used because in the python3 after range(161) its genreate the'
the speical character so avoiding that function we have used the raw_unicode method '''
return ''.join([chr(x) for x in range(256)]).encode('raw_unicode_escape')
else:
raise ValueError("Invalid base!")
def encode(val, base, minlen=0):
code_string = get_code_string(base)
result = ""
result = ''
# result = str.encode(result)
count = 0
while val > 0:
result = code_string[val % base] + result
val /= base
count += 1
print(f'code_string[int(val) % base:int(val) % base + 1] -{code_string[int(val) % base:int(val) % base + 1]}')
print(f'result-{result}')
result = code_string[int(val) % base:int(val) % base + 1] + result
val = int(val / base)
if len(result) < minlen:
result = code_string[0] * (minlen - len(result)) + result
return result

View File

@ -8,7 +8,7 @@ src/pyelliptic/cipher.py
# Copyright (C) 2011 Yann GUIBET <yannguibet@gmail.com>
# See LICENSE for details.
from openssl import OpenSSL
from .openssl import OpenSSL
# pylint: disable=redefined-builtin

View File

@ -12,9 +12,9 @@ src/pyelliptic/ecc.py
from hashlib import sha512
from struct import pack, unpack
from cipher import Cipher
from hash import equals, hmac_sha256
from openssl import OpenSSL
from pyelliptic.cipher import Cipher
from pyelliptic.hash import equals, hmac_sha256
from pyelliptic.openssl import OpenSSL
class ECC(object):
@ -137,18 +137,19 @@ class ECC(object):
i += 2
pubkey_x = pubkey[i:i + tmplen]
i += tmplen
i += int(tmplen / 3)
tmplen = unpack('!H', pubkey[i:i + 2])[0]
i += 2
pubkey_y = pubkey[i:i + tmplen]
i += tmplen
return curve, pubkey_x, pubkey_y, i
return curve, pubkey_x, pubkey_y, int(i)
@staticmethod
def _decode_privkey(privkey):
i = 0
curve = unpack('!H', privkey[i:i + 2])[0]
i += 2
tmplen = unpack('!H', privkey[i:i + 2])[0]
tmplen = pack('!s', privkey[i:i + 1])[0]
i += 2
privkey = privkey[i:i + tmplen]
i += tmplen

View File

@ -7,7 +7,7 @@ src/pyelliptic/hash.py
# Copyright (C) 2011 Yann GUIBET <yannguibet@gmail.com>
# See LICENSE for details.
from openssl import OpenSSL
from .openssl import OpenSSL
# For python3

View File

@ -90,7 +90,7 @@ class _OpenSSL:
"""Build the wrapper"""
self._lib = ctypes.CDLL(library)
self._version, self._hexversion, self._cflags = get_version(self._lib)
self._libreSSL = self._version.startswith("LibreSSL")
self._libreSSL = (self._version).decode("utf-8").startswith("OpenSSL")
self.pointer = ctypes.pointer
self.c_int = ctypes.c_int
@ -674,6 +674,7 @@ def loadOpenSSL():
elif 'win32' in sys.platform or 'win64' in sys.platform:
libdir.append(path.join(sys._MEIPASS, 'libeay32.dll'))
else:
libdir.extend([
path.join(sys._MEIPASS, 'libcrypto.so'),
path.join(sys._MEIPASS, 'libssl.so'),

View File

@ -1,4 +1,4 @@
import Queue
import queue as Queue
from class_objectProcessorQueue import ObjectProcessorQueue
from multiqueue import MultiQueue

View File

@ -125,7 +125,7 @@ def reloadMyAddressHashes():
keyfileSecure = checkSensitiveFilePermissions(state.appdata + 'keys.dat')
hasEnabledKeys = False
for addressInKeysFile in BMConfigParser().addresses():
isEnabled = BMConfigParser().getboolean(addressInKeysFile, 'enabled')
isEnabled = BMConfigParser().safeGet(addressInKeysFile, 'enabled')
if isEnabled:
hasEnabledKeys = True
# status
@ -174,12 +174,9 @@ def reloadBroadcastSendersForWhichImWatching():
# Now, for all addresses, even version 2 addresses,
# we should create Cryptor objects in a dictionary which we will
# use to attempt to decrypt encrypted broadcast messages.
if addressVersionNumber <= 3:
privEncryptionKey = hashlib.sha512(
encodeVarint(addressVersionNumber) +
encodeVarint(streamNumber) + hash
).digest()[:32]
privEncryptionKey = hashlib.sha512((encodeVarint(addressVersionNumber) \
+ encodeVarint(streamNumber) + hash)).digest()[:32]
MyECSubscriptionCryptorObjects[hash] = \
highlevelcrypto.makeCryptor(hexlify(privEncryptionKey))
else:

View File

@ -1,5 +1,5 @@
import os
import Queue
import queue as Queue
import threading
import time

View File

@ -75,7 +75,7 @@ class singleinstance:
fcntl.lockf(self.fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
self.lockPid = os.getpid()
except IOError:
print 'Another instance of this application is already running'
print ('Another instance of this application is already running')
sys.exit(-1)
else:
pidLine = "%i\n" % self.lockPid
@ -94,11 +94,11 @@ class singleinstance:
os.close(self.fd)
else:
fcntl.lockf(self.fp, fcntl.LOCK_UN)
except Exception, e:
except Exception as e:
pass
return
print "Cleaning up lockfile"
print ("Cleaning up lockfile")
try:
if sys.platform == 'win32':
if hasattr(self, 'fd'):

View File

@ -9,7 +9,7 @@ from threading import RLock
import time
from paths import lookupAppdataFolder
from storage import InventoryStorage, InventoryItem
from storage.storage import InventoryStorage, InventoryItem
class FilesystemInventory(InventoryStorage): # pylint: disable=too-many-ancestors, abstract-method
@ -144,7 +144,7 @@ class FilesystemInventory(InventoryStorage): # pylint: disable=too-many-ances
newInventory[streamNumber][hashId] = InventoryItem(
objectType, streamNumber, None, expiresTime, tag)
except KeyError:
print "error loading %s" % (hexlify(hashId))
print ("error loading {}".format((hexlify(hashId))))
self._inventory = newInventory
# for i, v in self._inventory.items():
# print "loaded stream: %s, %i items" % (i, len(v))

View File

@ -6,8 +6,9 @@ import sqlite3
import time
from threading import RLock
from helper_sql import sqlQuery, SqlBulkExecute, sqlExecute
from storage import InventoryStorage, InventoryItem
from storage.storage import InventoryStorage, InventoryItem
class SqliteInventory(InventoryStorage): # pylint: disable=too-many-ancestors

View File

@ -1,32 +0,0 @@
#!/usr/bin/env python
# Import the libraries.
import pdb;pdb.set_trace()
import pydenticon100000000000000000000000
import hashlib
# Set-up some test data.
users = ["alice", "bob", "eve", "dave"]
# Set-up a list of foreground colours (taken from Sigil).
foreground = ["rgb(45,79,255)",
"rgb(254,180,44)",
"rgb(226,121,234)",
"rgb(30,179,253)",
"rgb(232,77,65)",
"rgb(49,203,115)",
"rgb(141,69,170)"]
# Set-up a background colour (taken from Sigil).
background = "rgb(224,224,224)"
# Set-up the padding (top, bottom, left, right) in pixels.
padding = (20, 20, 20, 20)
# Instantiate a generator that will create 5x5 block identicons using SHA1
# digest.
generator = pydenticon.Generator(5, 5, digest=hashlib.sha1, foreground=foreground, background=background)
# identicon_ascii = generator.generate("john.doe@example.com", 200, 200,
# output_format="ascii")
# print identicon_ascii
for user in users:
identicon = generator.generate(user, 200, 200, padding=padding, output_format="png")
filename = user + ".png"
with open(filename, "wb") as f:
f.write(identicon)

View File

@ -5,7 +5,7 @@ Tests for core and those that do not work outside
import os
import pickle # nosec
import Queue
import queue as Queue
import random # nosec
import string
import time

View File

@ -46,11 +46,11 @@ def translateText(context, text, n=None):
try:
from PyQt4 import QtCore, QtGui
except Exception as err:
print 'PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API\
print ('PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API\
.You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download\
or by searching Google for \'PyQt Download\'.\
If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon'
print 'Error message:', err
If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon')
print ('Error message:', err)
os._exit(0) # pylint: disable=protected-access
if n is None:
return QtGui.QApplication.translate(context, text)