def test_run_w_mixed_udfs(self): from google.cloud.bigquery._helpers import UDFResource RESOURCE_URI = 'gs://some-bucket/js/lib.js' INLINE_UDF_CODE = 'var someCode = "here";' PATH = 'projects/%s/queries' % self.PROJECT RESOURCE = self._makeResource(complete=False) conn = _Connection(RESOURCE) client = _Client(project=self.PROJECT, connection=conn) query = self._makeOne(self.QUERY, client) query.udf_resources = [ UDFResource("resourceUri", RESOURCE_URI), UDFResource("inlineCode", INLINE_UDF_CODE) ] query.run() self.assertEqual(len(conn._requested), 1) req = conn._requested[0] self.assertEqual(req['method'], 'POST') self.assertEqual(req['path'], '/%s' % PATH) self.assertEqual(query.udf_resources, [ UDFResource("resourceUri", RESOURCE_URI), UDFResource("inlineCode", INLINE_UDF_CODE) ]) SENT = { 'query': self.QUERY, 'userDefinedFunctionResources': [{ 'resourceUri': RESOURCE_URI }, { "inlineCode": INLINE_UDF_CODE }] } self.assertEqual(req['data'], SENT) self._verifyResourceProperties(query, RESOURCE)
def test_from_query_job(self): from google.cloud.bigquery.dataset import Dataset from google.cloud.bigquery.job import QueryJob from google.cloud.bigquery._helpers import UDFResource DS_NAME = 'DATASET' RESOURCE_URI = 'gs://some-bucket/js/lib.js' client = _Client(self.PROJECT) job = QueryJob( self.JOB_NAME, self.QUERY, client, udf_resources=[UDFResource("resourceUri", RESOURCE_URI)]) dataset = job.default_dataset = Dataset(DS_NAME, client) job.use_query_cache = True job.use_legacy_sql = True klass = self._getTargetClass() query = klass.from_query_job(job) self.assertEqual(query.name, self.JOB_NAME) self.assertEqual(query.query, self.QUERY) self.assertIs(query._client, client) self.assertIs(query._job, job) self.assertEqual(query.udf_resources, job.udf_resources) self.assertIs(query.default_dataset, dataset) self.assertTrue(query.use_query_cache) self.assertTrue(query.use_legacy_sql)
def test_run_w_udf_resource_uri(self): from google.cloud.bigquery._helpers import UDFResource RESOURCE_URI = 'gs://some-bucket/js/lib.js' PATH = 'projects/%s/queries' % self.PROJECT RESOURCE = self._makeResource(complete=False) RESOURCE['userDefinedFunctionResources'] = [ { 'resourceUri': RESOURCE_URI }, ] conn = _Connection(RESOURCE) client = _Client(project=self.PROJECT, connection=conn) query = self._make_one(self.QUERY, client) query.udf_resources = [UDFResource("resourceUri", RESOURCE_URI)] query.run() self.assertEqual(len(conn._requested), 1) req = conn._requested[0] self.assertEqual(req['method'], 'POST') self.assertEqual(req['path'], '/%s' % PATH) SENT = { 'query': self.QUERY, 'userDefinedFunctionResources': [{ 'resourceUri': RESOURCE_URI }] } self.assertEqual(req['data'], SENT) self._verifyResourceProperties(query, RESOURCE)
def test_run_w_inline_udf(self): from google.cloud.bigquery._helpers import UDFResource INLINE_UDF_CODE = 'var someCode = "here";' PATH = 'projects/%s/queries' % self.PROJECT RESOURCE = self._makeResource(complete=False) RESOURCE['userDefinedFunctionResources'] = [ { 'inlineCode': INLINE_UDF_CODE }, ] conn = _Connection(RESOURCE) client = _Client(project=self.PROJECT, connection=conn) query = self._make_one(self.QUERY, client) query.udf_resources = [UDFResource("inlineCode", INLINE_UDF_CODE)] query.run() self.assertEqual(len(conn._requested), 1) req = conn._requested[0] self.assertEqual(req['method'], 'POST') self.assertEqual(req['path'], '/%s' % PATH) SENT = { 'query': self.QUERY, 'userDefinedFunctionResources': [{ 'inlineCode': INLINE_UDF_CODE }] } self.assertEqual(req['data'], SENT) self._verifyResourceProperties(query, RESOURCE)
def test_ctor_w_udf_resources(self): from google.cloud.bigquery._helpers import UDFResource RESOURCE_URI = 'gs://some-bucket/js/lib.js' udf_resources = [UDFResource("resourceUri", RESOURCE_URI)] client = _Client(self.PROJECT) query = self._make_one(self.QUERY, client, udf_resources=udf_resources) self.assertEqual(query.udf_resources, udf_resources)
def test_instance_getter_w_non_empty_list(self): from google.cloud.bigquery._helpers import UDFResource RESOURCE_URI = 'gs://some-bucket/js/lib.js' udf_resources = [UDFResource("resourceUri", RESOURCE_URI)] _, klass = self._descriptor_and_klass() instance = klass() instance._udf_resources = tuple(udf_resources) self.assertEqual(instance.udf_resources, udf_resources)
def test_run_sync_query_w_udf_resources(self): from google.cloud.bigquery._helpers import UDFResource from google.cloud.bigquery.query import QueryResults RESOURCE_URI = 'gs://some-bucket/js/lib.js' PROJECT = 'PROJECT' QUERY = 'select count(*) from persons' creds = _make_credentials() http = object() client = self._make_one(project=PROJECT, credentials=creds, http=http) udf_resources = [UDFResource("resourceUri", RESOURCE_URI)] query = client.run_sync_query(QUERY, udf_resources=udf_resources) self.assertIsInstance(query, QueryResults) self.assertIs(query._client, client) self.assertIsNone(query.name) self.assertEqual(query.query, QUERY) self.assertEqual(query.udf_resources, udf_resources) self.assertEqual(query.query_parameters, [])
def test_run_async_w_udf_resources(self): from google.cloud.bigquery._helpers import UDFResource from google.cloud.bigquery.job import QueryJob RESOURCE_URI = 'gs://some-bucket/js/lib.js' PROJECT = 'PROJECT' JOB = 'job_name' QUERY = 'select count(*) from persons' creds = _make_credentials() http = object() client = self._make_one(project=PROJECT, credentials=creds, http=http) udf_resources = [UDFResource("resourceUri", RESOURCE_URI)] job = client.run_async_query(JOB, QUERY, udf_resources=udf_resources) self.assertIsInstance(job, QueryJob) self.assertIs(job._client, client) self.assertEqual(job.name, JOB) self.assertEqual(job.query, QUERY) self.assertEqual(job.udf_resources, udf_resources) self.assertEqual(job.query_parameters, [])
def test_from_query_job_wo_default_dataset(self): from google.cloud.bigquery.job import QueryJob from google.cloud.bigquery._helpers import UDFResource RESOURCE_URI = 'gs://some-bucket/js/lib.js' client = _Client(self.PROJECT) job = QueryJob( self.JOB_NAME, self.QUERY, client, udf_resources=[UDFResource("resourceUri", RESOURCE_URI)]) klass = self._getTargetClass() query = klass.from_query_job(job) self.assertEqual(query.query, self.QUERY) self.assertTrue(query._client is client) self.assertTrue(query._job is job) self.assertEqual(query.udf_resources, job.udf_resources) self.assertIsNone(query.default_dataset) self.assertIsNone(query.use_query_cache) self.assertIsNone(query.use_legacy_sql)