def __init__(self, stream, fieldnames, encoding='utf-8', **kwds):
    """Initialzer.

    Args:
      stream: Stream to write to.
      fieldnames: Fieldnames to pass to the DictWriter.
      encoding: Desired encoding.
      kwds: Additional arguments to pass to the DictWriter.
    """

    writer = codecs.getwriter(encoding)



    if (writer is encodings.utf_8.StreamWriter or
        writer is encodings.ascii.StreamWriter or
        writer is encodings.latin_1.StreamWriter or
        writer is encodings.cp1252.StreamWriter):
      self.no_recoding = True
      self.encoder = codecs.getencoder(encoding)
      self.writer = csv.DictWriter(stream, fieldnames, **kwds)
    else:
      self.no_recoding = False
      self.encoder = codecs.getencoder('utf-8')
      self.queue = cStringIO.StringIO()
      self.writer = csv.DictWriter(self.queue, fieldnames, **kwds)
      self.stream = writer(stream)
Example #2
0
    def encode(self, irc, msg, args, encoding, text):
        """<encoding> <text>

        Returns an encoded form of the given text; the valid encodings are
        available in the documentation of the Python codecs module:
        <http://docs.python.org/library/codecs.html#standard-encodings>.
        """
        # Binary codecs are prefixed with _codec in Python 3
        if encoding in 'base64 bz2 hex quopri uu zlib':
            encoding += '_codec'
        if encoding.endswith('_codec'):
            text = text.encode()

        # Do the encoding
        try:
            encoder = codecs.getencoder(encoding)
        except LookupError:
            irc.errorInvalid(_('encoding'), encoding)
        text = encoder(text)[0]

        # If this is a binary codec, re-encode it with base64
        if encoding.endswith('_codec') and encoding != 'base64_codec':
            text = codecs.getencoder('base64_codec')(text)[0].decode()

        # Change result into a string
        if sys.version_info[0] < 3 and isinstance(text, unicode):
            text = text.encode('utf-8')
        elif sys.version_info[0] >= 3 and isinstance(text, bytes):
            text = text.decode()

        # Reply
        irc.reply(text.rstrip('\n'))
Example #3
0
def has_bom(content):
    """Check for `UTF8`, `UTF16`, and `UTF32` BOMs."""

    bom = None
    if content.startswith(codecs.BOM_UTF8):
        bom = Encoding('utf-8', codecs.BOM_UTF8)
    elif content == codecs.BOM_UTF32_BE:
        bom = Encoding('utf-32-be', codecs.BOM_UTF32_BE)
    elif content == codecs.BOM_UTF32_LE:
        bom = Encoding('utf-32-le', codecs.BOM_UTF32_LE)
    elif content == BOM_10646_UC4_3412:
        bom = Encoding(ENCODING_10646_UC4_3412, BOM_10646_UC4_3412)
    elif content == BOM_10646_UC4_2143:
        bom = Encoding(ENCODING_10646_UC4_2143, BOM_10646_UC4_2143)
    elif content.startswith(codecs.BOM_UTF16_BE):
        bom = Encoding('utf-16-be', codecs.BOM_UTF16_BE)
    elif content.startswith(codecs.BOM_UTF16_LE):
        bom = Encoding('utf-16-le', codecs.BOM_UTF16_LE)

    # It is doubtful we have an encoder that can handle these middle endian
    # encodings, but lets give it a try and default to bin if nothing is found.
    # Not sure who'd use these encodings anyways.
    if bom and bom.encode in (ENCODING_10646_UC4_2143, ENCODING_10646_UC4_3412):
        try:
            codecs.getencoder(bom.encode)
        except Exception:
            bom = Encoding('bin', None)

    return bom
Example #4
0
def encoded(u, encoding):
    """
    Encode string u (denoting it is expected to be in Unicode) if there's
    encoding to be done. Tries to mask the difference between Python 2 and 3,
    which have different models of string processing, and different codec APIs
    and quirks. Some Python 3 encoders further require ``bytes`` in, not
    ``str``. These are first encoded into utf-8, encoded, then decoded.
    """
    if not encoding:
        return u
    elif _PY3:
        try:
            return getencoder(encoding)(u)[0]
        except LookupError:
            name = encoding.replace('-', '')  # base-64 becomes base64 e.g.
            bytesout = getencoder(name + '_codec')(u.encode('utf-8'))[0]
            if name in set(['base64', 'hex', 'quopri', 'uu']):
                return bytesout.decode('utf-8')
            else:
                return bytesout

        # NB PY3 requires lower-level interface for many codecs. s.encode('utf-8')
        # works fine, but others do not. Some codecs convert bytes to bytes,
        # and are not properly looked up by nickname (e.g. 'base64'). These are
        # managed by first encoding into utf-8, then if it makes sense decoding
        # back into a string. The others are things like bz2 and zlib--binary
        # encodings that have little use to us here.

        # There are also be some slight variations in results that will make
        # testing more fun. Possibly related to adding or not adding a terminal
        # newline.
    else:
        # Python 2 may not have the best handling of Unicode, but by
        # by God its encode operations are straightforward!
        return u.encode(encoding)
Example #5
0
    def test_attach_as_body_and_html(self):
        import codecs
        from pyramid_mailer.message import Message
        from pyramid_mailer.message import Attachment

        charset = 'latin-1'
        text_encoded = b('LaPe\xf1a')
        text = text_encoded.decode(charset)
        text_html = '<p>' + text + '</p>'
        transfer_encoding = 'quoted-printable'
        body = Attachment(data=text,
                          transfer_encoding=transfer_encoding)
        html = Attachment(data=text_html,
                          transfer_encoding=transfer_encoding)
        msg = Message(subject="testing",
                      sender="*****@*****.**",
                      recipients=["*****@*****.**"],
                      body=body, html=html)
        message = msg.to_message()
        body_part, html_part = message.get_payload()
        self.assertEqual(
            body_part['Content-Type'], 'text/plain')
        self.assertEqual(
            body_part['Content-Transfer-Encoding'], transfer_encoding)
        self.assertEqual(body_part.get_payload(),
                         codecs.getencoder('quopri_codec')(
                             text.encode(charset))[0].decode('ascii'))
        self.assertEqual(
            html_part['Content-Type'], 'text/html')
        self.assertEqual(
            html_part['Content-Transfer-Encoding'], transfer_encoding)
        self.assertEqual(html_part.get_payload(),
                         codecs.getencoder('quopri_codec')(
                             text_html.encode(charset))[0].decode('ascii'))
Example #6
0
    def handlestory(self):
        try:
            # Unicode fun stuff
            self.codecs = ['utf-8', 'latin-1', 'niceutf-8']
            try:
                c = self.entryboxes['Encoding'].get()
                codecs.getencoder(c)
                self.codecs.insert(0,c)
            except LookupError:
                pass
   
            try:
                # Strip out all non-digit characters.
                self.story = int(re.sub(r'\D',"",self.entryboxes['Story ID'].get()))
            except ValueError:
                self.setstatus("Invalid Story ID", True)
                return



   
            self.setstatus("Retrieving story info")
            self.soups = {}
            source = self.retrieveChapter(1)
   
            self.soups[1] = self.makeSoup(source) # Fetch down the first chapter to extract metadata
            self.numchaps, self.title, self.author = self.extractStoryInfo(self.soups[1])
   
            self.labels['Title']['text'] = self.title
            self.labels['Author']['text'] = self.author
            self.labels['NumChaps']['text'] = self.numchaps
            self.entryboxes['Chapters']['state'] = NORMAL
            self.buttons['Chapters']['state'] = NORMAL
   
   
            self.entryboxes['Chapters'].delete(0,END)
            self.entryboxes['Directory'].delete(0,END)
            self.entryboxes['Directory']['state'] = DISABLED
            self.buttons['Directory']['state'] = DISABLED
                   
            self.completedshow()
            self.completedenable(False)        
            self.completedchecked(False)
            self.oneshotchecked(False)
   
       
            self.setstatus("Ready")
        except:
            builder = cStringIO.StringIO()
            builder.write("Platform: %s\nStory: %d\n\n" % (platform(), self.story))
           
            traceback.print_exc(file=builder)
            e = ExceptionBox(root, "Exception", builder.getvalue())
Example #7
0
 def test_utf_16_encode_decode(self):
     import codecs, sys
     x = '123abc'
     if sys.byteorder == 'big':
         assert codecs.getencoder('utf-16')(x) == (
                 b'\xfe\xff\x001\x002\x003\x00a\x00b\x00c', 6)
         assert codecs.getdecoder('utf-16')(
                 b'\xfe\xff\x001\x002\x003\x00a\x00b\x00c') == (x, 14)
     else:
         assert codecs.getencoder('utf-16')(x) == (
                 b'\xff\xfe1\x002\x003\x00a\x00b\x00c\x00', 6)
         assert codecs.getdecoder('utf-16')(
                 b'\xff\xfe1\x002\x003\x00a\x00b\x00c\x00') == (x, 14)
Example #8
0
  def SetCodepage(self, codepage):
    """Sets the codepage.

    Args:
      codepage (str): codepage.

    Raises:
      ValueError: if the codepage is not supported.
    """
    try:
      codecs.getencoder(codepage)
      self._codepage = codepage
    except LookupError:
      raise ValueError('Unsupported codepage: {0:s}'.format(codepage))
Example #9
0
 def reload_codecs():
     savvy_settings = sublime.load_settings("GitSavvy.sublime-settings")
     fallback_encoding = savvy_settings.get("fallback_encoding")
     try:
         import _multibytecodec, imp, codecs, encodings
         imp.reload(encodings)
         imp.reload(codecs)
         codecs.getencoder(fallback_encoding)
     except (ImportError, LookupError) as e:
         sublime.error_message(
             "You have enabled `load_additional_codecs` mode, but the "
             "`fallback_encoding` codec cannot load.  This probably means "
             "you don't have the Codecs33 package installed, or you've "
             "entered an unsupported encoding.")
Example #10
0
def writer(csvfile, encoding, errors='strict', dialect='excel', **kwds):
    recoder = codecs.StreamRecoder(csvfile,
                                   codecs.getencoder('undefined'),
                                   codecs.getdecoder('utf_8'),
                                   codecs.getreader('undefined'),
                                   codecs.getwriter(encoding),
                                   errors)
    if hasattr(csvfile, 'close'):
        stream = csvfile
    else:
        stream = None

    writer = csv.writer(recoder, dialect=dialect, **kwds)
    return csvwriter(stream, writer, codecs.getencoder('utf_8'), errors)
Example #11
0
 def quote_value(self, value):
     try:
         value = _sqlite3.adapt(value)
     except _sqlite3.ProgrammingError:
         pass
     # Manual emulation of SQLite parameter quoting
     if isinstance(value, type(True)):
         return str(int(value))
     elif isinstance(value, (Decimal, float)):
         return str(value)
     elif isinstance(value, six.integer_types):
         return str(value)
     elif isinstance(value, six.string_types):
         return "'%s'" % six.text_type(value).replace("\'", "\'\'")
     elif value is None:
         return "NULL"
     elif isinstance(value, (bytes, bytearray, six.memoryview)):
         # Bytes are only allowed for BLOB fields, encoded as string
         # literals containing hexadecimal data and preceded by a single "X"
         # character:
         # value = b'\x01\x02' => value_hex = b'0102' => return X'0102'
         value = bytes(value)
         hex_encoder = codecs.getencoder('hex_codec')
         value_hex, _length = hex_encoder(value)
         # Use 'ascii' encoding for b'01' => '01', no need to use force_text here.
         return "X'%s'" % value_hex.decode('ascii')
     else:
         raise ValueError("Cannot quote parameter value %r of type %s" % (value, type(value)))
Example #12
0
 def __initLocals__(self):
     # First, get the fields from the base class initialized:
     super(ActorObj2,self).__initLocals__()
     #
     # Next, initialize the special fields needed for this
     # particular kind of ActorObject, an ActorObj2:
     self.ucEncoder=codecs.getencoder("ascii")
Example #13
0
 def iter(self, fields, files):
     """
     fields is a sequence of (name, value) elements for regular form fields.
     files is a sequence of (name, filename, file-type) elements for data to be uploaded as files
     Yield body's chunk as bytes
     """
     encoder = codecs.getencoder('utf-8')
     for (key, value) in fields.items():
         key = self.u(key)
         yield encoder('--{}\r\n'.format(self.boundary))
         yield encoder(self.u('Content-Disposition: form-data; name="{}"\r\n').format(key))
         yield encoder('\r\n')
         if isinstance(value, int) or isinstance(value, float):
             value = str(value)
         yield encoder(self.u(value))
         yield encoder('\r\n')
     for (key, filename, fd) in files:
         key = self.u(key)
         filename = self.u(filename)
         yield encoder('--{}\r\n'.format(self.boundary))
         yield encoder(self.u('Content-Disposition: form-data; name="{}"; filename="{}"\r\n').format(key, filename))
         yield encoder('Content-Type: {}\r\n'.format(mimetypes.guess_type(filename)[0] or 'application/octet-stream'))
         yield encoder('\r\n')
         with fd:
             buff = fd.read()
             yield (buff, len(buff))
         yield encoder('\r\n')
     yield encoder('--{}--\r\n'.format(self.boundary))
Example #14
0
def hexencode(b):
    if sys.version_info[0] < 3:
        return b.encode('hex')
    else:
        import codecs
        coder = codecs.getencoder('hex_codec')
        return coder(b)[0]
Example #15
0
def transcode(backend_stream, backend_encoding, frontend_encoding,
              errors='strict'):
    enc = codecs.getencoder(frontend_encoding)
    dec = codecs.getdecoder(frontend_encoding)
    rd = codecs.getreader(backend_encoding)
    wr = codecs.getwriter(backend_encoding)
    return codecs.StreamRecoder(backend_stream, enc, dec, rd, wr, errors)
Example #16
0
 def iter(self, fields, files):
     """
     fields is a sequence of (name, value) elements for regular form fields.
     files is a sequence of (name, file-like) elements for data
     to be uploaded as files.
     Yield body's chunk as bytes
     """
     encoder = codecs.getencoder("utf-8")
     for key, value in fields.iteritems():
         key = self.u(key)
         yield encoder("--{}\r\n".format(self.boundary))
         yield encoder(self.u('Content-Disposition: form-data; name="{}"\r\n').format(key))
         yield encoder("\r\n")
         if isinstance(value, int) or isinstance(value, float):
             value = str(value)
         yield encoder(self.u(value))
         yield encoder("\r\n")
     for key, value in files.iteritems():
         key = self.u(key)
         filename = self.u(value.name)
         yield encoder("--{}\r\n".format(self.boundary))
         yield encoder(self.u('Content-Disposition: form-data; name="{}"; filename="{}"\r\n').format(key, filename))
         yield encoder(
             "Content-Type: {}\r\n".format(mimetypes.guess_type(filename)[0] or "application/octet-stream")
         )
         yield encoder("\r\n")
         buff = value.read()
         yield (buff, len(buff))
         yield encoder("\r\n")
     yield encoder("--{}--\r\b".format(self.boundary))
def writeDoc(x, h):
  f = open(x)
  t = f.read()
  f.close()

  doc = bp

  # Get the title
  xd = libxml2.parseFile(x)
  ctxt = xd.xpathNewContext()
  ctxt.xpathRegisterNs('html', 'http://www.w3.org/1999/xhtml')

  title = ctxt.xpathEvalExpression('string(/fvdoc//html:div[@id="message"])')

  title = trimWS(title)
  doc = doc.replace('<title></title>', '<title>' + title + '</title>')


  for (sec, txt) in secRe.findall(t):
    r = re.compile('<h2>' + sec + '</h2>\s*<div class="docbody">\s*()</div>', re.IGNORECASE)
    idx = r.search(doc).start(1)
    doc = doc[:idx] + txt + doc[idx:]

  c = codecs.getdecoder('utf-8')

  doc = c(doc)[0]

  c = codecs.getencoder('iso-8859-1')

  f = open(h, 'w')
  f.write(c(doc, 'xmlcharrefreplace')[0])
  f.close()
Example #18
0
 def quote_value(self, value):
     # The backend "mostly works" without this function and there are use
     # cases for compiling Python without the sqlite3 libraries (e.g.
     # security hardening).
     try:
         import sqlite3
         value = sqlite3.adapt(value)
     except ImportError:
         pass
     except sqlite3.ProgrammingError:
         pass
     # Manual emulation of SQLite parameter quoting
     if isinstance(value, type(True)):
         return str(int(value))
     elif isinstance(value, (Decimal, float, int)):
         return str(value)
     elif isinstance(value, str):
         return "'%s'" % value.replace("\'", "\'\'")
     elif value is None:
         return "NULL"
     elif isinstance(value, (bytes, bytearray, memoryview)):
         # Bytes are only allowed for BLOB fields, encoded as string
         # literals containing hexadecimal data and preceded by a single "X"
         # character:
         # value = b'\x01\x02' => value_hex = b'0102' => return X'0102'
         value = bytes(value)
         hex_encoder = codecs.getencoder('hex_codec')
         value_hex, _length = hex_encoder(value)
         # Use 'ascii' encoding for b'01' => '01', no need to use force_text here.
         return "X'%s'" % value_hex.decode('ascii')
     else:
         raise ValueError("Cannot quote parameter value %r of type %s" % (value, type(value)))
 def iter(self, fields, files):
     """
     fields is a dict of {name: value} for regular form fields.
     files is a dict of {name: (filename, file-type)} for data to be uploaded as files
     Yield body's chunk as bytes
     """
     encoder = codecs.getencoder('utf-8')
     for (key, value) in fields.items():
         key = self.u(key)
         yield encoder('--{}\r\n'.format(self.boundary))
         yield encoder(self.u('Content-Disposition: form-data; name="{}"\r\n').format(key))
         yield encoder('\r\n')
         if isinstance(value, int) or isinstance(value, float):
             value = str(value)
         yield encoder(self.u(value))
         yield encoder('\r\n')
     for (key, filename_and_f) in files.items():
         filename, f = filename_and_f
         key = self.u(key)
         filename = self.u(filename)
         yield encoder('--{}\r\n'.format(self.boundary))
         yield encoder(self.u('Content-Disposition: form-data; name="{}"; filename="{}"\r\n').format(key, filename))
         yield encoder('Content-Type: application/octet-stream\r\n')
         yield encoder('\r\n')
         data = f.read()
         yield (data, len(data))
         yield encoder('\r\n')
     yield encoder('--{}--\r\n'.format(self.boundary))
Example #20
0
 def recode(backend_stream):
     import codecs
     enc = codecs.getencoder(frontend_encoding)
     dec = codecs.getdecoder(frontend_encoding)
     rd = codecs.getreader(backend_encoding)
     wr = codecs.getwriter(backend_encoding)
     return codecs.StreamRecoder(backend_stream, enc, dec, rd, wr, errors)
Example #21
0
 def __get_geopoint(self):
     key = self.id + '_geopoint'
     if not self.__geopoint:
         self.__geopoint = memcache.get(key)
     if not self.__geopoint:
         # try to get geopoint through douban api
         service = DoubanService('04ea268dfa658bd80ebe73a9ef30a388')
         try:
             # don't know why, but failed to get event feed in GAE
             feed = service.GetEvent(self.url)
             for elem in feed.extension_elements:
                 if elem.tag == 'point':
                     self.__geopoint = [float(p) for p in elem.text.split()]
             memcache.set(key, self.__geopoint)
         except:
             pass
     if not self.__geopoint:
         # try to get geopoint through google map api
         location = codecs.getencoder('utf8')(self.location)[0]
         url = 'http://maps.google.com/maps/api/geocode/json?address=%s&sensor=false' % urllib.quote(location) 
         try:
             # Google map api might be blocked by GFW in China, try/except to ignore such download failure
             reader = urllib.urlopen(url)
             result = simplejson.load(reader)
             if 'OK' == result['status'] :
                 geopoint = result['results'][0]['geometry']['location']
                 self.__geopoint = (geopoint['lat'], geopoint['lng'])
             memcache.set(key, self.__geopoint)
         except:
             pass
     if not self.__geopoint:
         # failed to get geopoint
         self.__geopoint = (None, None)
     return self.__geopoint
Example #22
0
 def test_basics(self):
     s = "abc123"
     for encoding in all_string_encodings:
         (bytes, size) = codecs.getencoder(encoding)(s)
         self.assertEqual(size, len(s))
         (chars, size) = codecs.getdecoder(encoding)(bytes)
         self.assertEqual(chars, s, "%r != %r (encoding=%r)" % (chars, s, encoding))
Example #23
0
  def _GetUtf8Contents(self, file_name):
    """Check for errors in file_name and return a string for csv reader."""
    contents = self._FileContents(file_name)
    if not contents:  # Missing file
      return

    # Check for errors that will prevent csv.reader from working
    if len(contents) >= 2 and contents[0:2] in (codecs.BOM_UTF16_BE,
        codecs.BOM_UTF16_LE):
      self._problems.FileFormat("appears to be encoded in utf-16", (file_name, ))
      # Convert and continue, so we can find more errors
      contents = codecs.getdecoder('utf-16')(contents)[0].encode('utf-8')

    null_index = contents.find('\0')
    if null_index != -1:
      # It is easier to get some surrounding text than calculate the exact
      # row_num
      m = re.search(r'.{,20}\0.{,20}', contents, re.DOTALL)
      self._problems.FileFormat(
          "contains a null in text \"%s\" at byte %d" %
          (codecs.getencoder('string_escape')(m.group()), null_index + 1),
          (file_name, ))
      return

    # strip out any UTF-8 Byte Order Marker (otherwise it'll be
    # treated as part of the first column name, causing a mis-parse)
    contents = contents.lstrip(codecs.BOM_UTF8)
    return contents
Example #24
0
 def __init__(self, encoding, external_id=None, cmd_postfix="\n", suppress_echo=False):
     self.id = uuid4().hex
     self.decoder = getincrementaldecoder(encoding)()
     self.encoder = getencoder(encoding)
     self.external_id = external_id
     self.cmd_postfix = cmd_postfix
     self.suppress_echo = suppress_echo
Example #25
0
 def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
     # Redirect output to a queue
     self.queue = cStringIO.StringIO()
     self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
     self.stream = f
     self.encoder = codecs.getencoder(encoding)
     self.encoding = encoding
Example #26
0
 def start_document(self):
     params = self.output_parameters
     params.setdefault('media_type', 'text/plain')
     # the default is actually system-dependent; we'll use UTF-8
     encoding = params.setdefault('encoding', 'UTF-8')
     self._encode = codecs.getencoder(encoding)
     return
Example #27
0
    def iter(self, fields, files):
        """
        Yield bytes for body. See class description for usage.
        """
        encoder = codecs.getencoder('utf-8')
        for key, value in fields.items():
            yield encoder('--{}\r\n'.format(self.boundary))
            yield encoder(
                self.u('Content-Disposition: form-data; name="{}"\r\n').format(key))
            yield encoder('\r\n')
            if isinstance(value, int) or isinstance(value, float):
                value = str(value)
            yield encoder(self.u(value))
            yield encoder('\r\n')

        for key, value in files.items():
            if "filename" in value:
                filename = value.get("filename")
                content_disp = 'Content-Disposition: form-data;name=' + \
                               '"{}"; filename="{}"\r\n'.format(key, filename)
                content_type = 'Content-Type: {}\r\n'.format(
                    mimetypes.guess_type(filename)[0] or 'application/octet-stream')
                yield encoder('--{}\r\n'.format(self.boundary))
                yield encoder(content_disp)
                yield encoder(content_type)
            yield encoder('\r\n')
            if "content" in value:
                buff = value.get("content")
                yield (buff, len(buff))
            yield encoder('\r\n')

        yield encoder('--{}--\r\n'.format(self.boundary))
Example #28
0
    def _get_log_name_for_download(self, log_id):
        table = [
            22136, 52719, 55146, 42104,
            59591, 46934, 9248,  28891,
            49597, 52974, 62844, 4015,
            18311, 50730, 43056, 17939,
            64838, 38145, 27008, 39128,
            35652, 63407, 65535, 23473,
            35164, 55230, 27536, 4386,
            64920, 29075, 42617, 17294,
            18868, 2081
        ]

        code_pos = log_id.rindex("-") + 1
        code = log_id[code_pos:]
        if code[0] == 'x':
            a, b, c = struct.unpack(">HHH", bytes.fromhex(code[1:]))
            index = 0
            if log_id[:12] > "2010041111gm":
                x = int("3" + log_id[4:10])
                y = int(log_id[9])
                index = x % (33 - y)
            first = (a ^ b ^ table[index]) & 0xFFFF
            second = (b ^ c ^ table[index] ^ table[index + 1]) & 0xFFFF
            return log_id[:code_pos] + codecs.getencoder('hex_codec')(struct.pack(">HH", first, second))[0].decode('ASCII')
        else:
            return log_id
Example #29
0
def main():

    # Taking corrupted base64 decoded file from the user
    file_name=input("Enter the name of file you want to extract data from:  ")
    x=open(file_name, "rb")
    s=x.read()
    d=base64.standard_b64decode(s)
    hexlify=codecs.getencoder('hex')
    z=hexlify(d)[0]

    # Saving the decoded contents to a text file
    f=open("base64_decoded.txt","w")
    f.write(str(z))
    f.close()

    #Calling extract function
    a=extract("ffd8","ffd9","base64_decoded.txt","output1.txt")
    b=extract("255044462d312e", "2525454f46","base64_decoded.txt","output2.txt")
    c=extract("89504e470d0a1a0a","49454e44ae426082","base64_decoded.txt","output3.txt")
    d=extract("474946383961","00003b","base64_decoded.txt","output4.txt")
    e=extract("504b0304","504b0506","base64_decoded.txt","output5.txt")

    #a,b,c,d,e has extracted file in hex formats

    #Calling hex_to_ascii function and passing extension
    hex_to_ascii(a,"secret.jpeg","JPEG")
    hex_to_ascii(b,"Confidential.pdf","PDF")
    hex_to_ascii(c,"secure.png","PNG")
    hex_to_ascii(d,"clue.gif","GIF")
    hex_to_ascii(e,"hidden.docx","Docx")
Example #30
0
    def get(self, request, project_slug, dataset_slug, **kwargs):
        #models.Message

        # find our dataset & messages
        dataset = models.Dataset.objects.filter(slug=dataset_slug)
        messages = models.Message.objects.filter(dataset=dataset)

        # begin a streaming response
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename="%s-%s.csv"'%(project_slug, dataset_slug)

        # attach a csv writer to that
        csvwriter = csv.writer(response)
        csvwriter.writerow(["id", "time", "sender", "text", "codes_str"])

        # create a utf-8 encoder
        encoder = codecs.getencoder("utf-8")

        #step through messages
        for m in messages:

            # grab all instances attacahed to this 
            codes = project_models.CodeInstance.objects.filter(message=m)
            codes_str =  u"|".join([unicode(c.code.name) for c in codes]) if codes is not None and codes.count() > 0 else ""

            # create the column values for our row
            cols = [unicode(m.id), unicode(m.time), unicode(m.sender),  unicode(m.text), codes_str]

            # encode and write them
            encoded_cols = [encoder(c)[0] for c in cols]
            csvwriter.writerow(encoded_cols)

        # return the full response
        return response
Example #31
0
    def __init__(self,
                 url,
                 persistent=True,
                 timeout=None,
                 ssl_key=None,
                 ssl_cert=None,
                 post_headers={}):
        """
            url -- URI pointing to the SOLR instance. Examples:

                http://localhost:8080/solr
                https://solr-server/solr

                Your python install must be compiled with SSL support for the
                https:// schemes to work. (Most pre-packaged pythons are.)

            persistent -- Keep a persistent HTTP connection open.
                Defaults to true

            timeout -- Timeout, in seconds, for the server to response.
                By default, use the python default timeout (of none?)

            ssl_key, ssl_cert -- If using client-side key files for
                SSL authentication,  these should be, respectively,
                your PEM key file and certificate file

        """

        self.scheme, self.host, self.path = urlparse.urlparse(url, 'http')[:3]
        self.url = url

        assert self.scheme in ('http', 'https')

        self.persistent = persistent
        self.reconnects = 0
        self.timeout = timeout
        self.ssl_key = ssl_key
        self.ssl_cert = ssl_cert

        kwargs = {}

        if self.timeout and _python_version >= 2.6 and _python_version < 3:
            kwargs['timeout'] = self.timeout

        if self.scheme == 'https':
            self.conn = httplib.HTTPSConnection(self.host,
                                                key_file=ssl_key,
                                                cert_file=ssl_cert,
                                                **kwargs)
        else:
            self.conn = httplib.HTTPConnection(self.host, **kwargs)

        # this is int, not bool!
        self.batch_cnt = 0
        self.response_version = 2.2
        self.encoder = codecs.getencoder('utf-8')

        # Responses from Solr will always be in UTF-8
        self.decoder = codecs.getdecoder('utf-8')

        # Set timeout, if applicable.
        if self.timeout and _python_version < 2.6:
            self.conn.connect()
            if self.scheme == 'http':
                self.conn.sock.settimeout(self.timeout)
            elif self.scheme == 'https':
                self.conn.sock.sock.settimeout(self.timeout)

        self.xmlheaders = {'Content-Type': 'text/xml; charset=utf-8'}
        self.xmlheaders.update(post_headers)
        if not self.persistent:
            self.xmlheaders['Connection'] = 'close'

        self.form_headers = {
            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
        }

        if not self.persistent:
            self.form_headers['Connection'] = 'close'
Example #32
0
    def test_basic_spans_emit(self):
        hex_encoder = codecs.getencoder('hex')
        client = mock.Mock()
        client.Export.return_value = iter([1])

        span_data0 = span_data_module.SpanData(
            name="name0",
            context=span_context_module.SpanContext(
                trace_id='0e0c63257de34c92bf9efcd03927272e'),
            span_id='0e0c63257de34c92',
            parent_span_id=None,
            start_time=None,
            end_time=None,
            attributes=None,
            child_span_count=None,
            stack_trace=None,
            time_events=None,
            links=None,
            status=None,
            same_process_as_parent_span=None,
            span_kind=0)

        span_data1 = span_data_module.SpanData(
            name="name1",
            context=span_context_module.SpanContext(
                trace_id='1e0c63257de34c92bf9efcd03927272e'),
            span_id='1e0c63257de34c92',
            parent_span_id=None,
            start_time=None,
            end_time=None,
            attributes=None,
            child_span_count=None,
            stack_trace=None,
            time_events=None,
            links=None,
            status=None,
            same_process_as_parent_span=None,
            span_kind=0)

        exporter = TraceExporter(service_name=SERVICE_NAME,
                                 client=client,
                                 transport=MockTransport)

        exporter.emit([span_data0])

        actual_request0 = list(client.Export.call_args[0][0])[0]
        self.assertEqual(actual_request0.node, exporter.node)

        pb_span0 = actual_request0.spans[0]
        self.assertEqual(pb_span0.name.value, "name0")
        self.assertEqual(
            hex_encoder(pb_span0.trace_id)[0],
            b'0e0c63257de34c92bf9efcd03927272e')
        self.assertEqual(hex_encoder(pb_span0.span_id)[0], b'0e0c63257de34c92')

        exporter.emit([span_data1])

        self.assertEqual(len(client.Export.mock_calls), 2)
        actual_request1 = list(client.Export.call_args[0][0])[0]
        self.assertEqual(actual_request1.node, exporter.node)
        pb_span1 = actual_request1.spans[0]
        self.assertEqual(pb_span1.name.value, "name1")
        self.assertEqual(
            hex_encoder(pb_span1.trace_id)[0],
            b'1e0c63257de34c92bf9efcd03927272e')
        self.assertEqual(hex_encoder(pb_span1.span_id)[0], b'1e0c63257de34c92')
Example #33
0
        return enc, dec(bs)[0]
    except UnicodeDecodeError as ue:
        salvage = dec(bs, 'replace')[0]
        if 'start' in ue.__dict__:
            # XXX 'start' is in bytes, not characters. This is wrong for multibyte
            #  encodings
            pos = _position(salvage, ue.start)
        else:
            pos = None

        _logEvent(loggedEvents, logging.UnicodeError({"exception": ue}), pos)

        return enc, salvage


_encUTF8 = codecs.getencoder('UTF-8')


def asUTF8(x):
    """Accept a Unicode string and return a UTF-8 encoded string, with
  its encoding declaration removed, suitable for parsing."""
    x = removeDeclaration(str(x))
    return _encUTF8(x)[0]


if __name__ == '__main__':
    from sys import argv
    from os.path import isfile

    for x in argv[1:]:
        if isfile(x):
Example #34
0
 def _bytes_to_hex(bs):
     return codecs.getencoder('hex')(bs)[0]
Example #35
0
            encode=InvertCapsCodec().encode,
            decode=InvertCapsCodec().decode,
            incrementalencoder=InvertCapsIncrementalEncoder,
            incrementaldecoder=InvertCapsIncrementalDecoder,
            streamreader=InvertCapsStreamReader,
            streamwriter=InvertCapsStreamWriter,
        )
    return None


codecs.register(find_invertcaps)

if __name__ == '__main__':

    # Stateless encoder/decoder
    encoder = codecs.getencoder('invertcaps')
    text = 'abcDEF'
    encoded_text, consumed = encoder(text)
    print('Encoded "{}" to "{}", consuming {} characters'.format(
        text, encoded_text, consumed))

    # Stream writer
    import io
    buffer = io.BytesIO()
    writer = codecs.getwriter('invertcaps')(buffer)
    print('StreamWriter for io buffer: ')
    print('  writing "abcDEF"')
    writer.write('abcDEF')
    print('  buffer contents: ', buffer.getvalue())

    # Incremental decoder
Example #36
0
import codecs
import re
import unicodedata

_utf8_encoder = codecs.getencoder("utf-8")
_utf8_decoder = codecs.getdecoder("utf-8")
_unicode_normalize = unicodedata.normalize
_unicode_category = unicodedata.category

MATCH_OPEN_TAG = re.compile(r"\<([^\/]+?)\>")
MATCH_CLOSE_TAG = re.compile(r"\<(\/.+?)\>")


def enc_utf8(s):
    return _utf8_encoder(s)[0]


def dec_utf8(s):
    return _utf8_decoder(s)[0]


def normalize_token(t):
    key = t.replace(u"\u00A9", u"c")

    def is_not_mn(c):
        cat = _unicode_category(c)
        return cat != "Mn"

    return u"".join(c for c in _unicode_normalize(u"NFKD", key)
                    if is_not_mn(c))
Example #37
0
def hex(stuff):
    return codecs.getencoder('hex')(stuff)[0].decode("utf-8")
Example #38
0
def encrypt_file(file_name, key):
    with open(file_name, 'rb') as fo:
        plaintext = fo.read()
    enc = encrypt(plaintext, key)
    with open("enc_"+ file_name, 'wb') as fo:
        fo.write(enc)

#get (p,g,h)
file = open('PublicKey.txt', 'r');
p = int(file.readlines()[0])
file = open('PublicKey.txt', 'r');
g = int(file.readlines()[1])
file = open('PublicKey.txt', 'r');
h = int(file.readlines()[2])

hexlify = codecs.getencoder('hex')
key = hexlify(os.urandom(16))[0];


inpfile = input("Enter the name of the file you wish to encrypt along with the extension (For example: test.jpeg): ")
C1 =encrypt_file(inpfile, key) #add user input for asking the filename
Kdash = int(key, 16)
r = random.randint(0,p-2)
C2 = squareAndMultipy(g,r,p)
C3 = squareAndMultipy(h,r,p)
C3 = squareAndMultipy(Kdash*C3,1,p)


target = open("Cipher.txt",'w');
target.write("%s" %C2);
target.write("\n");
Example #39
0
	def run(self, edit, encoding=None, stamp=None, detect_on_fail=False):
		view = self.view
		if encoding:
			view.settings().set('force_encoding', encoding)
			origin_encoding = view.settings().get('origin_encoding')
			# convert only when ST can't load file properly
			run_convert = (view.encoding() == view.settings().get('fallback_encoding'))
			if origin_encoding:
				if origin_encoding == encoding:
					return
				view.set_scratch(False)
				run_convert = False
			init_encoding_vars(view, encoding, run_convert, stamp)
			return
		else:
			encoding = view.settings().get('origin_encoding')
		if not encoding:
			return
		file_name = view.file_name()
		if not (file_name and os.path.exists(file_name)):
			return
		# try fast decode
		fp = None
		try:
			fp = codecs.open(file_name, 'rb', encoding, errors='strict')
			contents = fp.read()
		except LookupError as e:
			try:
				# reload codecs
				import _multibytecodec, imp, encodings
				imp.reload(encodings)
				imp.reload(codecs)
				codecs.getencoder(encoding)
				view.run_command('reload_with_encoding', {'encoding': encoding})
			except (ImportError, LookupError) as e:
				need_codecs = (type(e) == ImportError)
				clean_encoding_vars(view)
				view.window().new_file().run_command('py_instruction', {'encoding': encoding, 'file_name': file_name, 'need_codecs': need_codecs})
			return
		except UnicodeDecodeError as e:
			if detect_on_fail:
				detect(view, file_name, get_setting(view, 'max_detect_lines'))
				return
			superset = SUPERSETS.get(encoding)
			if superset:
				print('Try encoding {0} instead of {1}.'.format(superset, encoding))
				init_encoding_vars(view, superset, True, stamp)
				return
			if CONFIRM_IS_AVAILABLE:
				if sublime.ok_cancel_dialog(u'Errors occurred while converting {0} with {1} encoding.\n\n'
						'WARNING: Continue to load this file using {1}, malformed data will be ignored.'
						'\n\nPress "Cancel" to choose another encoding manually.'.format
						(os.path.basename(file_name), encoding)):
					fp.close()
					fp = codecs.open(file_name, 'rb', encoding, errors='ignore')
					contents = fp.read()
				else:
					show_selection(view)
					return
			else:
				view.set_status('origin_encoding', u'Errors occurred while converting {0} with {1} encoding'.format
						(os.path.basename(file_name), encoding))
				show_selection(view)
				return
		finally:
			if fp:
				fp.close()
		encoding_cache.set(file_name, encoding)
		contents = contents.replace('\r\n', '\n').replace('\r', '\n')
		regions = sublime.Region(0, view.size())
		sel = view.sel()
		rs = [(view.rowcol(x.a), view.rowcol(x.b)) for x in sel]
		vp = view.viewport_position()
		view.set_viewport_position((0, 0), False)
		view.replace(edit, regions, contents)
		sel.clear()
		for x in rs:
			sel.add(self.find_region(x))
		view.set_viewport_position(vp, False)
		stamps[file_name] = stamp
		sublime.status_message('{0} -> UTF8'.format(encoding))
Example #40
0
import logging

# Import salt libs
import salt.utils
import salt.utils.files
from salt.utils.odict import OrderedDict
from salt._compat import string_io
from salt.ext.six import string_types

log = logging.getLogger(__name__)

#FIXME: we should make the default encoding of a .sls file a configurable
#       option in the config, and default it to 'utf-8'.
#
SLS_ENCODING = 'utf-8'  # this one has no BOM.
SLS_ENCODER = codecs.getencoder(SLS_ENCODING)


def compile_template(template,
                     renderers,
                     default,
                     blacklist,
                     whitelist,
                     saltenv='base',
                     sls='',
                     input_data='',
                     **kwargs):
    '''
    Take the path to a template and return the high data structure
    derived from the template.
    '''
Example #41
0
def rot13(input):
    s = input
    enc = codecs.getencoder("rot-13")
    os = enc(s)[0]

    return os
Example #42
0
def _string_escape(string):
    return "'''{0}'''".format(
        codecs.getencoder(_py_string_encoding)(string)[0].decode("ascii"))
# -*- coding: utf-8 -*-
from __future__ import print_function
import codecs
# import big5uao
import big5uao_3

# a煊b喆c凜凛
test = b'a\x95\x4Fb\x95\xEDc\xBB\xFE\x81\x60'

dec = codecs.getdecoder('big5uao')
enc = codecs.getencoder('big5uao')

d0, d1 = dec(test)
print(d0, d1)

test = b'\x95\x4F\x80\x80'
d0, d1 = dec(test, errors='replace')
print(d0, d1)

# 應是Big5+UAO的 0xa7 0x41 0xa6 0x6e
s = '你好'  # 2.x u'你好'      3.x '你好'

e = enc(s)
for b in e[0]:
    print('%x ' % b, end='')
print(e[1])

s = '\uEEEE\uDDDD'
e = enc(s, errors='strict')
for b in e[0]:
    print('%x ' % b, end='')
Example #44
0
    def __init__(self,
                 convert_unicode=False,
                 encoding='utf-8',
                 paramstyle=None,
                 dbapi=None,
                 implicit_returning=None,
                 supports_right_nested_joins=None,
                 case_sensitive=True,
                 supports_native_boolean=None,
                 empty_in_strategy='static',
                 label_length=None,
                 **kwargs):

        if not getattr(self, 'ported_sqla_06', True):
            util.warn("The %s dialect is not yet ported to the 0.6 format" %
                      self.name)

        self.convert_unicode = convert_unicode
        self.encoding = encoding
        self.positional = False
        self._ischema = None
        self.dbapi = dbapi
        if paramstyle is not None:
            self.paramstyle = paramstyle
        elif self.dbapi is not None:
            self.paramstyle = self.dbapi.paramstyle
        else:
            self.paramstyle = self.default_paramstyle
        if implicit_returning is not None:
            self.implicit_returning = implicit_returning
        self.positional = self.paramstyle in ('qmark', 'format', 'numeric')
        self.identifier_preparer = self.preparer(self)
        self.type_compiler = self.type_compiler(self)
        if supports_right_nested_joins is not None:
            self.supports_right_nested_joins = supports_right_nested_joins
        if supports_native_boolean is not None:
            self.supports_native_boolean = supports_native_boolean
        self.case_sensitive = case_sensitive

        self.empty_in_strategy = empty_in_strategy
        if empty_in_strategy == 'static':
            self._use_static_in = True
        elif empty_in_strategy in ('dynamic', 'dynamic_warn'):
            self._use_static_in = False
            self._warn_on_empty_in = empty_in_strategy == 'dynamic_warn'
        else:
            raise exc.ArgumentError("empty_in_strategy may be 'static', "
                                    "'dynamic', or 'dynamic_warn'")

        if label_length and label_length > self.max_identifier_length:
            raise exc.ArgumentError(
                "Label length of %d is greater than this dialect's"
                " maximum identifier length of %d" %
                (label_length, self.max_identifier_length))
        self.label_length = label_length

        if self.description_encoding == 'use_encoding':
            self._description_decoder = \
                processors.to_unicode_processor_factory(
                    encoding
                )
        elif self.description_encoding is not None:
            self._description_decoder = \
                processors.to_unicode_processor_factory(
                    self.description_encoding
                )
        self._encoder = codecs.getencoder(self.encoding)
        self._decoder = processors.to_unicode_processor_factory(self.encoding)
def hex_encode(data):
    return getencoder('hex')(data)[0].decode('ascii')
Example #46
0
import codecs
import hashlib
import random
import unittest

from mozharness.mozilla.merkle import InclusionProof, MerkleTree

decode_hex = codecs.getdecoder("hex_codec")
encode_hex = codecs.getencoder("hex_codec")

# Pre-computed tree on 7 inputs
#
#         ______F_____
#        /            \
#     __D__           _E_
#    /     \         /   \
#   A       B       C     |
#  / \     / \     / \    |
# 0   1   2   3   4   5   6
hash_fn = hashlib.sha256

data = [
    decode_hex("fbc459361fc111024c6d1fd83d23a9ff")[0],
    decode_hex("ae3a44925afec860451cd8658b3cadde")[0],
    decode_hex("418903fe6ef29fc8cab93d778a7b018b")[0],
    decode_hex("3d1c53c00b2e137af8c4c23a06388c6b")[0],
    decode_hex("e656ebd8e2758bc72599e5896be357be")[0],
    decode_hex("81aae91cf90be172eedd1c75c349bf9e")[0],
    decode_hex("00c262edf8b0bc345aca769e8733e25e")[0],
]
Example #47
0
 def __post_init__(self, encoding):
     self._encoder = codecs.getencoder(encoding)
Example #48
0
class Filter(callbacks.Plugin):
    """This plugin offers several commands which transform text in some way.
    It also provides the capability of using such commands to 'filter' the
    output of the bot -- for instance, you could make everything the bot says
    be in leetspeak, or Morse code, or any number of other kinds of filters.
    Not very useful, but definitely quite fun :)"""
    def __init__(self, irc):
        self.__parent = super(Filter, self)
        self.__parent.__init__(irc)
        self.outFilters = ircutils.IrcDict()

    def outFilter(self, irc, msg):
        if msg.command in ('PRIVMSG', 'NOTICE'):
            if msg.channel in self.outFilters:
                if ircmsgs.isAction(msg):
                    s = ircmsgs.unAction(msg)
                else:
                    s = msg.args[1]
                methods = self.outFilters[msg.channel]
                for filtercommand in methods:
                    myIrc = MyFilterProxy()
                    filtercommand(myIrc, msg, [s])
                    s = myIrc.s
                if ircmsgs.isAction(msg):
                    msg = ircmsgs.action(msg.args[0], s, msg=msg)
                else:
                    msg = ircmsgs.IrcMsg(msg=msg, args=(msg.args[0], s))
        return msg

    _filterCommands = [
        'jeffk', 'leet', 'rot13', 'hexlify', 'binary', 'scramble', 'morse',
        'reverse', 'colorize', 'squish', 'supa1337', 'stripcolor', 'aol',
        'rainbow', 'spellit', 'hebrew', 'undup', 'uwu', 'gnu', 'shrink',
        'uniud', 'capwords', 'caps', 'vowelrot', 'stripformatting'
    ]

    @internationalizeDocstring
    def outfilter(self, irc, msg, args, channel, command):
        """[<channel>] [<command>]

        Sets the outFilter of this plugin to be <command>.  If no command is
        given, unsets the outFilter.  <channel> is only necessary if the
        message isn't sent in the channel itself.
        """
        if command:
            if not self.isDisabled(command) and \
               command in self._filterCommands:
                method = getattr(self, command)
                self.outFilters.setdefault(channel, []).append(method)
                irc.replySuccess()
            else:
                irc.error(_('That\'s not a valid filter command.'))
        else:
            self.outFilters[channel] = []
            irc.replySuccess()

    outfilter = wrap(outfilter, [('checkChannelCapability', 'op'),
                                 additional('commandName')])

    _hebrew_remover = utils.str.MultipleRemover('aeiou')

    @internationalizeDocstring
    def hebrew(self, irc, msg, args, text):
        """<text>

        Removes all the vowels from <text>.  (If you're curious why this is
        named 'hebrew' it's because I (jemfinch) thought of it in Hebrew class,
        and printed Hebrew often elides the vowels.)
        """
        irc.reply(self._hebrew_remover(text))

    hebrew = wrap(hebrew, ['text'])

    def _squish(self, text):
        return text.replace(' ', '')

    @internationalizeDocstring
    def squish(self, irc, msg, args, text):
        """<text>

        Removes all the spaces from <text>.
        """
        irc.reply(self._squish(text))

    squish = wrap(squish, ['text'])

    @internationalizeDocstring
    def undup(self, irc, msg, args, text):
        """<text>

        Returns <text>, with all consecutive duplicated letters removed.
        """
        L = [text[0]]
        for c in text:
            if c != L[-1]:
                L.append(c)
        irc.reply(''.join(L))

    undup = wrap(undup, ['text'])

    @internationalizeDocstring
    def binary(self, irc, msg, args, text):
        """<text>

        Returns the binary representation of <text>.
        """
        L = []
        if minisix.PY3:
            if isinstance(text, str):
                bytes_ = text.encode()
            else:
                bytes_ = text
        else:
            if isinstance(text, unicode):
                text = text.encode()
            bytes_ = map(ord, text)
        for i in bytes_:
            LL = []
            assert i <= 256
            counter = 8
            while i:
                counter -= 1
                if i & 1:
                    LL.append('1')
                else:
                    LL.append('0')
                i >>= 1
            while counter:
                LL.append('0')
                counter -= 1
            LL.reverse()
            L.extend(LL)
        irc.reply(''.join(L))

    binary = wrap(binary, ['text'])

    def unbinary(self, irc, msg, args, text):
        """<text>

        Returns the character representation of binary <text>.
        Assumes ASCII, 8 digits per character.
        """
        text = self._squish(text)  # Strip spaces.
        try:
            L = [chr(int(text[i:(i + 8)], 2)) for i in range(0, len(text), 8)]
            irc.reply(''.join(L))
        except ValueError:
            irc.errorInvalid('binary string', text)

    unbinary = wrap(unbinary, ['text'])

    _hex_encoder = staticmethod(codecs.getencoder('hex_codec'))

    def hexlify(self, irc, msg, args, text):
        """<text>

        Returns a hexstring from the given string; a hexstring is a string
        composed of the hexadecimal value of each character in the string
        """
        irc.reply(self._hex_encoder(text.encode('utf8'))[0].decode('utf8'))

    hexlify = wrap(hexlify, ['text'])

    _hex_decoder = staticmethod(codecs.getdecoder('hex_codec'))

    @internationalizeDocstring
    def unhexlify(self, irc, msg, args, text):
        """<hexstring>

        Returns the string corresponding to <hexstring>.  Obviously,
        <hexstring> must be a string of hexadecimal digits.
        """
        try:
            irc.reply(
                self._hex_decoder(text.encode('utf8'))[0].decode(
                    'utf8', 'replace'))
        except TypeError:
            irc.error(_('Invalid input.'))

    unhexlify = wrap(unhexlify, ['text'])

    _rot13_encoder = codecs.getencoder('rot-13')

    @internationalizeDocstring
    def rot13(self, irc, msg, args, text):
        """<text>

        Rotates <text> 13 characters to the right in the alphabet.  Rot13 is
        commonly used for text that simply needs to be hidden from inadvertent
        reading by roaming eyes, since it's easily reversible.
        """
        if minisix.PY2:
            text = text.decode('utf8')
        irc.reply(self._rot13_encoder(text)[0])

    rot13 = wrap(rot13, ['text'])

    _leettrans = utils.str.MultipleReplacer(
        dict(list(zip('oOaAeElBTiIts', '004433187!1+5'))))
    _leetres = [
        (re.compile(r'\b(?:(?:[yY][o0O][oO0uU])|u)\b'), 'j00'),
        (re.compile(r'fear'), 'ph33r'),
        (re.compile(r'[aA][tT][eE]'), '8'),
        (re.compile(r'[aA][tT]'), '@'),
        (re.compile(r'[sS]\b'), 'z'),
        (re.compile(r'x'), '><'),
    ]

    @internationalizeDocstring
    def leet(self, irc, msg, args, text):
        """<text>

        Returns the l33tspeak version of <text>
        """
        for (r, sub) in self._leetres:
            text = re.sub(r, sub, text)
        text = self._leettrans(text)
        irc.reply(text)

    leet = wrap(leet, ['text'])

    _supaleetreplacers = [
        ('xX', '><'),
        ('kK', '|<'),
        ('rR', '|2'),
        ('hH', '|-|'),
        ('L', '|_'),
        ('uU', '|_|'),
        ('O', '()'),
        ('nN', '|\\|'),
        ('mM', '/\\/\\'),
        ('G', '6'),
        ('Ss', '$'),
        ('i', ';'),
        ('aA', '/-\\'),
        ('eE', '3'),
        ('t', '+'),
        ('T', '7'),
        ('l', '1'),
        ('D', '|)'),
        ('B', '|3'),
        ('I', ']['),
        ('Vv', '\\/'),
        ('wW', '\\/\\/'),
        ('d', 'c|'),
        ('b', '|>'),
        ('c', '<'),
        ('h', '|n'),
    ]

    @internationalizeDocstring
    def supa1337(self, irc, msg, args, text):
        """<text>

        Replies with an especially k-rad translation of <text>.
        """
        for (r, sub) in self._leetres:
            text = re.sub(r, sub, text)
        for (letters, replacement) in self._supaleetreplacers:
            for letter in letters:
                text = text.replace(letter, replacement)
        irc.reply(text)

    supa1337 = wrap(supa1337, ['text'])

    _scrambleRe = re.compile(r'(?:\b|(?![a-zA-Z]))([a-zA-Z])([a-zA-Z]*)'
                             r'([a-zA-Z])(?:\b|(?![a-zA-Z]))')

    @internationalizeDocstring
    def scramble(self, irc, msg, args, text):
        """<text>

        Replies with a string where each word is scrambled; i.e., each internal
        letter (that is, all letters but the first and last) are shuffled.
        """
        def _subber(m):
            L = list(m.group(2))
            random.shuffle(L)
            return '%s%s%s' % (m.group(1), ''.join(L), m.group(3))

        s = self._scrambleRe.sub(_subber, text)
        irc.reply(s)

    scramble = wrap(scramble, ['text'])

    _morseCode = {
        "A": ".-",
        "B": "-...",
        "C": "-.-.",
        "D": "-..",
        "E": ".",
        "F": "..-.",
        "G": "--.",
        "H": "....",
        "I": "..",
        "J": ".---",
        "K": "-.-",
        "L": ".-..",
        "M": "--",
        "N": "-.",
        "O": "---",
        "P": ".--.",
        "Q": "--.-",
        "R": ".-.",
        "S": "...",
        "T": "-",
        "U": "..-",
        "V": "...-",
        "W": ".--",
        "X": "-..-",
        "Y": "-.--",
        "Z": "--..",
        "0": "-----",
        "1": ".----",
        "2": "..---",
        "3": "...--",
        "4": "....-",
        "5": ".....",
        "6": "-....",
        "7": "--...",
        "8": "---..",
        "9": "----.",
        ".": ".-.-.-",
        ",": "--..--",
        ":": "---...",
        "?": "..--..",
        "'": ".----.",
        "-": "-....-",
        "/": "-..-.",
        '"': ".-..-.",
        "@": ".--.-.",
        "=": "-...-"
    }
    _revMorseCode = dict([(y, x) for (x, y) in _morseCode.items()])
    _unmorsere = re.compile('([.-]+)')

    @internationalizeDocstring
    def unmorse(self, irc, msg, args, text):
        """<Morse code text>

        Does the reverse of the morse command.
        """
        text = text.replace('_', '-')

        def morseToLetter(m):
            s = m.group(1)
            return self._revMorseCode.get(s, s)

        text = self._unmorsere.sub(morseToLetter, text)
        text = text.replace('  ', '\x00')
        text = text.replace(' ', '')
        text = text.replace('\x00', ' ')
        irc.reply(text)

    unmorse = wrap(unmorse, ['text'])

    @internationalizeDocstring
    def morse(self, irc, msg, args, text):
        """<text>

        Gives the Morse code equivalent of a given string.
        """
        L = []
        for c in text.upper():
            L.append(self._morseCode.get(c, c))
        irc.reply(' '.join(L))

    morse = wrap(morse, ['text'])

    @internationalizeDocstring
    def reverse(self, irc, msg, args, text):
        """<text>

        Reverses <text>.
        """
        irc.reply(text[::-1])

    reverse = wrap(reverse, ['text'])

    @internationalizeDocstring
    def _color(self, c, fg=None):
        if c == ' ':
            return c
        if fg is None:
            fg = random.randint(2, 15)
        fg = str(fg).zfill(2)
        return '\x03%s%s' % (fg, c)

    @internationalizeDocstring
    def colorize(self, irc, msg, args, text):
        """<text>

        Returns <text> with each character randomly colorized.
        """
        if minisix.PY2:
            text = text.decode('utf-8')
        text = ircutils.stripColor(text)
        L = [self._color(c) for c in text]
        if minisix.PY2:
            L = [c.encode('utf-8') for c in L]
        irc.reply('%s%s' % (''.join(L), '\x03'))

    colorize = wrap(colorize, ['text'])

    @internationalizeDocstring
    def rainbow(self, irc, msg, args, text):
        """<text>

        Returns <text> colorized like a rainbow.
        """
        if minisix.PY2:
            text = text.decode('utf-8')
        text = ircutils.stripColor(text)
        colors = utils.iter.cycle([
            '05', '04', '07', '08', '09', '03', '11', '10', '12', '02', '06',
            '13'
        ])
        L = [self._color(c, fg=next(colors)) for c in text]
        if minisix.PY2:
            L = [c.encode('utf-8') for c in L]
        irc.reply(''.join(L) + '\x03')

    rainbow = wrap(rainbow, ['text'])

    @wrap(['text'])
    def stripformatting(self, irc, msg, args, text):
        """<text>

        Strips bold, underline, and colors from <text>."""
        irc.reply(ircutils.stripFormatting(text))

    @internationalizeDocstring
    def stripcolor(self, irc, msg, args, text):
        """<text>

        Returns <text> stripped of all color codes.
        """
        irc.reply(ircutils.stripColor(text))

    stripcolor = wrap(stripcolor, ['text'])

    @internationalizeDocstring
    def aol(self, irc, msg, args, text):
        """<text>

        Returns <text> as if an AOL user had said it.
        """
        text = text.replace(' you ', ' u ')
        text = text.replace(' are ', ' r ')
        text = text.replace(' love ', ' <3 ')
        text = text.replace(' luv ', ' <3 ')
        text = text.replace(' too ', ' 2 ')
        text = text.replace(' to ', ' 2 ')
        text = text.replace(' two ', ' 2 ')
        text = text.replace('fore', '4')
        text = text.replace(' for ', ' 4 ')
        text = text.replace('be', 'b')
        text = text.replace('four', ' 4 ')
        text = text.replace(' their ', ' there ')
        text = text.replace(', ', ' ')
        text = text.replace(',', ' ')
        text = text.replace("'", '')
        text = text.replace('one', '1')
        smiley = utils.iter.choice(['<3', ':)', ':-)', ':D', ':-D'])
        text += smiley * 3
        irc.reply(text)

    aol = wrap(aol, ['text'])

    @internationalizeDocstring
    def jeffk(self, irc, msg, args, text):
        """<text>

        Returns <text> as if JeffK had said it himself.
        """
        def randomlyPick(L):
            return utils.iter.choice(L)

        def quoteOrNothing(m):
            return randomlyPick(['"', '']).join(m.groups())

        def randomlyReplace(s, probability=0.5):
            def f(m):
                if random.random() < probability:
                    return m.expand(s)
                else:
                    return m.group(0)

            return f

        def randomExclaims(m):
            if random.random() < 0.85:
                return ('!' * random.randrange(1, 5)) + m.group(1)
            else:
                return '.' + m.group(1)

        def randomlyShuffle(m):
            L = list(m.groups())
            random.shuffle(L)
            return ''.join(L)

        def lessRandomlyShuffle(m):
            L = list(m.groups())
            if random.random() < .4:
                random.shuffle(L)
            return ''.join(L)

        def randomlyLaugh(text, probability=.3):
            if random.random() < probability:
                if random.random() < .5:
                    insult = utils.iter.choice([
                        ' fagot1', ' fagorts', ' jerks', 'fagot'
                        ' jerk', 'dumbshoes', ' dumbshoe'
                    ])
                else:
                    insult = ''
                laugh1 = utils.iter.choice(['ha', 'hah', 'lol', 'l0l', 'ahh'])
                laugh2 = utils.iter.choice(['ha', 'hah', 'lol', 'l0l', 'ahh'])
                laugh1 = laugh1 * random.randrange(1, 5)
                laugh2 = laugh2 * random.randrange(1, 5)
                exclaim = utils.iter.choice(
                    ['!', '~', '!~', '~!!~~', '!!~', '~~~!'])
                exclaim += utils.iter.choice(
                    ['!', '~', '!~', '~!!~~', '!!~', '~~~!'])
                if random.random() < 0.5:
                    exclaim += utils.iter.choice(
                        ['!', '~', '!~', '~!!~~', '!!~', '~~~!'])
                laugh = ''.join([' ', laugh1, laugh2, insult, exclaim])
                text += laugh
            return text

        if random.random() < .03:
            irc.reply(randomlyLaugh('NO YUO', probability=1))
            return
        alwaysInsertions = {
            r'er\b': 'ar',
            r'\bthe\b': 'teh',
            r'\byou\b': 'yuo',
            r'\bis\b': 'si',
            r'\blike\b': 'liek',
            r'[^e]ing\b': 'eing',
        }
        for (r, s) in alwaysInsertions.items():
            text = re.sub(r, s, text)
        randomInsertions = {
            r'i': 'ui',
            r'le\b': 'al',
            r'i': 'io',
            r'l': 'll',
            r'to': 'too',
            r'that': 'taht',
            r'[^s]c([ei])': r'sci\1',
            r'ed\b': r'e',
            r'\band\b': 'adn',
            r'\bhere\b': 'hear',
            r'\bthey\'re': 'their',
            r'\bthere\b': 'they\'re',
            r'\btheir\b': 'there',
            r'[^e]y': 'ey',
        }
        for (r, s) in randomInsertions.items():
            text = re.sub(r, randomlyReplace(s), text)
        text = re.sub(r'(\w)\'(\w)', quoteOrNothing, text)
        text = re.sub(r'\.(\s+|$)', randomExclaims, text)
        text = re.sub(r'([aeiou])([aeiou])', randomlyShuffle, text)
        text = re.sub(r'([bcdfghkjlmnpqrstvwxyz])([bcdfghkjlmnpqrstvwxyz])',
                      lessRandomlyShuffle, text)
        text = randomlyLaugh(text)
        if random.random() < .4:
            text = text.upper()
        irc.reply(text)

    jeffk = wrap(jeffk, ['text'])

    # Keeping these separate so people can just replace the alphabets for
    # whatever their language of choice
    _spellLetters = {
        'a': _('ay'),
        'b': _('bee'),
        'c': _('see'),
        'd': _('dee'),
        'e': _('ee'),
        'f': _('eff'),
        'g': _('gee'),
        'h': _('aych'),
        'i': _('eye'),
        'j': _('jay'),
        'k': _('kay'),
        'l': _('ell'),
        'm': _('em'),
        'n': _('en'),
        'o': _('oh'),
        'p': _('pee'),
        'q': _('cue'),
        'r': _('arr'),
        's': _('ess'),
        't': _('tee'),
        'u': _('you'),
        'v': _('vee'),
        'w': _('double-you'),
        'x': _('ecks'),
        'y': _('why'),
        'z': _('zee')
    }
    for (k, v) in list(_spellLetters.items()):
        _spellLetters[k.upper()] = v
    _spellPunctuation = {
        '!': _('exclamation point'),
        '"': _('quote'),
        '#': _('pound'),
        '$': _('dollar sign'),
        '%': _('percent'),
        '&': _('ampersand'),
        '\'': _('single quote'),
        '(': _('left paren'),
        ')': _('right paren'),
        '*': _('asterisk'),
        '+': _('plus'),
        ',': _('comma'),
        '-': _('minus'),
        '.': _('period'),
        '/': _('slash'),
        ':': _('colon'),
        ';': _('semicolon'),
        '<': _('less than'),
        '=': _('equals'),
        '>': _('greater than'),
        '?': _('question mark'),
        '@': _('at'),
        '[': _('left bracket'),
        '\\': _('backslash'),
        ']': _('right bracket'),
        '^': _('caret'),
        '_': _('underscore'),
        '`': _('backtick'),
        '{': _('left brace'),
        '|': _('pipe'),
        '}': _('right brace'),
        '~': _('tilde')
    }
    _spellNumbers = {
        '0': _('zero'),
        '1': _('one'),
        '2': _('two'),
        '3': _('three'),
        '4': _('four'),
        '5': _('five'),
        '6': _('six'),
        '7': _('seven'),
        '8': _('eight'),
        '9': _('nine')
    }

    @internationalizeDocstring
    def spellit(self, irc, msg, args, text):
        """<text>

        Returns <text>, phonetically spelled out.
        """
        d = {}
        if self.registryValue('spellit.replaceLetters'):
            d.update(self._spellLetters)
        if self.registryValue('spellit.replaceNumbers'):
            d.update(self._spellNumbers)
        if self.registryValue('spellit.replacePunctuation'):
            d.update(self._spellPunctuation)


# A bug in unicode on OSX prevents me from testing this.
##         dd = {}
##         for (c, v) in d.items():
##             dd[ord(c)] = unicode(v + ' ')
##         irc.reply(unicode(text).translate(dd))
        out = minisix.io.StringIO()
        write = out.write
        for c in text:
            try:
                c = d[c]
                write(' ')
            except KeyError:
                pass
            write(c)
        irc.reply(out.getvalue().strip())

    spellit = wrap(spellit, ['text'])

    @internationalizeDocstring
    def gnu(self, irc, msg, args, text):
        """<text>

        Returns <text> as GNU/RMS would say it.
        """
        irc.reply(' '.join(['GNU/' + s for s in text.split()]))

    gnu = wrap(gnu, ['text'])

    @internationalizeDocstring
    def shrink(self, irc, msg, args, text):
        """<text>

        Returns <text> with each word longer than
        supybot.plugins.Filter.shrink.minimum being shrunken (i.e., like
        "internationalization" becomes "i18n").
        """
        L = []
        minimum = self.registryValue('shrink.minimum', msg.channel,
                                     irc.network)
        r = re.compile(r'[A-Za-z]{%s,}' % minimum)

        def shrink(m):
            s = m.group(0)
            return ''.join((s[0], str(len(s) - 2), s[-1]))

        text = r.sub(shrink, text)
        irc.reply(text)

    shrink = wrap(shrink, ['text'])

    # TODO: 2,4,;
    # XXX suckiest: B,K,P,Q,T
    # alternatives: 3: U+2107
    _uniudMap = {
        ' ': ' ',
        '0': '0',
        '@': '@',
        '!': '\u00a1',
        '1': '1',
        'A': '\u2200',
        '"': '\u201e',
        '2': '\u2681',
        'B': 'q',
        '#': '#',
        '3': '\u0190',
        'C': '\u0186',
        '$': '$',
        '4': '\u2683',
        'D': '\u15e1',
        '%': '%',
        '5': '\u1515',
        'E': '\u018e',
        '&': '\u214b',
        '6': '9',
        'F': '\u2132',
        "'": '\u0375',
        '7': 'L',
        'G': '\u2141',
        '(': ')',
        '8': '8',
        'H': 'H',
        ')': '(',
        '9': '6',
        'I': 'I',
        '*': '*',
        ':': ':',
        'J': '\u148b',
        '+': '+',
        ';': ';',
        'K': '\u029e',
        ',': '\u2018',
        '<': '>',
        'L': '\u2142',
        '-': '-',
        '=': '=',
        'M': '\u019c',
        '.': '\u02d9',
        '>': '<',
        'N': 'N',
        '/': '/',
        '?': '\u00bf',
        'O': 'O',
        'P': 'd',
        '`': '\u02ce',
        'p': 'd',
        'Q': 'b',
        'a': '\u0250',
        'q': 'b',
        'R': '\u1d1a',
        'b': 'q',
        'r': '\u0279',
        'S': 'S',
        'c': '\u0254',
        's': 's',
        'T': '\u22a5',
        'd': 'p',
        't': '\u0287',
        'U': '\u144e',
        'e': '\u01dd',
        '': 'n',
        'V': '\u039b',
        'f': '\u214e',
        'v': '\u028c',
        'W': 'M',
        'g': '\u0253',
        'w': '\u028d',
        'X': 'X',
        'h': '\u0265',
        'x': 'x',
        'Y': '\u2144',
        'i': '\u1d09',
        'y': '\u028e',
        'Z': 'Z',
        'j': '\u027f',
        'z': 'z',
        '[': ']',
        'k': '\u029e',
        '{': '}',
        '\\': '\\',
        'l': '\u05df',
        '|': '|',
        ']': '[',
        'm': '\u026f',
        '}': '{',
        '^': '\u2335',
        'n': '',
        '~': '~',
        '_': '\u203e',
        'o': 'o',
    }

    @internationalizeDocstring
    def uniud(self, irc, msg, args, text):
        """<text>

        Returns <text> rotated 180 degrees. Only really works for ASCII
        printable characters.
        """
        turned = []
        tlen = 0
        for c in text:
            if c in self._uniudMap:
                tmp = self._uniudMap[c]
                if not len(tmp):
                    tmp = '\ufffd'
                turned.append(tmp)
                tlen += 1
            elif c == '\t':
                tablen = 8 - tlen % 8
                turned.append(' ' * tablen)
                tlen += tablen
            elif ord(c) >= 32:
                turned.append(c)
                tlen += 1
        s = '%s \x02 \x02' % ''.join(reversed(turned))
        irc.reply(s)

    uniud = wrap(uniud, ['text'])

    def capwords(self, irc, msg, args, text):
        """<text>

        Capitalises the first letter of each word.
        """
        text = string.capwords(text)
        irc.reply(text)

    capwords = wrap(capwords, ['text'])

    def caps(self, irc, msg, args, text):
        """<text>

        EVERYONE LOVES CAPS LOCK.
        """
        irc.reply(text.upper())

    caps = wrap(caps, ['text'])

    _vowelrottrans = utils.str.MultipleReplacer(
        dict(list(zip('aeiouAEIOU', 'eiouaEIOUA'))))

    def vowelrot(self, irc, msg, args, text):
        """<text>

        Returns <text> with vowels rotated
        """
        text = self._vowelrottrans(text)
        irc.reply(text)

    vowelrot = wrap(vowelrot, ['text'])

    _uwutrans = utils.str.MultipleReplacer(dict(list(zip('lrLR', 'wwWW'))))

    def uwu(self, irc, msg, args, text):
        """<text>

        Returns <text> in uwu-speak.
        """
        text = self._uwutrans(text)
        text += random.choice([''] * 10 + [' uwu', ' UwU', ' owo', ' OwO'])
        irc.reply(text)

    uwu = wrap(uwu, ['text'])
Example #49
0
def migrate_users_from_SKForum(request=None):
    #if not request.user.is_superuser:
    #raise Exception('super user specific action')

    cursor = get_cursor()
    hex = codecs.getencoder('hex')
    latin1 = codecs.getdecoder('latin1')

    everyone = get_everyone_group()

    cursor.execute(
        'select id, name, password, realname, SecretEmail, PublicEmail, email, ICQ, telephone, mobilephone, address, other, birthdate from users where id != 1'
    )
    users = cursor.fetchall()
    for user in users:
        u = User(id=user[0],
                 username=fix_string(user[1]),
                 email=user[4],
                 is_staff=False,
                 is_superuser=False)

        if u.email == None:
            u.email = user[5]
        if u.email == None:
            u.email = user[6]

        hexpassword = hex(base64.b64decode(user[2]))
        if hexpassword[1] > 18:
            u.password = "******" + hexpassword[0]
        else:
            u.password = "******"

        realname = user[3].rsplit(None, 1)
        if len(realname) >= 1:
            u.first_name = fix_string(realname[0])
        if u.first_name == None:
            u.first_name = ''
        if len(realname) >= 2:
            u.last_name = fix_string(realname[1])
        if u.last_name == None:
            u.last_name = ''

        u.save()

        # display name 1
        #d = Detail(name='display name', value=fix_string(user[1]), user=u)
        #d.save()

        def add_detail(object, name):
            if object != None and object != '' and object != 'null':
                d = Detail(name=name, value=fix_string(object), user=u)
                if d.value != None:
                    d.save()

        add_detail(user[5], 'public email')
        add_detail(user[6], 'protected email')
        add_detail(user[7], 'ICQ')
        add_detail(user[8], 'telephone')
        add_detail(user[9], 'mobilephone')
        add_detail(user[10], 'address')
        add_detail(user[11], 'other')

        # birthdate 12
        if user[12] != None and user[12] != '' and user[12] != 'null':
            m = MetaUser(user=u, birthday=user[12])
            m.save()

    db.close()
Example #50
0
#!/usr/bin/env python
# MIME Header Parsing - Chapter 9
# mime_parse_headers.py
# This program requires Python 2.2.2 or above

import sys, email, codecs
from email import Header

msg = email.message_from_file(sys.stdin)
for header, value in msg.items():
    headerparts = Header.decode_header(value)
    headerval = []
    for part in headerparts:
        data, charset = part
	if charset is None:
	    charset = 'ascii'
	dec = codecs.getdecoder(charset)
	enc = codecs.getencoder('iso-8859-1')
	data = enc(dec(data)[0])[0]
	headerval.append(data)
    print "%s: %s" % (header, " ".join(headerval))

Example #51
0

class InvalidRegistryValue(RegistryException):
    pass


class NonExistentRegistryEntry(RegistryException, AttributeError):
    # If we use hasattr() on a configuration group/value, Python 3 calls
    # __getattr__ and looks for an AttributeError, so __getattr__ has to
    # raise an AttributeError if a registry entry does not exist.
    pass


ENCODING = 'string_escape' if minisix.PY2 else 'unicode_escape'
decoder = codecs.getdecoder(ENCODING)
encoder = codecs.getencoder(ENCODING)

if hasattr(time, 'monotonic'):
    monotonic_time = time.monotonic
else:
    # fallback for python < 3.3
    monotonic_time = time.time

_cache = utils.InsensitivePreservingDict()
_lastModified = 0


def open_registry(filename, clear=False):
    """Initializes the module by loading the registry file into memory."""
    global _lastModified
    if clear:
Example #52
0
def encoded(enc, txt=docText):
    return codecs.getencoder(enc)(txt, 'xmlcharrefreplace')[0]
Example #53
0
    def __init__(self,
                 url,
                 persistent=True,
                 timeout=None,
                 ssl_key=None,
                 ssl_cert=None,
                 http_user=None,
                 http_pass=None,
                 post_headers={},
                 max_retries=3,
                 debug=False):
        """
            url -- URI pointing to the Solr instance. Examples:

                http://localhost:8080/solr
                https://solr-server/solr

                Your python install must be compiled with SSL support for the
                https:// schemes to work. (Most pre-packaged pythons are.)

            persistent -- Keep a persistent HTTP connection open.
                Defaults to true

            timeout -- Timeout, in seconds, for the server to response.
                By default, use the python default timeout (of none?)

            ssl_key, ssl_cert -- If using client-side key files for
                SSL authentication,  these should be, respectively,
                your PEM key file and certificate file.

            http_user, http_pass -- If given, include HTTP Basic authentication 
                in all request headers.

        """

        self.scheme, self.host, self.path = urlparse.urlparse(url, 'http')[:3]
        self.url = url

        assert self.scheme in ('http', 'https')

        self.persistent = persistent
        self.reconnects = 0
        self.timeout = timeout
        self.ssl_key = ssl_key
        self.ssl_cert = ssl_cert
        self.max_retries = int(max_retries)

        assert self.max_retries >= 0

        kwargs = {}

        if self.timeout and _python_version >= 2.6 and _python_version < 3:
            kwargs['timeout'] = self.timeout

        if self.scheme == 'https':
            self.conn = httplib.HTTPSConnection(self.host,
                                                key_file=ssl_key,
                                                cert_file=ssl_cert,
                                                **kwargs)
        else:
            self.conn = httplib.HTTPConnection(self.host, **kwargs)

        self.response_version = 2.2
        self.encoder = codecs.getencoder('utf-8')

        # Responses from Solr will always be in UTF-8
        self.decoder = codecs.getdecoder('utf-8')

        # Set timeout, if applicable.
        if self.timeout and _python_version < 2.6:
            self.conn.connect()
            if self.scheme == 'http':
                self.conn.sock.settimeout(self.timeout)
            elif self.scheme == 'https':
                self.conn.sock.sock.settimeout(self.timeout)

        self.xmlheaders = {'Content-Type': 'text/xml; charset=utf-8'}
        self.xmlheaders.update(post_headers)
        if not self.persistent:
            self.xmlheaders['Connection'] = 'close'

        self.form_headers = {
            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
        }

        if http_user is not None and http_pass is not None:
            http_auth = http_user + ':' + http_pass
            http_auth = 'Basic ' + http_auth.encode('base64').strip()
            self.auth_headers = {'Authorization': http_auth}
        else:
            self.auth_headers = {}

        if not self.persistent:
            self.form_headers['Connection'] = 'close'

        self.debug = debug
        self.select = SearchHandler(self, "/select")
Example #54
0
try:
    import simplejson as json
except ImportError:
    import json
import cPickle as pickle
import glob
from urlparse import urlparse as stdlib_urlparse, ParseResult
import itertools

import eventlet
from eventlet import GreenPool, sleep, Timeout
from eventlet.green import socket, threading
import netifaces
import codecs
utf8_decoder = codecs.getdecoder('utf-8')
utf8_encoder = codecs.getencoder('utf-8')

from logging.handlers import SysLogHandler
import logging

# setup notice level logging

NOTICE = 25
logging._levelNames[NOTICE] = 'NOTICE'
SysLogHandler.priority_map['NOTICE'] = 'notice'

# These are lazily pulled from libc elsewhere

_sys_fsync = None
_sys_fallocate = None
_posix_fadvise = None
Example #55
0
    def _getDataIo(self, file):
        """
        This gets a file either url or local file and defiens what the format is as well as dialect
        :param file: file path or url
        :return: data_io, format, dialect
        """

        ############
        # get file as io object
        ############

        data = BytesIO()

        # get data from either url or file load in memory
        if file.startswith('http:') or file.startswith('https:'):
            r = requests.get(file, stream=True)
            if r.status_code == 200:
                for chunk in r:
                    data.write(chunk)
            data.seek(0)

        # else read file from local file system
        else:
            try:
                data = open(file, 'rb')
            except Exception as e:
                error = 'Could not load file, possible exception : {exception}'.format(
                    exception=e)
                log.error(error)
                raise ValueError(error)

        dialect = None

        ############
        # check for file type
        ############

        # try to guess if its an excel file
        xlsx_sig = b'\x50\x4B\x05\06'
        xlsx_sig2 = b'\x50\x4B\x03\x04'
        xls_sig = b'\x09\x08\x10\x00\x00\x06\x05\x00'

        # different whence, offset, size for different types
        excel_meta = [('xls', 0, 512, 8), ('xlsx', 2, -22, 4)]

        for filename, whence, offset, size in excel_meta:

            try:
                data.seek(offset, whence)  # Seek to the offset.
                bytes = data.read(
                    size)  # Capture the specified number of bytes.
                data.seek(0)
                codecs.getencoder('hex')(bytes)

                if bytes == xls_sig:
                    return data, 'xls', dialect
                elif bytes == xlsx_sig:
                    return data, 'xlsx', dialect

            except:
                data.seek(0)

        # if not excel it can be a json file or a CSV, convert from binary to stringio

        byte_str = data.read()
        # Move it to StringIO
        try:
            # Handle Microsoft's BOM "special" UTF-8 encoding
            if byte_str.startswith(codecs.BOM_UTF8):
                data = StringIO(byte_str.decode('utf-8-sig'))
            else:
                data = StringIO(byte_str.decode('utf-8'))

        except:
            log.error(traceback.format_exc())
            log.error('Could not load into string')

        # see if its JSON
        buffer = data.read(100)
        data.seek(0)
        text = buffer.strip()
        # analyze first n characters
        if len(text) > 0:
            text = text.strip()
            # it it looks like a json, then try to parse it
            if text.startswith('{') or text.startswith('['):
                try:
                    json.loads(data.read())
                    data.seek(0)
                    return data, 'json', dialect
                except:
                    data.seek(0)
                    return data, None, dialect

        # lets try to figure out if its a csv
        try:
            data.seek(0)
            first_few_lines = []
            i = 0
            for line in data:
                if line in ['\r\n', '\n']:
                    continue
                first_few_lines.append(line)
                i += 1
                if i > 0:
                    break

            accepted_delimiters = [',', '\t', ';']
            dialect = csv.Sniffer().sniff(''.join(first_few_lines[0]),
                                          delimiters=accepted_delimiters)
            data.seek(0)
            # if csv dialect identified then return csv
            if dialect:
                return data, 'csv', dialect
            else:
                return data, None, dialect
        except:
            data.seek(0)
            log.error('Could not detect format for this file')
            log.error(traceback.format_exc())
            # No file type identified
            return data, None, dialect
Example #56
0
 def remotePrint(self, message):
   with self.jobLock:
     sys.stdout.write('PRINT')
     bytes = codecs.getencoder('UTF8')(message)[0]
     sys.stdout.write('%8d' % len(bytes))
     sys.stdout.write(bytes)
Example #57
0
filesize = 0x00100000
pos = 2
count = 0
checksumtotal = 0

while (count < filesize):
    #only add numbers not part of the header
    if ((romtype == 0 and (count < 0x07FB0 or count > 0x07FDF))
            or (romtype == 1 and (count < 0x07FB0 or count > 0x07FDF))):
        #parameter here is what offset to seek to
        rawfile.seek(count, 0)
        #parameter defines how many bytes to read
        currentvalue = rawfile.read(1)
        outputresult = 0
        outputresult = codecs.getencoder('hex_codec')(currentvalue)[0]
        checksumtotal = checksumtotal + int.from_bytes(currentvalue,
                                                       byteorder='little')
        #print (outputresult)
    count = count + 1

#cast the result to an unsigned integer
struct.pack('I', checksumtotal)
#truncate to 16 bit and convert to hex string in one operation
checksumoutput = hex(checksumtotal & 0xffff)
inverse = hex(~checksumtotal & 0xffff)

checksumhighbyte = struct.pack('B', ((checksumtotal & 0xff00) >> 8))
checksumelowbyte = struct.pack('B', (checksumtotal & 0x00ff))

print("Something is going wrong with this")
Example #58
0
def decode_bytes(value):
    try:
        return value.decode("utf-8")
    except Exception:
        return codecs.getencoder("hex_codec")(value)[0].decode("utf-8")
Example #59
0
                    indices[i], indices[-j] = indices[-j], indices[i]
                    yield tuple(pool[i] for i in indices[:r])
                    break
            else:
                return


if sys.platform == 'win32':
    now = time.clock
else:
    now = time.time

# Note: these functions return a tuple of (text, length), so when you call
# them, you have to add [0] on the end, e.g. str = utf8encode(unicode)[0]

utf8encode = codecs.getencoder("utf_8")
utf8decode = codecs.getdecoder("utf_8")

# Functions


def array_to_string(a):
    if IS_LITTLE:
        a = copy(a)
        a.byteswap()
    return a.tostring()


def string_to_array(typecode, s):
    a = array(typecode)
    a.fromstring(s)
def signature(transaction_id, signing_key):
    signer = PKCS1_v1_5.new(signing_key)
    signature = signer.sign(transaction_id)
    hexify = codecs.getencoder("hex")
    return hexify(signature)[0].decode()