Skip to content

Commit

Permalink
Merge pull request #76 from arsgeografica/master
Browse files Browse the repository at this point in the history
Python3-compatibility.
  • Loading branch information
rozza committed Dec 17, 2013
2 parents 89198ea + 2797edc commit e502699
Show file tree
Hide file tree
Showing 11 changed files with 47 additions and 16 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Expand Up @@ -4,6 +4,7 @@ services: mongodb
python:
- "2.6"
- "2.7"
- "3.3"
env:
- PYMONGO=dev MONGOENGINE=dev
- PYMONGO=dev MONGOENGINE=0.7.10
Expand Down
17 changes: 14 additions & 3 deletions flask_mongoengine/operation_tracker.py
Expand Up @@ -4,7 +4,10 @@
import copy
import sys
import os
import SocketServer
try:
import SocketServer
except ImportError:
import socketserver as SocketServer

import pymongo
import pymongo.collection
Expand Down Expand Up @@ -258,7 +261,12 @@ def _tidy_stacktrace():

# Check html templates
fnames = []
for i in xrange(100):
_range = None
if sys.version_info >= (3, 0):
_range = range(100)
else:
_range = xrange(100)
for i in _range:
try:
fname = sys._getframe(i).f_code.co_filename
if '.html' in fname:
Expand Down Expand Up @@ -294,6 +302,9 @@ def _tidy_stacktrace():
if not text:
text = ''
else:
text = unicode(''.join(text).strip(), errors="ignore")
if sys.version_info >= (3, 0):
text = ''.join(text).strip()
else:
text = unicode(''.join(text).strip(), errors="ignore")
trace.append((path, line_no, func_name, text, hidden))
return trace, internal
3 changes: 2 additions & 1 deletion flask_mongoengine/pagination.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
import math
import sys

from flask import abort

Expand Down Expand Up @@ -106,7 +107,7 @@ def iter_pages(self, left_edge=2, left_current=2,
{% endmacro %}
"""
last = 0
for num in xrange(1, self.pages + 1):
for num in range(1, self.pages + 1) if sys.version_info >= (3, 0) else xrange(1, self.pages + 1):
if num <= left_edge or \
(num > self.page - left_current - 1 and
num < self.page + right_current) or \
Expand Down
2 changes: 1 addition & 1 deletion flask_mongoengine/panels.py
Expand Up @@ -2,7 +2,7 @@

from flask_debugtoolbar.panels import DebugPanel
from jinja2 import PackageLoader, ChoiceLoader
import operation_tracker
from flask_mongoengine import operation_tracker

_ = lambda x: x

Expand Down
4 changes: 4 additions & 0 deletions flask_mongoengine/sessions.py
@@ -1,11 +1,15 @@
import datetime
import sys
import uuid

from flask.sessions import SessionInterface, SessionMixin
from werkzeug.datastructures import CallbackDict

__all__ = ("MongoEngineSession", "MongoEngineSessionInterface")

if sys.version_info >= (3, 0):
basestring = str


class MongoEngineSession(CallbackDict, SessionMixin):

Expand Down
6 changes: 5 additions & 1 deletion flask_mongoengine/wtf/fields.py
Expand Up @@ -3,6 +3,7 @@
"""
from gettext import gettext as _
import json
import sys

from wtforms import widgets
from wtforms.fields import SelectFieldBase, TextAreaField, StringField
Expand Down Expand Up @@ -168,4 +169,7 @@ class BinaryField(TextAreaField):

def process_formdata(self, valuelist):
if valuelist:
self.data = bin_type( valuelist[0] )
if sys.version_info >= (3, 0):
self.data = bin_type( valuelist[0], 'utf-8' )
else:
self.data = bin_type( valuelist[0] )
11 changes: 9 additions & 2 deletions flask_mongoengine/wtf/orm.py
@@ -1,6 +1,7 @@
"""
Tools for generating forms based on mongoengine Document schemas.
"""
import sys
import decimal
from bson import ObjectId
from operator import itemgetter
Expand Down Expand Up @@ -206,7 +207,10 @@ def coerce(self, field_type):
"DecimalField": decimal.Decimal,
"ObjectIdField": ObjectId
}
return coercions.get(field_type, unicode)
if sys.version_info >= (3, 0):
return coercions.get(field_type, str)
else:
return coercions.get(field_type, unicode)


def model_fields(model, only=None, exclude=None, field_args=None, converter=None):
Expand All @@ -222,7 +226,10 @@ def model_fields(model, only=None, exclude=None, field_args=None, converter=None
converter = converter or ModelConverter()
field_args = field_args or {}

names = ((k, v.creation_counter) for k, v in model._fields.iteritems())
if sys.version_info >= (3, 0):
names = ((k, v.creation_counter) for k, v in model._fields.items())
else:
names = ((k, v.creation_counter) for k, v in model._fields.iteritems())
field_names = map(itemgetter(0), sorted(names, key=itemgetter(1)))

if only:
Expand Down
6 changes: 3 additions & 3 deletions tests/test_basic_app.py
Expand Up @@ -75,17 +75,17 @@ def test_with_id(self):

resp = c.get('/show/%s/' % self.Todo.objects.first_or_404().id)
self.assertEqual(resp.status_code, 200)
self.assertEquals(resp.data, 'First Item\nThe text')
self.assertEquals(resp.data.decode('utf-8'), 'First Item\nThe text')

def test_basic_insert(self):
c = self.app.test_client()
c.post('/add', data={'title': 'First Item', 'text': 'The text'})
c.post('/add', data={'title': '2nd Item', 'text': 'The text'})
rv = c.get('/')
self.assertEquals(rv.data, 'First Item\n2nd Item')
self.assertEquals(rv.data.decode('utf-8'), 'First Item\n2nd Item')

def test_request_context(self):
with self.app.test_request_context():
todo = self.Todo(title='Test', text='test')
todo.save()
self.assertEqual(self.Todo.objects.count(), 1)
self.assertEqual(self.Todo.objects.count(), 1)
3 changes: 3 additions & 0 deletions tests/test_forms.py
Expand Up @@ -24,7 +24,10 @@ def setUp(self):
app = flask.Flask(__name__)
app.config['MONGODB_DB'] = self.db_name
app.config['TESTING'] = True
# For Flask-WTF < 0.9
app.config['CSRF_ENABLED'] = False
# For Flask-WTF >= 0.9
app.config['WTF_CSRF_ENABLED'] = False
self.app = app
self.db = MongoEngine()
self.db.init_app(app)
Expand Down
4 changes: 2 additions & 2 deletions tests/test_pagination.py
Expand Up @@ -31,7 +31,7 @@ def test_queryset_paginator(self):
class Post(db.Document):
title = db.StringField(required=True, max_length=200)

for i in xrange(42):
for i in range(42):
Post(title="post: %s" % i).save()

self.assertRaises(NotFound, Pagination, Post.objects, 0, 10)
Expand All @@ -58,7 +58,7 @@ class Post(db.Document):
comments = db.ListField(db.StringField())
comment_count = db.IntField()

comments = ["comment: %s" % i for i in xrange(42)]
comments = ["comment: %s" % i for i in range(42)]
post = Post(title="post has comments", comments=comments,
comment_count=len(comments)).save()

Expand Down
6 changes: 3 additions & 3 deletions tests/test_session.py
Expand Up @@ -43,15 +43,15 @@ def test_setting_session(self):
c = self.app.test_client()
resp = c.get('/')
self.assertEqual(resp.status_code, 200)
self.assertEquals(resp.data, 'hello session')
self.assertEquals(resp.data.decode('utf-8'), 'hello session')

resp = c.get('/check-session')
self.assertEqual(resp.status_code, 200)
self.assertEquals(resp.data, 'session: hello session')
self.assertEquals(resp.data.decode('utf-8'), 'session: hello session')

resp = c.get('/check-session-database')
self.assertEqual(resp.status_code, 200)
self.assertEquals(resp.data, 'sessions: 1')
self.assertEquals(resp.data.decode('utf-8'), 'sessions: 1')

if __name__ == '__main__':
unittest.main()

0 comments on commit e502699

Please sign in to comment.