def get_files(self, s3_conn=None):
        # We are standardizing on UNIX semantics for file matching (vs. S3 prefix semantics). This means
        # we expect that on both S3 and UNIX:
        #   bucket/1
        #   bucket/2
        #   bucket/a/1
        #   bucket/a/2
        #
        # bucket/* matches just 1,2 and bucket/** matches all 4 files
        logger = log.get_logger('Jobs')
        for load_path in self.paths:
            if load_path.scheme == 's3':
                bucket = s3_conn.get_bucket(load_path.bucket)
                s3_globber = glob2.S3Globber(bucket)

                for keyname in s3_globber.glob(load_path.pattern):
                    if not s3_globber.isdir(keyname):
                        try:
                            key = s3_globber.get_key(keyname)
                            if key is not None:
                                yield AttrDict({
                                    'scheme': 's3',
                                    'name': key.name,
                                    'etag': key.etag,
                                    'size': key.size,
                                    'bucket': bucket
                                })
                            else:
                                logger.warning("Key `%s` not found, skipping", keyname)
                        except S3ResponseError as e:
                            logger.warning("Received %s %s accessing `%s`, skipping", e.status, e.reason, keyname)
            elif load_path.scheme == 'file':
                fs_globber = glob2.Globber()
                for fname in fs_globber.glob(load_path.pattern):
                    if not fs_globber.isdir(fname):
                        yield AttrDict({
                            'scheme': 'file',
                            'name': fname,
                            'etag': None,
                            'size': os.path.getsize(fs_globber._normalize_string(fname)),
                            'bucket': None
                        })
            elif load_path.scheme == 'hdfs':
                hdfs_host = self.spec.source.hdfs_host
                webhdfs_port = self.spec.source.webhdfs_port
                hdfs_user = self.spec.source.hdfs_user

                client = PyWebHdfsClient(
                    hdfs_host, webhdfs_port, user_name=hdfs_user)
                hdfs_globber = glob2.HDFSGlobber(client)
                for fname in hdfs_globber.glob(load_path.pattern):
                    if not hdfs_globber.isdir(fname):
                        fileinfo = hdfs_globber.get_fileinfo(fname)
                        yield AttrDict({
                            'scheme': 'hdfs',
                            'name': fileinfo['path'],
                            'etag': fileinfo['etag'],
                            'size': fileinfo['length'],
                            'bucket': None
                        })
            else:
                assert False, load_path.scheme % "Unknown scheme %s"
dataset/ETHPy150Open memsql/memsql-loader/memsql_loader/loader_db/jobs.py/Job.get_files/swapped operands of `%`