def apply(self):
        stub = metric_descriptor_pb2_grpc.MonitoringMetricDescriptorServiceStub(
            channel.Channel())
        request = metric_descriptor_pb2.ApplyMonitoringMetricDescriptorRequest(
        )
        if Primitive.to_proto(self.type):
            request.resource.type = Primitive.to_proto(self.type)

        if MetricDescriptorLabelsArray.to_proto(self.labels):
            request.resource.labels.extend(
                MetricDescriptorLabelsArray.to_proto(self.labels))
        if MetricDescriptorMetricKindEnum.to_proto(self.metric_kind):
            request.resource.metric_kind = MetricDescriptorMetricKindEnum.to_proto(
                self.metric_kind)

        if MetricDescriptorValueTypeEnum.to_proto(self.value_type):
            request.resource.value_type = MetricDescriptorValueTypeEnum.to_proto(
                self.value_type)

        if Primitive.to_proto(self.unit):
            request.resource.unit = Primitive.to_proto(self.unit)

        if Primitive.to_proto(self.description):
            request.resource.description = Primitive.to_proto(self.description)

        if Primitive.to_proto(self.display_name):
            request.resource.display_name = Primitive.to_proto(
                self.display_name)

        if MetricDescriptorMetadata.to_proto(self.metadata):
            request.resource.metadata.CopyFrom(
                MetricDescriptorMetadata.to_proto(self.metadata))
        else:
            request.resource.ClearField("metadata")
        if MetricDescriptorLaunchStageEnum.to_proto(self.launch_stage):
            request.resource.launch_stage = MetricDescriptorLaunchStageEnum.to_proto(
                self.launch_stage)

        if Primitive.to_proto(self.project):
            request.resource.project = Primitive.to_proto(self.project)

        request.service_account_file = self.service_account_file

        response = stub.ApplyMonitoringMetricDescriptor(request)
        self.self_link = Primitive.from_proto(response.self_link)
        self.type = Primitive.from_proto(response.type)
        self.labels = MetricDescriptorLabelsArray.from_proto(response.labels)
        self.metric_kind = MetricDescriptorMetricKindEnum.from_proto(
            response.metric_kind)
        self.value_type = MetricDescriptorValueTypeEnum.from_proto(
            response.value_type)
        self.unit = Primitive.from_proto(response.unit)
        self.description = Primitive.from_proto(response.description)
        self.display_name = Primitive.from_proto(response.display_name)
        self.metadata = MetricDescriptorMetadata.from_proto(response.metadata)
        self.launch_stage = MetricDescriptorLaunchStageEnum.from_proto(
            response.launch_stage)
        self.monitored_resource_types = Primitive.from_proto(
            response.monitored_resource_types)
        self.project = Primitive.from_proto(response.project)
    def list(self, project, service_account_file=""):
        stub = metric_descriptor_pb2_grpc.MonitoringMetricDescriptorServiceStub(
            channel.Channel())
        request = metric_descriptor_pb2.ListMonitoringMetricDescriptorRequest()
        request.service_account_file = service_account_file
        request.Project = project

        return stub.ListMonitoringMetricDescriptor(request).items
    def delete(self, project, type, service_account_file=""):
        stub = metric_descriptor_pb2_grpc.MonitoringMetricDescriptorServiceStub(
            channel.Channel())
        request = metric_descriptor_pb2.DeleteMonitoringMetricDescriptorRequest(
        )
        request.service_account_file = service_account_file
        request.Project = project

        request.Type = type

        response = stub.DeleteMonitoringMetricDescriptor(request)