From ccf298a72f6b8b32cbbf2cec82c07bc0e431f720 Mon Sep 17 00:00:00 2001
From: Kenneth Reitz
Date: Sun, 7 Feb 2016 22:25:43 -0500
Subject: [PATCH] it may be finished
---
tool.py | 246 ++++++++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 213 insertions(+), 33 deletions(-)
diff --git a/tool.py b/tool.py
index 955906b0..8f596dfb 100644
--- a/tool.py
+++ b/tool.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+
import os
import json
from jinja2 import Template
@@ -18,9 +20,11 @@ def get_users():
users = json.loads(f.read())['users']
users = sorted(users, key=lambda k: k['date_joined'])
+ for i, message in enumerate(users):
+ users[i]['date_joined'] = datetime.fromtimestamp(message['date_joined']).strftime('%c')
return users
-def get_groups():
+def get_groups(users):
with open('groups.json') as f:
groups = json.loads(f.read())
@@ -28,14 +32,22 @@ def get_groups():
for i, group in enumerate(groups):
groups[i]['members'] = sorted(groups[i]['members'], key=lambda k: k['date_created'])
+ groups[i]['user'] = users[group['creator_id']]
return groups
-def get_topics(group):
+def get_topics(group, users):
with open('groups/{}/topics.json'.format(group)) as f:
topics = json.loads(f.read())
- return sorted(topics, key=lambda k: k['date_created'])
+ topics = sorted(topics, key=lambda k: k['date_created'])
+
+ for i, topic in enumerate(topics):
+ topics[i]['user'] = users[topic['creator_id']]
+
+ return topics
+
+
def get_messages(group, topic, users):
with open('groups/{}/{}/messages.json'.format(group, topic)) as f:
@@ -44,17 +56,28 @@ def get_messages(group, topic, users):
messages = sorted(messages, key=lambda k: k['date_created'])
for i, message in enumerate(messages):
- messages[i]['date_created'] = datetime.fromtimestamp(message['date_created']).strftime('%H:%M %b %d %Y')
+ messages[i]['date_created'] = datetime.fromtimestamp(message['date_created']).strftime('%b %d %Y %H:%M')
messages[i]['user'] = users[message['user_id']]
return messages
GROUP_TEMPLATE = """
-
+
-
+
-Topics
+{% if user.name %}
+Created by {{ user.name }}.
+{% else %}
+Created by {{ user.username }}.
+{% endif %}
+
+
+
+Group Topics
{% for topic in topics %}
@@ -76,29 +99,33 @@ def render_group(group, topics):
f.write(html)
TOPIC_TEMPLATE = """
-
+
-Created by {{ user.name }}.
+{% else %}
+Created by {{ user.username }}.
+{% endif %}
+
+Topic Messages
-
- {{ message.message }}
-
+
+ {{ message.message }}
+
{% endfor%}
-
"""
@@ -115,31 +142,184 @@ def render_topic(group, topic, messages):
f.write(html)
+USER_TEMPLATE = """
+
+
+ Convore /
+Users /
+{{ user.username }}
+
+
+{{ user.name }}
+
+{{ user.bio }}
+
+{% if user.pic %}
+
+{% endif %}
+
+
+
+
+
+ | Location |
+ {{ user.location }} |
+
+
+ | Web URL |
+ {{ user.web }} |
+
+
+ | Date Joined |
+ {{ user.date_joined }} |
+
+
+
+"""
+
+def render_user(user):
+
+
+ filename = 'html/users/{}.html'.format(user['username'])
+ mkdir_p(filename)
+
+ if user['pic']:
+ user['pic'] = user['pic'].replace('/', '-')
+
+ template = Template(USER_TEMPLATE)
+ html = template.render(user=user)
+
+ with open(filename, 'w', 'utf-8') as f:
+ f.write(html)
+
+
+USERS_TEMPLATE = """
+
+
+ Convore /
+Users
+
+
+{% for user in users %}
+
+
+ {% if user.name %}
+
+
+ {{ user.name }}
+ {% else %}
+
+ {{ user.username }}
+
+ {% endif %}
+{% endfor%}
+
+{% if next %}
+Next Page
+{% endif %}
+
+"""
+
+def render_users(users, pagination=8000):
+
+ i = 0
+ page = 0
+
+ while i < len(users):
+ if page == 0:
+ filename = 'html/users.html'
+ else:
+ filename = 'html/users-{}.html'.format(page)
+ mkdir_p(filename)
+
+ _users = users[pagination*page:pagination*page+pagination]
+ i += len(_users)
+
+ if len(_users) < pagination:
+ next = False
+ else:
+ next = page + 1
+
+ template = Template(USERS_TEMPLATE)
+ html = template.render(users=_users, next=next)
+
+ with open(filename, 'w', 'utf-8') as f:
+ f.write(html)
+
+ page += 1
+
+GROUPS_TEMPLATE = """
+
+
+ Convore /
+Groups
+
+
+{% for group in groups %}
+
+ {{ group.name }}
+ {{ group.members | count }} Members
+ {{ group.description }}
+
+
+{% endfor%}
+
+
+{% if next %}
+Next Page
+{% endif %}
+
+"""
+
+def render_groups(groups):
+
+ filename = 'html/groups.html'
+ mkdir_p(filename)
+
+ template = Template(GROUPS_TEMPLATE)
+ html = template.render(groups=groups)
+
+ with open(filename, 'w', 'utf-8') as f:
+ f.write(html)
+
+message_count = 0
+topic_count = 0
+
users = get_users()
user_lookup = {}
+
+print 'Rendering user profiles...'
for user in users:
user_lookup[user['id']] = user
+ # render_user(user)
-for group in get_groups():
+print 'Rendering user index...'
+render_users(users)
- topics = get_topics(group['slug'])
- render_group(group, topics)
+
+groups = get_groups(users=user_lookup)
+
+print 'Rendering groups...'
+# render_groups(groups)
+
+for group in groups:
+
+ topics = get_topics(group['slug'], users=user_lookup)
+
+ topic_count += len(topics)
+ # render_group(group, topics)
for topic in topics:
messages = get_messages(group['slug'], topic['slug'], users=user_lookup)
+ # render_topic(group, topic, messages)
- # for message
- # print messages[1]
- render_topic(group, topic, messages)
-
+ message_count += len(messages)
print '{}: {} ({})'.format(group['slug'], topic['slug'], len(messages))
- break
-
-# u'category', u'description', u'slug', u'creator_id', u'members', u'date_created', u'id', u'name']
-# print groups
-
-# {u'category': [{u'name': u'Technology', u'slug': u'technology-1'}], u'description': u'your favourite text editor', u'slug': u'chocolat', u'creator_id': 1855, u'members': [{u'admin': True, u'date_created': 1321999314.51599, u'user_id': 1855}], u'date_created': 1321999314.151898, u'id': 12280, u'name': u'Chocolat'}
+print 'messages: {}'.format(message_count)
+print 'topics: {}'.format(topic_count)
+print 'groups: {}'.format(len(groups))
+print 'users: {}'.format(len(users))
\ No newline at end of file