Skip to content

Commit

Permalink
Add Makefile
Browse files Browse the repository at this point in the history
  • Loading branch information
marsam committed Mar 15, 2013
1 parent d7e0547 commit 244c13e
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 84 deletions.
17 changes: 17 additions & 0 deletions Makefile
@@ -0,0 +1,17 @@

LIBS_DIR='libs/'


install_deps:
pip install --ignore-installed --target=${LIBS_DIR} -r requirements.txt

deploy: install_deps
appcfg.py update .

clean-pyc:
find . -name '*.pyc' -exec rm -f {} +

clean: clean-pyc
-rm -fr libs/*

.PHONY: libs deploy clean clean-pyc
Empty file added libs/.gitignore
Empty file.
128 changes: 44 additions & 84 deletions raequel.py
Expand Up @@ -6,104 +6,64 @@
__copyright__ = "Copyright (c) 2010-2012 Sebastian Oliva"
__license__ = "GNU AGPL 3.0"

#basic framework imports
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
#template support
from google.appengine.ext.webapp import template
from google.appengine.api import memcache
#imports for the app itself
import urllib2
try:
import simplejson as json
except ImportError:
import json
from BeautifulSoup import BeautifulSoup
import re


class DRAEResults(webapp.RequestHandler):
def fetch_query(self):
query = ""
fetchString = re.search("/w/(json|xml)/(.*)",self.request.path)
if (fetchString != None):
query = fetchString.group(2) #group(1) is either XML or JSON
else:
query = self.request.get('query')

return query
import os
import sys

def fetchResults(self):
query = self.fetch_query()
requestType = self.request.get('type', 0)
resultList = []
root_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(root_dir, 'libs'))

try:
page = urllib2.urlopen("http://lema.rae.es/drae/srv/search?type="+str(requestType)+"&val="+query)
soup = BeautifulSoup(page)
import re
import json

#for resu in soup.body.findAll("span",["eAcep", ""]):
for resu in soup.findAll("span","b"):
resultList.append(resu.getText().encode("utf-8"))
#resu.renderContents()
except:
resultList = []
import jinja2
import webapp2
from google.appengine.api import memcache

return resultList
from rae import Drae

class JSONResults(DRAEResults):
def get(self):
query = self.fetch_query()
json_results = memcache.get(query)
if not json_results:
resultList = self.fetchResults()
if resultList:
memcache.add(query, json_results)
json_results = json.dumps(resultList) #results in JSON
jinja_environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))

self.response.headers['Content-Type'] = 'application/json'
self.response.headers['Access-Control-Allow-Origin'] = '*'
self.response.headers['Access-Control-Allow-Methods'] = 'GET'
self.response.out.write(json_results)

class XMLResults(DRAEResults):
def get(self):
resultList = self.fetchResults()
def get_lemas(word):
lemas = memcache.get(u'{0}:lemas'.format(word))
if lemas is not None:
return json.loads(lemas)
else:
drae = Drae()
lemas = drae.search(word)
if not isinstance(lemas, dict): # don't cache errors
memcache.add(u'{0}:lemas'.format(word), json.dumps(lemas))
return lemas

#<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
#<definitions>
# <definition>asdf</definition>
# <definition>asdf</definition>
# </definition>

self.response.headers['Content-Type'] = 'text/xml'
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/html; charset=utf-8'
template = jinja_environment.get_template('index.html')
self.response.out.write(template.render({}))

self.response.out.write('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n')
self.response.out.write('<definitions>\n')
for define in resultList:
self.response.out.write(' <definition>'+define+'</definition>\n')

self.response.out.write('</definitions>\n')
class JsonResults(webapp2.RequestHandler):
def get(self):
palabra = self.request.get('query')
self.response.headers['Content-Type'] = 'application/json'
self.response.headers['Access-Control-Allow-Origin'] = '*'
self.response.headers['Access-Control-Allow-Methods'] = 'GET'
self.response.out.write(json.dumps(get_lemas(palabra)))


class MainPage(webapp.RequestHandler):
class XmlResults(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/html; charset=utf-8'
self.response.out.write(template.render("index.html",None))
#self.response.headers['Content-Type'] = 'text/plain'
#self.response.out.write('Hello, World!')

application = webapp.WSGIApplication(
[('/', MainPage),
('/json', JSONResults),
('/xml' , XMLResults ),
('/w/json/.*',JSONResults),
('/w/xml/.*',XMLResults)],
debug=True)
palabra = self.request.get('query')
self.response.headers['Content-Type'] = 'application/xml'
template = jinja_environment.get_template('results.xml')

def main():
run_wsgi_app(application)
self.response.out.write(template.render({'lemas': get_lemas(palabra)}))

if __name__ == "__main__":
main()

app = webapp2.WSGIApplication(
[('/', MainPage),
('/json', JsonResults),
('/xml', XmlResults),],
debug=True)
2 changes: 2 additions & 0 deletions requirements.txt
@@ -0,0 +1,2 @@
# Don't add --editable here: https://github.com/pypa/pip/issues/562
rae

0 comments on commit 244c13e

Please sign in to comment.