# By: Riasat Ullah
# This file contains custom renderers that can be used to parse data in views.

from rest_framework import parsers
from utils import logging
import ast
import json
import xmltodict


class PlainTextParser(parsers.BaseParser):
    media_type = 'text/plain'

    def parse(self, stream, media_type=None, renderer_context=None):
        try:
            return json.loads(stream.read().decode().replace('\\r\\n', ''))
        except Exception as e:
            logging.info('PlainTextParser failed - This is an internal error. Check file.')
            logging.exception(str(e))
            return ast.literal_eval(stream.read().decode().replace('\\r\\n', ''))


class XmlParser(parsers.BaseParser):
    media_type = 'text/xml'

    def parse(self, stream, media_type=None, renderer_context=None):
        try:
            return xmltodict.parse(stream.read().decode().replace('\\n', ''))
        except Exception as e:
            logging.info('XmlParser failed - This is an internal error. Check file.')
            logging.exception(str(e))
            return ast.literal_eval(stream.read().decode().replace('\\n', ''))
