def test_insert1(env): users = [] user1 = User() user1.oid = 1 user1.name = 'Homer Simpson' user1.authid = 'homer' user1.email = '*****@*****.**' user1.birthday = datetime.date(1950, 12, 24) user1.is_friendly = True user1.tags = ['relaxed', 'beerfan'] users.append(user1) user2 = User() user2.oid = 2 user2.name = 'Crocodile Dundee' user2.authid = 'crocoboss' user2.email = '*****@*****.**' user2.birthday = datetime.date(1960, 2, 4) user2.is_friendly = False user2.tags = ['red', 'yellow'] user2.referred_by = user1.oid users.append(user2) user3 = User() user3.oid = 3 user3.name = 'Foobar Space' user3.authid = 'foobar' user3.email = '*****@*****.**' user3.birthday = datetime.date(1970, 5, 7) user3.is_friendly = True user3.tags = ['relaxed', 'beerfan'] user3.referred_by = user1.oid users.append(user3) with Transaction(env, write=True) as txn: for user in users: _user = txn.users[user.oid] if not _user: txn.users[user.oid] = user #txn.users_by_authid[user.authid] = user.oid print('user stored', user) else: print('user loaded', _user)
def test_insert2(env): with Transaction(env, write=True) as txn: for i in range(100): user = User() user.oid = i + 10 user.name = 'Test {}'.format(i) user.authid = 'test-{}'.format(i) user.email = '{}@example.com'.format(user.authid) for j in range(10): user.ratings['test-rating-{}'.format(j)] = random.random() _user = txn.users[user.oid] if not _user: txn.users[user.oid] = user #txn.users_by_authid[user.authid] = user.oid print('user stored', user, user.oid, user.authid) else: print('user loaded', _user, _user.oid, _user.authid)
def test_insert3(env): oid = 4 with Transaction(env, write=True) as txn: user = txn.users[oid] if not user: user = User() user.oid = oid user.name = 'Foobar Space' user.authid = 'foobar' user.email = '*****@*****.**' user.birthday = datetime.date(1970, 5, 7) user.is_friendly = True user.tags = ['relaxed', 'beerfan'] user.referred_by = 1 txn.users[oid] = user print('user stored', user) else: print('user loaded', user)
def parse_post(content): post = Post() users = [] comments = [] # Note: this code needs patched lxml with support for huge_tree in HTMLParser parser = lxml.etree.HTMLParser(recover=True, huge_tree=True) root = lxml.etree.HTML(content, parser=parser) # post post_node = root.xpath('//li[@class="hentry"]')[0] comments_node = post_node.xpath('.//div[@class="entry-comments"]')[0] author_node = post_node.xpath('.//p[@class="author"]')[0] post_url = post_node.xpath('.//a[@class="entry-title"]')[0].get('href') post.post_id = int(re.search(r'/(\d+)$', post_url).group(1)) comment_list_raw = comments_node.xpath('ul')[0].get("id") post.comment_list_id = int(re.match(r'comments_(\d+)$', comment_list_raw).group(1)) post.language = post_node.xpath('.//a[@rel="chapter"]')[0].text post.code = post_node.xpath('div[@class="entry-content"]/pre/code')[0].text post.text = inner_html(post_node.xpath('p[@class="description"]')[0]) post.posted = parse_date(author_node.xpath('abbr')[0].get('title')) post.vote_plus, post.vote_minus, post.rating = parse_rating(post_node.xpath('p[@class="vote"]/strong')[0]) # author info user = User() user_url = author_node.xpath('a[1]')[0].get('href') user.user_id = int(re.search(r'/user/(\d+)$', user_url).group(1)) user.name = author_node.xpath('a[2]')[0].text user.avatar_hash = parse_avatar(author_node.xpath('a[1]/img')[0].get('src')) post.user_id = user.user_id users.append(user) # comments for comment_node in comments_node.xpath('.//div[@class="entry-comment-wrapper"]'): comment = Comment() comment.comment_id = int(re.match(r'comment-(\d+)$', comment_node.get('id')).group(1)) comment.post_id = post.post_id parent_node = comment_node.getparent().getparent().getparent() if parent_node.tag == 'li': parent_node = parent_node.xpath('div[@class="entry-comment-wrapper"]')[0] comment.parent_id = int(re.match(r'comment-(\d+)$', parent_node.get('id')).group(1)) else: comment.parent_id = None comment.text = inner_html(comment_node.xpath('.//span[@class="comment-text"]')[0]) info_node = comment_node.xpath('p[@class="entry-info"]')[0] comment.posted = parse_date(info_node.xpath('abbr[@class="published"]')[0].get('title')) comment.vote_plus, comment.vote_minus, comment.rating = parse_rating(info_node.xpath('span[@class="comment-vote"]/strong')[0]) user_node = info_node.xpath('strong[@class="entry-author"]/a')[0] user = User() user.user_id = int(re.search(r'/user/(\d+)$', user_node.get('href')).group(1)) user.name = user_node.text user.avatar_hash = parse_avatar(info_node.xpath('img[@class="avatar"]')[0].get('src')) comment.user_id = user.user_id users.append(user) comments.append(comment) return (post, users, comments)