From 9f299eb8e973c573b88fbd4fdc8ae27b155309ef Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Sun, 12 Jun 2016 00:40:35 -0400 Subject: [PATCH] amf rewriting: move to separate file, mark as experimental, and don't include as default (for now) --- pywb/rewrite/rewrite_amf.py | 52 ++++++++++++++++++++++++++++++ pywb/rewrite/rewrite_content.py | 57 ++------------------------------- pywb/webapp/replay_views.py | 4 +-- 3 files changed, 56 insertions(+), 57 deletions(-) create mode 100644 pywb/rewrite/rewrite_amf.py diff --git a/pywb/rewrite/rewrite_amf.py b/pywb/rewrite/rewrite_amf.py new file mode 100644 index 00000000..07a73470 --- /dev/null +++ b/pywb/rewrite/rewrite_amf.py @@ -0,0 +1,52 @@ +from io import BytesIO +from six.moves import zip +from pywb.rewrite.rewrite_content import RewriteContent + + +# ============================================================================ +# Expiermental: not fully tested +class RewriteContentAMF(RewriteContent): #pragma: no cover + def handle_custom_rewrite(self, text_type, status_headers, stream, env): + + if status_headers.get_header('Content-Type') == 'application/x-amf': + stream = self.rewrite_amf(stream, env) + + return (super(RewriteContentAMF, self). + handle_custom_rewrite(text_type, status_headers, stream, env)) + + def rewrite_amf(self, stream, env): + try: + from pyamf import remoting + + iobuff = BytesIO() + while True: + buff = stream.read() + if not buff: + break + iobuff.write(buff) + + iobuff.seek(0) + res = remoting.decode(iobuff) + + if env and env.get('pywb.inputdata'): + inputdata = env.get('pywb.inputdata') + + new_list = [] + + for src, target in zip(inputdata.bodies, res.bodies): + #print(target[0] + ' = ' + src[0]) + + #print('messageId => corrId ' + target[1].body.correlationId + ' => ' + src[1].body[0].messageId) + target[1].body.correlationId = src[1].body[0].messageId + + new_list.append((src[0], target[1])) + + res.bodies = new_list + + return BytesIO(remoting.encode(res).getvalue()) + + except Exception as e: + import traceback + traceback.print_exc() + print(e) + return stream diff --git a/pywb/rewrite/rewrite_content.py b/pywb/rewrite/rewrite_content.py index e9ad9fd0..93012d0f 100644 --- a/pywb/rewrite/rewrite_content.py +++ b/pywb/rewrite/rewrite_content.py @@ -4,9 +4,8 @@ import webencodings import yaml import re -from chardet.universaldetector import UniversalDetector -from io import BytesIO, BufferedReader -from six.moves import zip +#from chardet.universaldetector import UniversalDetector +from io import BytesIO from pywb.rewrite.header_rewriter import RewrittenStatusAndHeaders @@ -371,55 +370,3 @@ class RewriteContent(object): stream.close() -# ================================================================= -class RewriteContentAMF(RewriteContent): - def handle_custom_rewrite(self, text_type, status_headers, stream, env): - - if status_headers.get_header('Content-Type') == 'application/x-amf': - stream = self.rewrite_amf(stream, env) - - return (super(RewriteContentAMF, self). - handle_custom_rewrite(text_type, status_headers, stream, env)) - - def rewrite_amf(self, stream, env): - try: - from pyamf import remoting - - iobuff = BytesIO() - while True: - buff = stream.read() - if not buff: - break - iobuff.write(buff) - - iobuff.seek(0) - res = remoting.decode(iobuff) - - print('rewrite amf') - - print(env.get('pywb.inputdata')) - - if env and env.get('pywb.inputdata'): - inputdata = env.get('pywb.inputdata') - - new_list = [] - - for src, target in zip(inputdata.bodies, res.bodies): - print(target[0] + ' = ' + src[0]) - - print('messageId => corrId ' + target[1].body.correlationId + ' => ' + src[1].body[0].messageId) - target[1].body.correlationId = src[1].body[0].messageId - - new_list.append((src[0], target[1])) - - res.bodies = new_list - - return BytesIO(remoting.encode(res).getvalue()) - - except Exception as e: - import traceback - traceback.print_exc() - print(e) - return stream - - diff --git a/pywb/webapp/replay_views.py b/pywb/webapp/replay_views.py index 6af44ba3..7d95db1c 100644 --- a/pywb/webapp/replay_views.py +++ b/pywb/webapp/replay_views.py @@ -13,7 +13,7 @@ from pywb.utils.timeutils import timestamp_now from pywb.framework.wbrequestresponse import WbResponse from pywb.framework.memento import MementoResponse -from pywb.rewrite.rewrite_content import RewriteContentAMF +from pywb.rewrite.rewrite_content import RewriteContent from pywb.warc.recordloader import ArchiveLoadFailed from pywb.webapp.views import HeadInsertView @@ -40,7 +40,7 @@ class ReplayView(object): self.content_loader = content_loader framed = config.get('framed_replay') - self.content_rewriter = RewriteContentAMF(is_framed_replay=framed) + self.content_rewriter = RewriteContent(is_framed_replay=framed) self.head_insert_view = HeadInsertView.init_from_config(config)