diff --git a/gluon/cache.py b/gluon/cache.py index 087fc6c7..24024caa 100644 --- a/gluon/cache.py +++ b/gluon/cache.py @@ -20,7 +20,6 @@ caching will be provided by the GAE memcache (see gluon.contrib.gae_memcache) """ import time -import shutil import thread import os import sys diff --git a/gluon/contrib/generics.py b/gluon/contrib/generics.py index e4fdd70b..abaa95f6 100644 --- a/gluon/contrib/generics.py +++ b/gluon/contrib/generics.py @@ -1,12 +1,8 @@ # fix response -import re import os -import cPickle -import gluon.serializers from gluon import current, HTTP from gluon.html import markmin_serializer, TAG, HTML, BODY, UL, XML, H1 -from gluon.contenttype import contenttype from gluon.contrib.fpdf import FPDF, HTMLMixin from gluon.sanitizer import sanitize from gluon.contrib.markmin.markmin2latex import markmin2latex diff --git a/gluon/contrib/redis_cache.py b/gluon/contrib/redis_cache.py index 4475a82b..4d4d4664 100644 --- a/gluon/contrib/redis_cache.py +++ b/gluon/contrib/redis_cache.py @@ -6,7 +6,10 @@ import redis from redis.exceptions import ConnectionError from gluon import current from gluon.cache import CacheAbstract -import cPickle as pickle +try: + import cPickle as pickle +except: + import pickle import time import re import logging @@ -165,7 +168,7 @@ class RedisClient(object): expireat = int(time.time() + time_expire) + 120 bucket_key = "%s:%s" % (cache_set_key, expireat / 60) value = f() - value_ = pickle.dumps(value) + value_ = pickle.dumps(value, pickle.HIGHEST_PROTOCOL) if time_expire == 0: time_expire = 1 self.r_server.setex(key, value_, time_expire) diff --git a/gluon/contrib/redis_session.py b/gluon/contrib/redis_session.py index d7bc419d..2789af33 100644 --- a/gluon/contrib/redis_session.py +++ b/gluon/contrib/redis_session.py @@ -3,12 +3,9 @@ Developed by niphlod@gmail.com """ import redis -from redis.exceptions import ConnectionError from gluon import current from gluon.storage import Storage -import cPickle as pickle import time -import re import logging import thread diff --git a/gluon/html.py b/gluon/html.py index 1a493a20..ee491479 100644 --- a/gluon/html.py +++ b/gluon/html.py @@ -21,7 +21,10 @@ import sanitizer import itertools import decoder import copy_reg -import cPickle +try: + import cPickle as pickle +except: + import pickle import marshal from HTMLParser import HTMLParser @@ -1242,13 +1245,13 @@ class CAT(DIV): def TAG_unpickler(data): - return cPickle.loads(data) + return pickle.loads(data) def TAG_pickler(data): d = DIV() d.__dict__ = data.__dict__ - marshal_dump = cPickle.dumps(d) + marshal_dump = pickle.dumps(d, pickle.HIGHEST_PROTOCOL) return (TAG_unpickler, (marshal_dump,)) @@ -2828,12 +2831,12 @@ class MARKMIN(XmlComponent): return self.xml() def ASSIGNJS(**kargs): - from serializers import json + from gluon.serializers import json s = "" for key, value in kargs.items(): s+='var %s = %s;\n' % (key, json(value)) return XML(s) - + if __name__ == '__main__': import doctest diff --git a/gluon/newcron.py b/gluon/newcron.py index 96e1e917..8e6497b9 100644 --- a/gluon/newcron.py +++ b/gluon/newcron.py @@ -21,7 +21,10 @@ import datetime import platform import portalocker import fileutils -import cPickle +try: + import cPickle as pickle +except: + import pickle from gluon.settings import global_settings logger = logging.getLogger("web2py.cron") @@ -139,7 +142,7 @@ class Token(object): ret = None portalocker.lock(self.master, portalocker.LOCK_EX) try: - (start, stop) = cPickle.load(self.master) + (start, stop) = pickle.load(self.master) except: (start, stop) = (0, 1) if startup or self.now - start > locktime: @@ -149,7 +152,7 @@ class Token(object): logger.warning('WEB2PY CRON: Stale cron.master detected') logger.debug('WEB2PY CRON: Acquiring lock') self.master.seek(0) - cPickle.dump((self.now, 0), self.master) + pickle.dump((self.now, 0), self.master) self.master.flush() finally: portalocker.unlock(self.master) @@ -166,10 +169,10 @@ class Token(object): portalocker.lock(self.master, portalocker.LOCK_EX) logger.debug('WEB2PY CRON: Releasing cron lock') self.master.seek(0) - (start, stop) = cPickle.load(self.master) + (start, stop) = pickle.load(self.master) if start == self.now: # if this is my lock self.master.seek(0) - cPickle.dump((self.now, time.time()), self.master) + pickle.dump((self.now, time.time()), self.master) portalocker.unlock(self.master) self.master.close() diff --git a/gluon/restricted.py b/gluon/restricted.py index bcb78163..de7d8afb 100644 --- a/gluon/restricted.py +++ b/gluon/restricted.py @@ -11,7 +11,10 @@ Restricted environment to execute application's code """ import sys -import cPickle +try: + import cPickle as pickle +except: + import pickle import traceback import types import os @@ -55,7 +58,7 @@ class TicketStorage(Storage): try: table = self._get_table(self.db, self.tablename, request.application) table.insert(ticket_id=ticket_id, - ticket_data=cPickle.dumps(ticket_data), + ticket_data=pickle.dumps(ticket_data, pickle.HIGHEST_PROTOCOL), created_datetime=request.now) self.db.commit() message = 'In FILE: %(layer)s\n\n%(traceback)s\n' @@ -68,7 +71,7 @@ class TicketStorage(Storage): def _store_on_disk(self, request, ticket_id, ticket_data): ef = self._error_file(request, ticket_id, 'wb') try: - cPickle.dump(ticket_data, ef) + pickle.dump(ticket_data, ef) finally: ef.close() @@ -103,13 +106,13 @@ class TicketStorage(Storage): except IOError: return {} try: - return cPickle.load(ef) + return pickle.load(ef) finally: ef.close() else: table = self._get_table(self.db, self.tablename, app) rows = self.db(table.ticket_id == ticket_id).select() - return cPickle.loads(rows[0].ticket_data) if rows else {} + return pickle.loads(rows[0].ticket_data) if rows else {} class RestrictedError(Exception): diff --git a/gluon/storage.py b/gluon/storage.py index 7bf1bf95..b8eba182 100644 --- a/gluon/storage.py +++ b/gluon/storage.py @@ -12,7 +12,10 @@ Provides: - Storage; like dictionary allowing also for `obj.foo` for `obj['foo']` """ -import cPickle +try: + import cPickle as pickle +except: + import pickle import copy_reg import gluon.portalocker as portalocker @@ -159,7 +162,7 @@ def load_storage(filename): fp = None try: fp = portalocker.LockedFile(filename, 'rb') - storage = cPickle.load(fp) + storage = pickle.load(fp) finally: if fp: fp.close() @@ -170,7 +173,7 @@ def save_storage(storage, filename): fp = None try: fp = portalocker.LockedFile(filename, 'wb') - cPickle.dump(dict(storage), fp) + pickle.dump(dict(storage), fp) finally: if fp: fp.close() diff --git a/gluon/tools.py b/gluon/tools.py index a1fada8e..fc63da2f 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -11,7 +11,10 @@ Auth, Mail, PluginManager and various utilities """ import base64 -import cPickle +try: + import cPickle as pickle +except: + import pickle import datetime import thread import logging @@ -3327,7 +3330,7 @@ class Auth(object): user = table_user(user_id) if not user: raise HTTP(401, "Not Authorized") - auth.impersonator = cPickle.dumps(session) + auth.impersonator = pickle.dumps(session, pickle.HIGHEST_PROTOCOL) auth.user.update( table_user._filter_fields(user, True)) self.user = auth.user @@ -3338,7 +3341,7 @@ class Auth(object): elif user_id in (0, '0'): if self.is_impersonating(): session.clear() - session.update(cPickle.loads(auth.impersonator)) + session.update(pickle.loads(auth.impersonator)) self.user = session.auth.user self.update_groups() self.run_login_onaccept() diff --git a/gluon/utils.py b/gluon/utils.py index 60a4ff02..914cb0cf 100644 --- a/gluon/utils.py +++ b/gluon/utils.py @@ -23,7 +23,6 @@ import logging import socket import base64 import zlib -import types _struct_2_long_long = struct.Struct('=QQ') @@ -160,7 +159,7 @@ def pad(s, n=32, padchar=' '): def secure_dumps(data, encryption_key, hash_key=None, compression_level=None): if not hash_key: hash_key = sha1(encryption_key).hexdigest() - dump = pickle.dumps(data) + dump = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) if compression_level: dump = zlib.compress(dump, compression_level) key = pad(encryption_key[:32])