it may be finished

This commit is contained in:
2016-02-07 22:25:43 -05:00
parent 7d57a3db96
commit ccf298a72f
+213 -33
View File
@@ -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 = """
<link rel="stylesheet" href="tufte.css"/>
<link rel="stylesheet" href="/tufte.css"/>
<h1>Group: <a href="/groups/{{ slug }}.html">{{ name }}</a></h1>
<h1> <a href="/index.html">Convore</a> /
<a href="/groups.html">Groups</a> /
{{ name }}
</h1>
<h2>Topics</h2>
{% if user.name %}
Created by <a href="/users/{{ user.username }}.html">{{ user.name }}</a>.
{% else %}
Created by <a href="/users/{{ user.username }}.html">{{ user.username }}</a>.
{% endif %}
<h2>Group Topics</h2>
<ul>
{% for topic in topics %}
@@ -76,29 +99,33 @@ def render_group(group, topics):
f.write(html)
TOPIC_TEMPLATE = """
<link rel="stylesheet" href="tufte.css"/>
<link rel="stylesheet" href="/tufte.css"/>
<h1>Topic:
<h1> <a href="/index.html">Convore</a> /
<a href="/groups.html">Groups</a> /
<a href="/groups/{{ group.slug }}.html">{{ group.name }}</a> /
<a href="/groups/{{ group.slug }}/{{ slug }}.html">{{ name }}</a>
<a href="/groups/{{ group.slug }}.html">{{ group.name }}</a>:
</h1>
<h2>Messages</h2>
<h2>{{ name }}</h2>
{% if user.name %}
<p>Created by <a href="/users/{{ user.username }}.html">{{ user.name }}</a>.</p>
{% else %}
<p>Created by <a href="/users/{{ user.username }}.html">{{ user.username }}</a>.</p>
{% endif %}
<h2>Topic Messages</h2>
<ul>
{% for message in messages %}
<li>
<p><a href="/users/{{ message.user.username }}">{{ message.user.username }}</a> at {{ message.date_created }}
<h4><a href="/users/{{ message.user.username }}.html">{{ message.user.username }}</a> at {{ message.date_created }}</h4>
{% if message.stars %}
({{ message.stars|length }} stars)
{{ "&#9733;" * message.stars|length }}
{% endif %}
</p>
{{ message.message }}
</li>
<p>{{ message.message }}</p>
<p>&nbsp;</p>
{% endfor%}
</ul>
"""
@@ -115,31 +142,184 @@ def render_topic(group, topic, messages):
f.write(html)
USER_TEMPLATE = """
<link rel="stylesheet" href="/tufte.css"/>
<h1> <a href="/index.html">Convore</a> /
<a href="/users.html">Users</a> /
{{ user.username }}
</h1>
<h2>{{ user.name }}</h2>
<p>{{ user.bio }}</p>
{% if user.pic %}
<img src="/avatars/{{ user.pic }}" />
{% endif %}
<p>
<table>
<tr>
<td>Location</td>
<td>{{ user.location }}</td>
</tr>
<tr>
<td>Web URL</td>
<td><a href="{{ user.web }}">{{ user.web }}</a></td>
</tr>
<tr>
<td>Date Joined</td>
<td>{{ user.date_joined }}</td>
</tr>
</table>
"""
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 = """
<link rel="stylesheet" href="/tufte.css"/>
<h1> <a href="/index.html">Convore</a> /
Users
</h1>
{% for user in users %}
{% if user.name %}
<a href="/users/{{ user.username }}.html">
{{ user.name }}
{% else %}
<a href="/users/{{ user.username }}.html">
{{ user.username }}
</a>
{% endif %}
{% endfor%}
{% if next %}
<h1><a href="/users-{{ next }}.html">Next Page</a></h1>
{% 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 = """
<link rel="stylesheet" href="/tufte.css"/>
<h1> <a href="/index.html">Convore</a> /
Groups
</h1>
{% for group in groups %}
<h3><a href="/groups/{{ group.slug }}.html">{{ group.name }}</a></h3>
{{ group.members | count }} Members
<p>{{ group.description }}</p>
{% endfor%}
{% if next %}
<h1><a href="/users-{{ next }}.html">Next Page</a></h1>
{% 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))