mirror of
https://github.com/not-kennethreitz/convore.json.git
synced 2026-06-05 23:20:19 +00:00
it may be finished
This commit is contained in:
@@ -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)
|
||||
{{ "★" * message.stars|length }}
|
||||
{% endif %}
|
||||
</p>
|
||||
{{ message.message }}
|
||||
</li>
|
||||
|
||||
<p>{{ message.message }}</p>
|
||||
<p> </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))
|
||||
Reference in New Issue
Block a user