DotaNoobs main site.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

474 lines
11 KiB

import os
import re
from time import strftime, gmtime
from peewee import *
from app import app, cache
db = MySQLDatabase(app.config['FORUM_NAME'], **{'passwd': app.config['FORUM_PASSWORD'],
'host': app.config['FORUM_HOST'], 'user': app.config['FORUM_USERNAME']})
@cache.memoize(60*5)
def latest_news(num=3):
latest_news = []
try:
db.connect()
news_forum = Forums.get(fn.Lower(Forums.title) % '%news%')
for thread in Threads.select().where(
Threads.forum == news_forum.id).order_by(Threads.date.desc()).limit(num):
# Last revision of the first post
post = Posts.select().where(Posts.thread == thread.id).get()
raw_text = PostsText.select().where(PostsText.pid == post.id).order_by(PostsText.revision.desc()).limit(1).get()
#remove BBCode
text = re.sub(r"\[(\/)?(\w+)\]", '', raw_text.text)
timestamp = thread.date
date = strftime('%B %d, %Y %H:%M:%S UTC', gmtime(timestamp))
if not timestamp:
post = Posts.select().where(Posts.thread == thread.id).get()
timestamp = post and post.date
url = 'http://board.dotanoobs.com/?page=thread&id=%d' % thread.id
latest_news.append({'title':thread.title, 'text':text, 'date':date, 'timestamp':timestamp, 'url':url})
except Exception as e:
latest_news.append({'title':'Error with forum db', 'text':e, 'url':''})
finally:
db.close()
return latest_news
class UnknownFieldType(object):
pass
class BaseModel(Model):
class Meta:
database = db
class Badges(BaseModel):
color = IntegerField()
name = CharField()
owner = IntegerField()
class Meta:
db_table = 'badges'
class Blockedlayouts(BaseModel):
blockee = IntegerField()
user = IntegerField()
class Meta:
db_table = 'blockedlayouts'
class Categories(BaseModel):
corder = IntegerField()
name = CharField()
class Meta:
db_table = 'categories'
class Enabledplugins(BaseModel):
plugin = CharField()
class Meta:
db_table = 'enabledplugins'
class Forummods(BaseModel):
forum = IntegerField()
user = IntegerField()
class Meta:
db_table = 'forummods'
class Forums(BaseModel):
catid = IntegerField()
description = TextField(null=True)
forder = IntegerField()
hidden = IntegerField()
lastpostdate = IntegerField()
lastpostid = IntegerField()
lastpostuser = IntegerField()
minpower = IntegerField()
minpowerreply = IntegerField()
minpowerthread = IntegerField()
numposts = IntegerField()
numthreads = IntegerField()
title = CharField()
class Meta:
db_table = 'forums'
class Guests(BaseModel):
bot = IntegerField()
date = IntegerField()
ip = CharField()
lastforum = IntegerField()
lasturl = CharField()
useragent = CharField()
class Meta:
db_table = 'guests'
class Ignoredforums(BaseModel):
fid = IntegerField()
uid = IntegerField()
class Meta:
db_table = 'ignoredforums'
class Ip2C(BaseModel):
cc = CharField(null=True)
ip_from = BigIntegerField()
ip_to = BigIntegerField()
class Meta:
db_table = 'ip2c'
class Ipbans(BaseModel):
date = IntegerField()
ip = CharField()
reason = CharField()
class Meta:
db_table = 'ipbans'
class Log(BaseModel):
date = IntegerField()
forum = IntegerField()
forum2 = IntegerField()
ip = CharField()
pm = IntegerField()
post = IntegerField()
text = CharField()
thread = IntegerField()
type = CharField()
user = IntegerField()
user2 = IntegerField()
class Meta:
db_table = 'log'
class Misc(BaseModel):
hotcount = IntegerField()
maxpostsday = IntegerField()
maxpostsdaydate = IntegerField()
maxpostshour = IntegerField()
maxpostshourdate = IntegerField()
maxusers = IntegerField()
maxusersdate = IntegerField()
maxuserstext = TextField(null=True)
milestone = TextField(null=True)
version = IntegerField()
views = IntegerField()
class Meta:
db_table = 'misc'
class Moodavatars(BaseModel):
mid = IntegerField()
name = CharField()
uid = IntegerField()
class Meta:
db_table = 'moodavatars'
class Notifications(BaseModel):
description = TextField(null=True)
link = IntegerField()
linklocation = CharField()
time = IntegerField()
title = CharField()
type = CharField()
uid = IntegerField()
class Meta:
db_table = 'notifications'
class Pmsgs(BaseModel):
date = IntegerField()
deleted = IntegerField()
drafting = IntegerField()
ip = CharField()
msgread = IntegerField()
userfrom = IntegerField()
userto = IntegerField()
class Meta:
db_table = 'pmsgs'
class PmsgsText(BaseModel):
pid = IntegerField()
text = TextField(null=True)
title = CharField()
class Meta:
db_table = 'pmsgs_text'
class Poll(BaseModel):
briefing = TextField(null=True)
closed = IntegerField()
doublevote = IntegerField()
question = CharField()
class Meta:
db_table = 'poll'
class PollChoices(BaseModel):
choice = CharField()
color = CharField()
poll = IntegerField()
class Meta:
db_table = 'poll_choices'
class Pollvotes(BaseModel):
choiceid = IntegerField()
poll = IntegerField()
user = IntegerField()
class Meta:
db_table = 'pollvotes'
class Postplusones(BaseModel):
post = IntegerField()
user = IntegerField()
class Meta:
db_table = 'postplusones'
class Posts(BaseModel):
currentrevision = IntegerField()
date = IntegerField()
deleted = IntegerField()
deletedby = IntegerField()
ip = CharField()
mood = IntegerField()
num = IntegerField()
options = IntegerField()
postplusones = IntegerField()
reason = CharField()
thread = IntegerField()
user = IntegerField()
class Meta:
db_table = 'posts'
class PostsText(BaseModel):
date = IntegerField()
pid = IntegerField(primary_key=True)
revision = IntegerField()
text = TextField(null=True)
user = IntegerField()
class Meta:
db_table = 'posts_text'
class Proxybans(BaseModel):
ip = CharField()
class Meta:
db_table = 'proxybans'
class Queryerrors(BaseModel):
cookie = TextField(null=True)
error = TextField(null=True)
get = TextField(null=True)
ip = CharField()
post = TextField(null=True)
query = TextField(null=True)
time = IntegerField()
user = IntegerField()
class Meta:
db_table = 'queryerrors'
class Reports(BaseModel):
hidden = IntegerField()
ip = CharField()
request = TextField(null=True)
severity = IntegerField()
text = CharField()
time = IntegerField()
user = IntegerField()
class Meta:
db_table = 'reports'
class Sessions(BaseModel):
autoexpire = IntegerField()
expiration = IntegerField()
id = CharField()
iplock = IntegerField()
iplockaddr = CharField()
lastip = CharField()
lasttime = IntegerField()
lasturl = CharField()
user = IntegerField()
class Meta:
db_table = 'sessions'
class Settings(BaseModel):
name = CharField()
plugin = CharField()
value = TextField(null=True)
class Meta:
db_table = 'settings'
class Smilies(BaseModel):
code = CharField()
image = CharField()
class Meta:
db_table = 'smilies'
class Threads(BaseModel):
closed = IntegerField()
date = IntegerField()
firstpostid = IntegerField()
forum = IntegerField()
icon = CharField()
lastpostdate = IntegerField()
lastposter = IntegerField()
lastpostid = IntegerField()
poll = IntegerField()
replies = IntegerField()
sticky = IntegerField()
title = CharField()
user = IntegerField()
views = IntegerField()
class Meta:
db_table = 'threads'
class Threadsread(BaseModel):
date = IntegerField()
thread = IntegerField()
class Meta:
db_table = 'threadsread'
class Uploader(BaseModel):
category = IntegerField()
date = IntegerField()
description = CharField()
downloads = IntegerField()
filename = CharField()
private = IntegerField()
user = IntegerField()
class Meta:
db_table = 'uploader'
class UploaderCategories(BaseModel):
description = TextField(null=True)
name = CharField()
ord = IntegerField()
class Meta:
db_table = 'uploader_categories'
class Usercomments(BaseModel):
cid = IntegerField()
date = IntegerField()
text = TextField(null=True)
uid = IntegerField()
class Meta:
db_table = 'usercomments'
class Usergroups(BaseModel):
inherits = IntegerField()
permissions = TextField(null=True)
title = CharField()
class Meta:
db_table = 'usergroups'
class Userpermissions(BaseModel):
permissions = TextField(null=True)
uid = IntegerField()
class Meta:
db_table = 'userpermissions'
class Users(BaseModel):
bio = TextField(null=True)
birthday = IntegerField()
blocklayouts = IntegerField()
color = CharField()
dateformat = CharField()
displayname = CharField()
email = CharField()
fontsize = IntegerField()
forbiddens = CharField()
globalblock = IntegerField()
hascolor = IntegerField()
homepagename = CharField()
homepageurl = CharField()
karma = IntegerField()
lastactivity = IntegerField()
lastforum = IntegerField()
lastip = CharField()
lastknownbrowser = TextField(null=True)
lastposttime = IntegerField()
lasturl = CharField()
location = CharField()
loggedin = IntegerField()
lostkey = CharField()
lostkeytimer = IntegerField()
minipic = CharField()
name = CharField()
newcomments = IntegerField()
password = CharField()
picture = CharField()
pluginsettings = TextField(null=True)
postheader = TextField(null=True)
postplusones = IntegerField()
postplusonesgiven = IntegerField()
posts = IntegerField()
postsperpage = IntegerField()
powerlevel = IntegerField()
pss = CharField()
rankset = CharField()
realname = CharField()
regdate = IntegerField()
sex = IntegerField()
showemail = IntegerField()
signature = TextField(null=True)
signsep = IntegerField()
tempbanpl = IntegerField()
tempbantime = BigIntegerField()
theme = CharField()
threadsperpage = IntegerField()
timeformat = CharField()
timezone = FloatField()
title = CharField()
usebanners = IntegerField()
class Meta:
db_table = 'users'
class Uservotes(BaseModel):
uid = IntegerField()
up = IntegerField()
voter = IntegerField()
class Meta:
db_table = 'uservotes'
class WikiPages(BaseModel):
flags = IntegerField()
id = CharField()
revision = IntegerField()
class Meta:
db_table = 'wiki_pages'
class WikiPagesText(BaseModel):
date = IntegerField()
id = CharField()
revision = IntegerField()
text = TextField(null=True)
user = IntegerField()
class Meta:
db_table = 'wiki_pages_text'