def from_api_repr(cls, resource): """Factory: construct a model resource given its API representation Args: resource (Dict[str, object]): Model resource representation from the API Returns: google.cloud.bigquery.model.Model: Model parsed from ``resource``. """ this = cls(None) # Convert from millis-from-epoch to timestamp well-known type. # TODO: Remove this hack once CL 238585470 hits prod. resource = copy.deepcopy(resource) for training_run in resource.get("trainingRuns", ()): start_time = training_run.get("startTime") if not start_time or "-" in start_time: # Already right format? continue start_time = datetime_helpers.from_microseconds(1e3 * float(start_time)) training_run["startTime"] = datetime_helpers.to_rfc3339(start_time) this._proto = json_format.ParseDict(resource, types.Model()) for key in six.itervalues(cls._PROPERTY_TO_API_FIELD): # Leave missing keys unset. This allows us to use setdefault in the # getters where we want a default value other than None. if key in resource: this._properties[key] = resource[key] return this
def from_api_repr(cls, resource): """Factory: construct a model resource given its API representation Args: resource (Dict[str, object]): Model resource representation from the API Returns: google.cloud.bigquery.model.Model: Model parsed from ``resource``. """ this = cls(None) # Keep a reference to the resource as a workaround to find unknown # field values. this._properties = resource # Convert from millis-from-epoch to timestamp well-known type. # TODO: Remove this hack once CL 238585470 hits prod. resource = copy.deepcopy(resource) for training_run in resource.get("trainingRuns", ()): start_time = training_run.get("startTime") if not start_time or "-" in start_time: # Already right format? continue start_time = datetime_helpers.from_microseconds(1e3 * float(start_time)) training_run["startTime"] = datetime_helpers.to_rfc3339(start_time) this._proto = json_format.ParseDict(resource, types.Model()._pb, ignore_unknown_fields=True) return this
def test_w_datetime(self): import datetime from google.protobuf.struct_pb2 import Value from google.api_core import datetime_helpers now = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc) value_pb = self._callFUT(now) self.assertIsInstance(value_pb, Value) self.assertEqual(value_pb.string_value, datetime_helpers.to_rfc3339(now))
def test_w_datetime(self): import datetime import pytz from google.protobuf.struct_pb2 import Value from google.api_core import datetime_helpers now = datetime.datetime.utcnow().replace(tzinfo=pytz.UTC) value_pb = self._callFUT(now) self.assertIsInstance(value_pb, Value) self.assertEqual(value_pb.string_value, datetime_helpers.to_rfc3339(now))
def test_w_timestamp_w_nanos(self): import pytz from google.protobuf.struct_pb2 import Value from google.api_core import datetime_helpers from google.cloud.spanner_v1 import Type from google.cloud.spanner_v1 import TypeCode value = datetime_helpers.DatetimeWithNanoseconds( 2016, 12, 20, 21, 13, 47, nanosecond=123456789, tzinfo=pytz.UTC ) field_type = Type(code=TypeCode.TIMESTAMP) value_pb = Value(string_value=datetime_helpers.to_rfc3339(value)) parsed = self._callFUT(value_pb, field_type) self.assertIsInstance(parsed, datetime_helpers.DatetimeWithNanoseconds) self.assertEqual(parsed, value)
def test_w_timestamp_w_nanos(self): import pytz from google.protobuf.struct_pb2 import Value from google.api_core import datetime_helpers from google.cloud.spanner_v1.proto.type_pb2 import TIMESTAMP from google.cloud.spanner_v1.proto.type_pb2 import Type value = datetime_helpers.DatetimeWithNanoseconds( 2016, 12, 20, 21, 13, 47, nanosecond=123456789, tzinfo=pytz.UTC ) field_type = Type(code=TIMESTAMP) value_pb = Value(string_value=datetime_helpers.to_rfc3339(value)) parsed = self._callFUT(value_pb, field_type) self.assertIsInstance(parsed, datetime_helpers.DatetimeWithNanoseconds) self.assertEqual(parsed, value)
def expiration_time(self, new_expiration_time: Optional[datetime]) -> None: if not new_expiration_time and self.expiration_time: self._api.update_permission( file_id=self.file.id, permission_id=self._id, removeExpiration=True, body={}, ) if new_expiration_time: self._api.update_permission( file_id=self.file.id, permission_id=self._id, body={ "expirationTime": to_rfc3339(new_expiration_time), "role": self.role, }, )
def test_to_rfc3339_with_non_utc_ignore_zone(): zone = pytz.FixedOffset(-60) value = datetime.datetime(2016, 4, 5, 13, 30, 0, tzinfo=zone) expected = "2016-04-05T13:30:00.000000Z" assert datetime_helpers.to_rfc3339(value, ignore_zone=True) == expected
def test_to_rfc3339_with_utc(): value = datetime.datetime(2016, 4, 5, 13, 30, 0, tzinfo=pytz.utc) expected = "2016-04-05T13:30:00.000000Z" assert datetime_helpers.to_rfc3339(value, ignore_zone=False) == expected
def test_to_rfc3339(): value = datetime.datetime(2016, 4, 5, 13, 30, 0) expected = "2016-04-05T13:30:00.000000Z" assert datetime_helpers.to_rfc3339(value) == expected
def test_to_rfc3339_with_non_utc_ignore_zone(): zone = pytz.FixedOffset(-60) value = datetime.datetime(2016, 4, 5, 13, 30, 0, tzinfo=zone) expected = "2016-04-05T13:30:00.000000Z" assert datetime_helpers.to_rfc3339(value, ignore_zone=True) == expected
def test_to_rfc3339_with_utc(): value = datetime.datetime(2016, 4, 5, 13, 30, 0, tzinfo=pytz.utc) expected = "2016-04-05T13:30:00.000000Z" assert datetime_helpers.to_rfc3339(value, ignore_zone=False) == expected
def test_to_rfc3339(): value = datetime.datetime(2016, 4, 5, 13, 30, 0) expected = "2016-04-05T13:30:00.000000Z" assert datetime_helpers.to_rfc3339(value) == expected
def test_to_rfc3339_with_non_utc_ignore_zone(): zone = datetime.timezone(datetime.timedelta(minutes=-60)) value = datetime.datetime(2016, 4, 5, 13, 30, 0, tzinfo=zone) expected = "2016-04-05T13:30:00.000000Z" assert datetime_helpers.to_rfc3339(value, ignore_zone=True) == expected