Revision: 26505 http://sourceforge.net/p/gar/code/26505 Author: cgrzemba Date: 2019-01-25 12:26:38 +0000 (Fri, 25 Jan 2019) Log Message: ----------- add css styling and some extensions
Modified Paths: -------------- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/threads.json Added Paths: ----------- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/answer.html.tmpl csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/export-osqa-db.py csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_answer_html.py csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_quest_html.py csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/question.html.tmpl Removed Paths: ------------- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_html.py Added: csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/answer.html.tmpl =================================================================== --- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/answer.html.tmpl (rev 0) +++ csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/answer.html.tmpl 2019-01-25 12:26:38 UTC (rev 26505) @@ -0,0 +1,58 @@ +<link href="../../css/style.css" rel="stylesheet" type="text/css" media="all"> +<html> +<head> + <div id="logo"> + </div> +</head> +<body> +<div id="banner"> +<ul id="answ"> +<li id="answ"> +<a href="http://www.opencsw.org" title="OpenCSW Solaris packages">Home</a> +</li> +<li id="answ"> +<a href="http://www.opencsw.org/community" title="OpenCSW OSQA">Questions</a> +</li> +</ul> +</div> +<h1> +{{ title }} +</h1> +<p> +{{ body }} +</p> +<p> +asked: {{ added_at|datetimeformat }} +by: {{ username }} + +</p> +{% for com in comment %} +<hr /> +<p> +{{ com.username }} commented: +</p> +<p> +{{ com.body }} +</p> +{% endfor %} + +{% for ans in answer %} +<hr /> +<p> +{{ ans.username }} answers: +</p> +<p> +{{ ans.body }} +</p> +{% for com in ans.comment %} +<hr /> +<p> +{{ com.username }} commented: +</p> +<p> +{{ com.body }} +</p> +{% endfor %} +{% endfor %} +</body> +</html> Added: csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/export-osqa-db.py =================================================================== --- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/export-osqa-db.py (rev 0) +++ csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/export-osqa-db.py 2019-01-25 12:26:38 UTC (rev 26505) @@ -0,0 +1,60 @@ +import MySQLdb +import json +from datetime import date, datetime + +SPAMMERS = ['raggieapauly'] + +def json_serial(obj): + """JSON serializer for objects not serializable by default json code""" + + if isinstance(obj, (datetime, date)): + return obj.isoformat() + raise TypeError ("Type %s not serializable" % type(obj)) + +db = MySQLdb.connect(host="dbchbie01", # your host + user="osqacsw2_prod", # username + passwd="NoisHevryb", # password + db="osqacsw2_prod") # name of the database + +# Create a Cursor object to execute queries. +cur = db.cursor() +cur = db.cursor (MySQLdb.cursors.DictCursor) + +# Select data from table using SQL query. +cur.execute("select n.id, n.parent_id, n.abs_parent_id, a.username, u.real_name, n.node_type, n.title, n.body, n.added_at from forum_node n,forum_user u, auth_user a where n.author_id = u.user_ptr_id and n.author_id = a.id and a.is_active = 1;") + +# print the first and second columns + +questions = []; +answers = []; +comments = []; +for row in cur.fetchall() : + if row['username'] not in SPAMMERS: + if row['node_type'] == 'question': + row['answer'] = [] + row['comment'] = [] + questions.append(row) + elif row['node_type'] == 'answer': + answers.append(row) + elif row['node_type'] == 'comment': + comments.append(row) +for answer in answers: + try: + for q in questions: + if q['id'] == answer['abs_parent_id']: + answer['comment'] = [] + q['answer'].append(answer) + except IndexError as e: + import pdb; pdb.set_trace(); +for comment in comments: + try: + for a in answers: + if a['id'] == comment['parent_id']: + a['comment'].append(comment) + except IndexError as e: + import pdb; pdb.set_trace(); + +import pdb; pdb.set_trace() + +with open('/var/tmp/threads.json', 'w') as outfile: + json.dump(questions, outfile, default = json_serial) Added: csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_answer_html.py =================================================================== --- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_answer_html.py (rev 0) +++ csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_answer_html.py 2019-01-25 12:26:38 UTC (rev 26505) @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +import re +import os +import os.path +import json +import pprint +import datetime +from jinja2 import Template, environmentfilter, Environment, FileSystemLoader + +HTML_PATH="/home/cgrzemba/public_html/osqa-static" +ENCODING = 'utf-8' +SPAMMERS = ['maloriegrebetr'] + +@environmentfilter +def datetimeformat(env, date, fmt='%Y-%m-%d'): + date = datetime.datetime.strptime(date, "%Y-%m-%dT%H:%M:%S") + native = date.replace(tzinfo=None) + return native.strftime(fmt) + +def Slugify(s): + return '-'.join(x for x in re.findall('[0-9a-z_]*', s.lower()) if x) + +def WriteFile(root_dir, dir2, filename, content): + try: + os.makedirs(os.path.join(root_dir, dir2)) + except OSError as e: + if e.errno != 17: # path already exists + import pdb; pdb.set_trace() + + with open(os.path.join(root_dir, filename), 'w') as fd: + fd.write(content.encode(ENCODING)) + +def ProcessQuestion(question): + id = question['id'] + slug = Slugify(question['title']) + dir_name_2 = str(id) + '/' + slug + filename = dir_name_2 + '/index.html' + + env = Environment(loader=FileSystemLoader(searchpath="./")) + env.filters['datetimeformat'] = datetimeformat + tmpl = env.get_template('answer.html.tmpl') + html = tmpl.render(**question) + WriteFile(HTML_PATH, dir_name_2, filename, html) + + +def main(): + with open('threads.json') as fd: + questions = json.load(fd) + for question in questions: + if question['username'] not in SPAMMERS: + ProcessQuestion(question) + +if __name__ == '__main__': + main() Property changes on: csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_answer_html.py ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Deleted: csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_html.py =================================================================== --- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_html.py 2019-01-24 14:43:42 UTC (rev 26504) +++ csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_html.py 2019-01-25 12:26:38 UTC (rev 26505) @@ -1,62 +0,0 @@ -#!/usr/bin/env python - -import re -import os -import os.path -import json -import pprint -from jinja2 import Template - -QUESTION_TMPL = """ -<html> -<head> -{{ title }} -</head> -<body> -{{ body }} -<p> -by: {{ username }} -</p> -{% for ans in answer %} -<hr /> -<p> -{{ ans.username }} answers: -</p> -<p> -{{ ans.body }} -</p> -{% endfor %} -</body> -</html> -""" - -def Slugify(s): - return '-'.join(x for x in re.findall('[0-9a-z_]*', s.lower()) if x) - -def WriteFile(root_dir, dir2, filename, content): - try: - os.makedirs(os.path.join(root_dir, dir2)) - except OSError as e: - pass - with open(os.path.join(root_dir, filename), 'w') as fd: - fd.write(content) - -def ProcessQuestion(question): - id = question['id'] - slug = Slugify(question['title']) - dir_name_2 = str(id) + '/' + slug - filename = dir_name_2 + '/index.html' - - tmpl = Template(QUESTION_TMPL) - html = tmpl.render(**question) - WriteFile('/home/maciej/public_html/osqa-static', dir_name_2, filename, html) - - -def main(): - with open('threads.json') as fd: - questions = json.load(fd) - for question in questions: - ProcessQuestion(question) - -if __name__ == '__main__': - main() Added: csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_quest_html.py =================================================================== --- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_quest_html.py (rev 0) +++ csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_quest_html.py 2019-01-25 12:26:38 UTC (rev 26505) @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +import re +import os +import os.path +import json +import pprint +import datetime +from jinja2 import Template, environmentfilter, Environment, FileSystemLoader + +HTML_PATH="/home/cgrzemba/public_html/osqa-static" +filename = 'index.html' +ENCODING = 'utf-8' +SPAMMERS = ['maloriegrebetr'] + +@environmentfilter +def slugify(env, s): + return '-'.join(x for x in re.findall('[0-9a-z_]*', s.lower()) if x) + +def ProcessQuestion(questions): + env = Environment(loader=FileSystemLoader(searchpath="./")) + env.filters['slugify'] = slugify + tmpl = env.get_template('question.html.tmpl') + qd = {'questions': questions } + import pdb; pdb.set_trace() + html = tmpl.render(**qd) + with open(os.path.join(HTML_PATH, filename), 'w') as fd: + fd.write(html.encode(ENCODING)) + +def main(): + with open('threads.json') as fd: + questions = json.load(fd) + ProcessQuestion(questions) + +if __name__ == '__main__': + main() Property changes on: csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/generate_quest_html.py ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/question.html.tmpl =================================================================== --- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/question.html.tmpl (rev 0) +++ csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/question.html.tmpl 2019-01-25 12:26:38 UTC (rev 26505) @@ -0,0 +1,30 @@ +<link href="./css/style.css" rel="stylesheet" type="text/css" media="all"> +<html> +<head> + <div id="logo"> + </div> +</head> +<body> +<div id="banner"> +<ul id="answ"> +<li id="answ"> +<a href="http://www.opencsw.org" title="OpenCSW Solaris packages">Home</a> +</li> +<li id="answ"> +<a href="http://www.opencsw.org/community" title="OpenCSW OSQA">Questions</a> +</li> +</ul> +</div> +<h1> +OSQA Community questions +</h1> +</p> +<ul id="quest"> +{% for quest in questions %} +<li> +<a href={{ quest.id }}/{{ quest.title|slugify }}/index.html >{{ quest.title }}</a> +</li> +{% endfor %} +</ul> +</body> +</html> Modified: csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/threads.json =================================================================== --- csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/threads.json 2019-01-24 14:43:42 UTC (rev 26504) +++ csw/mgar/pkg/opencsw-manual/trunk/files/osqa-migration/threads.json 2019-01-25 12:26:38 UTC (rev 26505) @@ -1 +1 @@ @@ Diff output truncated at 100000 characters. @@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.