Skip to content
Snippets Groups Projects
Commit d6609e7f authored by Holger Nahrstaedt's avatar Holger Nahrstaedt
Browse files

Examples added

Wallet
* KeyNotFound raised when no key is found
Examples
write blocks to file
* decodes streamed blocks to numbers with hexlify and write them line by line as gzip compressed file
post_to_html
* creates a html page from any given authorperm string
post_to_md
* saves the markdown code from any given authorperm link
Unit tests
test_vote imprved
parent 56f22b04
No related branches found
No related tags found
No related merge requests found
...@@ -366,6 +366,7 @@ class Wallet(object): ...@@ -366,6 +366,7 @@ class Wallet(object):
if key: if key:
return key return key
else: else:
key = None
for authority in account[0][key_type]["key_auths"]: for authority in account[0][key_type]["key_auths"]:
try: try:
key = self.getPrivateKeyForPublicKey(authority[0]) key = self.getPrivateKeyForPublicKey(authority[0])
...@@ -373,7 +374,9 @@ class Wallet(object): ...@@ -373,7 +374,9 @@ class Wallet(object):
return key return key
except KeyNotFound: except KeyNotFound:
key = None key = None
return False if key is None:
raise KeyNotFound("No private key for {} found".format(name))
return
def getOwnerKeyForAccount(self, name): def getOwnerKeyForAccount(self, name):
""" Obtain owner Private Key for an account from the wallet database """ Obtain owner Private Key for an account from the wallet database
......
#!/usr/bin/env python
import argparse
import sys
import jinja2
import markdown
import pytz
from datetime import datetime, timedelta
from beem.blockchain import Blockchain
from beem.comment import Comment
from beem.utils import formatTimeString, formatTimedelta, remove_from_dict, reputation_to_score, parse_time
import logging
log = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
TEMPLATE = """<!DOCTYPE html>
<html>
<head>
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/css/bootstrap-combined.min.css" rel="stylesheet">
<style>
body {
font-family: sans-serif;
}
code, pre {
font-family: monospace;
}
h1 code,
h2 code,
h3 code,
h4 code,
h5 code,
h6 code {
font-size: inherit;
}
</style>
<title>{{title}}</title>
</head>
<body>
<div class="container">
{{content}}
</div>
</body>
</html>
"""
def parse_args(args=None):
d = 'Make a complete, styled HTML document from a Markdown file.'
parser = argparse.ArgumentParser(description=d)
parser.add_argument('authorperm', type=str, nargs='?',
default=sys.stdin,
help='Authorperm to read. Defaults to stdin.')
parser.add_argument('-o', '--out', type=argparse.FileType('w'),
default=sys.stdout,
help='Output file name. Defaults to stdout.')
return parser.parse_args(args)
def main(args=None):
args = parse_args(args)
authorperm = args.authorperm
comment = Comment(authorperm)
title = comment["title"]
author = comment["author"]
rep = reputation_to_score(comment["author_reputation"])
time_created = comment["created"]
utc = pytz.timezone('UTC')
td_created = utc.localize(datetime.utcnow()) - time_created
md = '# ' + title + '\n' + author
md += '(%.2f) ' % (rep)
md += formatTimedelta(td_created) + '\n\n'
md += comment["body"]
extensions = ['extra', 'smarty']
html = markdown.markdown(md, extensions=extensions, output_format='html5')
doc = jinja2.Template(TEMPLATE).render(content=html, title=title)
args.out.write(doc)
if __name__ == '__main__':
sys.exit(main())
#!/usr/bin/env python
import argparse
import sys
import pytz
import markdown
from datetime import datetime, timedelta
from beem.blockchain import Blockchain
from beem.comment import Comment
from beem.utils import formatTimeString, formatTimedelta, remove_from_dict, reputation_to_score, parse_time
import logging
log = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def parse_args(args=None):
d = 'Save post as markdown.'
parser = argparse.ArgumentParser(description=d)
parser.add_argument('authorperm', type=str, nargs='?',
default=sys.stdin,
help='Authorperm to read. Defaults to stdin.')
parser.add_argument('-o', '--out', type=argparse.FileType('w'),
default=sys.stdout,
help='Output file name. Defaults to stdout.')
return parser.parse_args(args)
def main(args=None):
"""pandoc -s test.md --from markdown-blank_before_header-blank_before_blockquote+lists_without_preceding_blankline -o test.pdf"""
args = parse_args(args)
authorperm = args.authorperm
comment = Comment(authorperm)
title = comment["title"]
author = comment["author"]
rep = reputation_to_score(comment["author_reputation"])
time_created = comment["created"]
if True:
md = '% Title:\t ' + title + '\n'
md += '% Author:\t' + author + '(%.2f) ' % (rep) + '\n'
md += '% Date:\t' + time_created.strftime("%d.%m.%Y") + '\n'
md += '% Comment:\n'
else:
md = '# ' + title + '\n'
md += author + '(%.2f) ' % (rep) + ' ' + time_created.strftime("%d.%m.%Y") + '\n\n'
md += comment["body"]
args.out.write(md)
if __name__ == '__main__':
sys.exit(main())
from __future__ import print_function
import sys
from datetime import datetime, timedelta
import time
import io
import re
import gzip
import json
from beem.blockchain import Blockchain
from beem.comment import Comment
from beem.account import Account
from beem.utils import parse_time, construct_authorperm
from beem import exceptions
import logging
from binascii import hexlify, unhexlify
log = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
try:
from cPickle import dumps, loads
except ImportError:
from pickle import dumps, loads
def s_dump_text(elt_to_pickle, file_obj):
'''dumps one element to file_obj, a file opened in write mode'''
pickled_elt_str = dumps(elt_to_pickle)
file_obj.write(hexlify(pickled_elt_str).decode("utf-8"))
# record separator is a blank line
file_obj.write('\n')
def s_dump_binary(elt_to_pickle, file_obj):
'''dumps one element to file_obj, a file opened in binary write mode'''
pickled_elt_str = dumps(elt_to_pickle)
file_obj.write(hexlify(pickled_elt_str))
# record separator is a blank line
file_obj.write(bytes('\n'.encode("latin1")))
def s_load_text(file_obj):
'''load contents from file_obj, returning a generator that yields one
element at a time'''
for line in file_obj:
elt = loads(unhexlify(line[:-1].encode("latin")))
yield elt
def s_load_binary(file_obj):
'''load contents from file_obj, returning a generator that yields one
element at a time'''
for line in file_obj:
elt = loads(unhexlify(line[:-1]))
yield elt
if __name__ == "__main__":
blockchain = Blockchain()
threading = True
thread_num = 8
cur_block = blockchain.get_current_block()
stop = cur_block.identifier
startdate = cur_block.time() - timedelta(seconds=3600)
start = blockchain.get_estimated_block_num(startdate, accurate=True)
outf = gzip.open('blocks1.pkl', 'w')
blocks = 0
for block in blockchain.stream(opNames=[], start=start, stop=stop, threading=threading, thread_num=thread_num):
s_dump_binary(block, outf)
blocks = blocks + 1
if blocks % 200 == 0:
print(blocks, "blocks streamed")
outf.close()
for block in s_load_binary(gzip.open('blocks1.pkl')):
print(block)
...@@ -10,7 +10,7 @@ from beem import Steem ...@@ -10,7 +10,7 @@ from beem import Steem
from beem.comment import Comment from beem.comment import Comment
from beem.vote import Vote, ActiveVotes, AccountVotes from beem.vote import Vote, ActiveVotes, AccountVotes
from beem.instance import set_shared_steem_instance from beem.instance import set_shared_steem_instance
from beem.utils import get_node_list from beem.utils import get_node_list, construct_authorperm, resolve_authorperm, resolve_authorpermvoter
wif = "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3" wif = "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
...@@ -37,10 +37,11 @@ class Testcases(unittest.TestCase): ...@@ -37,10 +37,11 @@ class Testcases(unittest.TestCase):
set_shared_steem_instance(self.bts) set_shared_steem_instance(self.bts)
self.bts.set_default_account("test") self.bts.set_default_account("test")
self.authorpermvoter = u"@gtg/ffdhu-gtg-witness-log|gandalf" self.authorpermvoter = u"@gtg/ffdhu-gtg-witness-log|gandalf"
self.author = u"gtg" [author, permlink, voter] = resolve_authorpermvoter(identifier)
self.permlink = u"ffdhu-gtg-witness-log" self.author = author
self.voter = u"gandalf" self.permlink = permlink
self.authorperm = u"@gtg/ffdhu-gtg-witness-log" self.voter = voter
self.authorperm = construct_authorperm(author, permlink)
@parameterized.expand([ @parameterized.expand([
("non_appbase"), ("non_appbase"),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment