Adds a metadata sample. To add an actual file, use add_sample_file.

        Args:
            source: Source of the information
            reference: A reference where more information can be found
            method: The method for obtaining the sample.
            filename: The name of the file.
            md5: An MD5 hash of the file.
            sha1: SHA1 hash of the file.
            sha256: SHA256 hash of the file.
            size: size of the file.
            mimetype: The mimetype of the file.
            campaign: An associated campaign
            confidence: The campaign confidence
            bucket_list: A list of bucket list items to add
            upload_type: Either 'file' or 'meta'
        Returns:
            A JSON sample object or None if there was an error.

def add_sample_meta(self,
                        source,
                        reference,
                        method='',
                        filename='',
                        md5='',
                        sha1='',
                        sha256='',
                        size='',
                        mimetype='',
                        campaign='',
                        confidence='',
                        description='',
                        bucket_list=[]):
        """
        Adds a metadata sample. To add an actual file, use add_sample_file.

        Args:
            source: Source of the information
            reference: A reference where more information can be found
            method: The method for obtaining the sample.
            filename: The name of the file.
            md5: An MD5 hash of the file.
            sha1: SHA1 hash of the file.
            sha256: SHA256 hash of the file.
            size: size of the file.
            mimetype: The mimetype of the file.
            campaign: An associated campaign
            confidence: The campaign confidence
            bucket_list: A list of bucket list items to add
            upload_type: Either 'file' or 'meta'
        Returns:
            A JSON sample object or None if there was an error.
        """
        data = {
            'api_key': self.api_key,
            'username': self.username,
            'source': source,
            'reference': reference,
            'method': method,
            'filename': filename,
            'md5': md5,
            'sha1': sha1,
            'sha256': sha256,
            'size': size,
            'mimetype': mimetype,
            'upload_type': 'meta',
            'campaign': campaign,
            'confidence': confidence,
            'bucket_list': ','.join(bucket_list),
        }
        r = requests.post('{0}/samples/'.format(self.url),
                          data=data,
                          verify=self.verify,
                          proxies=self.proxies)
        if r.status_code == 200:
            result_data = json.loads(r.text)
            return result_data
        else:
            log.error('Error with status code {0} and message '
                      '{1}'.format(r.status_code, r.text))
        return None