# Module `src.onionrutils.blockmetadata.fromdata`

Onionr - Private P2P Communication

Return a useful tuple of (metadata (header), meta, and data) by accepting raw block data

Expand source code

    '''
        Onionr - Private P2P Communication

        Return a useful tuple of (metadata (header), meta, and data) by accepting raw block data
    '''
    '''
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <https://www.gnu.org/licenses/>.
    '''

    import json

    from onionrutils import bytesconverter
    def get_block_metadata_from_data(block_data):
        '''
            accepts block contents as string, returns a tuple of
            metadata, meta (meta being internal metadata, which will be
            returned as an encrypted base64 string if it is encrypted, dict if not).
        '''
        meta = {}
        metadata = {}
        data = block_data
        try:
            block_data = block_data.encode()
        except AttributeError:
            pass

        try:
            metadata = json.loads(bytesconverter.bytes_to_str(block_data[:block_data.find(b'\n')]))
        except json.decoder.JSONDecodeError:
            pass
        else:
            data = block_data[block_data.find(b'\n'):]

            meta = metadata['meta']
        return (metadata, meta, data)

## Functions

`def get_block_metadata_from_data(block_data)`

  accepts block contents as string, returns a tuple of metadata, meta (meta being internal metadata, which will be returned as an encrypted base64 string if it is encrypted, dict if not).

  Expand source code

      def get_block_metadata_from_data(block_data):
          '''
              accepts block contents as string, returns a tuple of
              metadata, meta (meta being internal metadata, which will be
              returned as an encrypted base64 string if it is encrypted, dict if not).
          '''
          meta = {}
          metadata = {}
          data = block_data
          try:
              block_data = block_data.encode()
          except AttributeError:
              pass

          try:
              metadata = json.loads(bytesconverter.bytes_to_str(block_data[:block_data.find(b'\n')]))
          except json.decoder.JSONDecodeError:
              pass
          else:
              data = block_data[block_data.find(b'\n'):]

              meta = metadata['meta']
          return (metadata, meta, data)