googleapis / python-bigquery

Apache License 2.0
731 stars 298 forks source link

BigQuery: Invalid escape sequences in docstrings #15

Closed craigcitro closed 3 years ago

craigcitro commented 4 years ago

tl;dr: It looks like generated docstrings have invalid escape sequences. Happy to move this to the repo for the codegen if you point me at it.

Environment details

  1. API: BigQuery (though likely applies to all)
  2. OS: n/a
  3. Python version: python 3.8
  4. google-cloud-bigquery: 1.21.0

Steps to reproduce

  1. Import generated .py files with warnings enabled

Note that the sample below has to pass -X pycache_prefix=/tmp to avoid loading the .pyc generated at package installation.

Code example

$ docker run -it --rm --entrypoint bash python:3.8-buster
root@dbd87231f72f:/# pip install -q google-cloud-bigquery
root@dbd87231f72f:/# python -Wall -X pycache_prefix=/tmp
Python 3.8.0 (default, Oct 17 2019, 05:36:36)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from google.cloud.bigquery_v2.gapic import enums
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/proto/model_pb2.py:3447: DeprecationWarning: invalid escape sequence \_
  __doc__="""A single entry in the confusion matrix.
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/proto/model_pb2.py:3653: DeprecationWarning: invalid escape sequence \_
  __doc__="""Protocol buffer.
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/proto/model_pb2.py:3777: DeprecationWarning: invalid escape sequence \_
  __doc__="""Information about a single training query run for the model.
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/proto/model_pb2.py:3807: DeprecationWarning: invalid escape sequence \_
  __doc__="""Protocol buffer.
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/proto/model_pb2.py:3986: DeprecationWarning: invalid escape sequence \_
  __doc__="""Protocol buffer.
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/proto/model_reference_pb2.py:122: DeprecationWarning: invalid escape sequence \_
  __doc__="""Id path of a model.
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/proto/standard_sql_pb2.py:311: DeprecationWarning: invalid escape sequence \_
  __doc__="""The type of a variable, e.g., a function argument. Examples: INT64:
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/gapic/enums.py:24: DeprecationWarning: invalid escape sequence \_
  """
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/gapic/enums.py:120: DeprecationWarning: invalid escape sequence \_
  """
/usr/local/lib/python3.8/site-packages/google/cloud/bigquery_v2/gapic/enums.py:138: DeprecationWarning: invalid escape sequence \_
  """
>>>
tseaver commented 4 years ago

@craigcitro The gapic-generator repo has a number of open issues related to b0rked docstring generation, e.g.:

I don't know what element in the generation chain is responsible, but maybe (from comments on those issues) it is pandoc?

tseaver commented 4 years ago

We have lots of cases of this borked escaping in generated code. Thesee are generated by protoc:

$ git grep -l "\\\\_"  | grep proto
asset/google/cloud/asset_v1/proto/asset_service_pb2.py
asset/google/cloud/asset_v1/proto/assets_pb2.py
asset/google/cloud/asset_v1beta1/proto/asset_service_pb2.py
asset/google/cloud/asset_v1beta1/proto/assets_pb2.py
asset/google/cloud/asset_v1p2beta1/proto/asset_service_pb2.py
asset/google/cloud/asset_v1p2beta1/proto/assets_pb2.py
automl/google/cloud/automl_v1/proto/dataset_pb2.py
automl/google/cloud/automl_v1/proto/io_pb2.py
automl/google/cloud/automl_v1/proto/model_evaluation_pb2.py
automl/google/cloud/automl_v1/proto/model_pb2.py
automl/google/cloud/automl_v1/proto/service_pb2.py
automl/google/cloud/automl_v1beta1/proto/annotation_payload_pb2.py
automl/google/cloud/automl_v1beta1/proto/annotation_spec_pb2.py
automl/google/cloud/automl_v1beta1/proto/classification_pb2.py
automl/google/cloud/automl_v1beta1/proto/column_spec_pb2.py
automl/google/cloud/automl_v1beta1/proto/data_items_pb2.py
automl/google/cloud/automl_v1beta1/proto/data_stats_pb2.py
automl/google/cloud/automl_v1beta1/proto/data_types_pb2.py
automl/google/cloud/automl_v1beta1/proto/dataset_pb2.py
automl/google/cloud/automl_v1beta1/proto/detection_pb2.py
automl/google/cloud/automl_v1beta1/proto/geometry_pb2.py
automl/google/cloud/automl_v1beta1/proto/image_pb2.py
automl/google/cloud/automl_v1beta1/proto/io_pb2.py
automl/google/cloud/automl_v1beta1/proto/model_evaluation_pb2.py
automl/google/cloud/automl_v1beta1/proto/model_pb2.py
automl/google/cloud/automl_v1beta1/proto/prediction_service_pb2.py
automl/google/cloud/automl_v1beta1/proto/service_pb2.py
automl/google/cloud/automl_v1beta1/proto/table_spec_pb2.py
automl/google/cloud/automl_v1beta1/proto/tables_pb2.py
automl/google/cloud/automl_v1beta1/proto/text_pb2.py
automl/google/cloud/automl_v1beta1/proto/text_segment_pb2.py
automl/google/cloud/automl_v1beta1/proto/text_sentiment_pb2.py
bigquery/google/cloud/bigquery_v2/proto/model_pb2.py
bigquery/google/cloud/bigquery_v2/proto/model_reference_pb2.py
bigquery/google/cloud/bigquery_v2/proto/standard_sql_pb2.py
bigquery_datatransfer/google/cloud/bigquery_datatransfer_v1/proto/datasource_pb2.py
bigquery_datatransfer/google/cloud/bigquery_datatransfer_v1/proto/datatransfer_pb2.py
bigquery_datatransfer/google/cloud/bigquery_datatransfer_v1/proto/transfer_pb2.py
bigquery_storage/google/cloud/bigquery_storage_v1beta1/proto/read_options_pb2.py
bigquery_storage/google/cloud/bigquery_storage_v1beta1/proto/storage_pb2.py
bigtable/google/cloud/bigtable_admin_v2/proto/bigtable_table_admin_pb2.py
bigtable/google/cloud/bigtable_v2/proto/bigtable_pb2.py
bigtable/google/cloud/bigtable_v2/proto/data_pb2.py
cloudbuild/google/cloud/devtools/cloudbuild_v1/proto/cloudbuild_pb2.py
container/google/cloud/container_v1/proto/cluster_service_pb2.py
container/google/cloud/container_v1beta1/proto/cluster_service_pb2.py
datacatalog/google/cloud/datacatalog_v1beta1/proto/datacatalog_pb2.py
datacatalog/google/cloud/datacatalog_v1beta1/proto/gcs_fileset_spec_pb2.py
datacatalog/google/cloud/datacatalog_v1beta1/proto/search_pb2.py
datacatalog/google/cloud/datacatalog_v1beta1/proto/table_spec_pb2.py
datacatalog/google/cloud/datacatalog_v1beta1/proto/tags_pb2.py
datalabeling/google/cloud/datalabeling_v1beta1/proto/annotation_pb2.py
datalabeling/google/cloud/datalabeling_v1beta1/proto/annotation_spec_set_pb2.py
datalabeling/google/cloud/datalabeling_v1beta1/proto/data_labeling_service_pb2.py
datalabeling/google/cloud/datalabeling_v1beta1/proto/dataset_pb2.py
datalabeling/google/cloud/datalabeling_v1beta1/proto/evaluation_job_pb2.py
datalabeling/google/cloud/datalabeling_v1beta1/proto/evaluation_pb2.py
datalabeling/google/cloud/datalabeling_v1beta1/proto/human_annotation_config_pb2.py
datalabeling/google/cloud/datalabeling_v1beta1/proto/instruction_pb2.py
datalabeling/google/cloud/datalabeling_v1beta1/proto/operations_pb2.py
dataproc/google/cloud/dataproc_v1/proto/autoscaling_policies_pb2.py
dataproc/google/cloud/dataproc_v1/proto/clusters_pb2.py
dataproc/google/cloud/dataproc_v1/proto/jobs_pb2.py
dataproc/google/cloud/dataproc_v1/proto/workflow_templates_pb2.py
dataproc/google/cloud/dataproc_v1beta2/proto/autoscaling_policies_pb2.py
dataproc/google/cloud/dataproc_v1beta2/proto/clusters_pb2.py
dataproc/google/cloud/dataproc_v1beta2/proto/jobs_pb2.py
dataproc/google/cloud/dataproc_v1beta2/proto/workflow_templates_pb2.py
datastore/google/cloud/datastore_v1/proto/datastore_pb2.py
dlp/google/cloud/dlp_v2/proto/dlp_pb2.py
dlp/google/cloud/dlp_v2/proto/storage_pb2.py
error_reporting/google/cloud/errorreporting_v1beta1/proto/error_group_service_pb2.py
error_reporting/google/cloud/errorreporting_v1beta1/proto/error_stats_service_pb2.py
firestore/google/cloud/firestore_admin_v1/proto/field_pb2.py
firestore/google/cloud/firestore_admin_v1/proto/firestore_admin_pb2.py
firestore/google/cloud/firestore_admin_v1/proto/index_pb2.py
firestore/google/cloud/firestore_v1/proto/firestore_pb2.py
firestore/google/cloud/firestore_v1/proto/write_pb2.py
firestore/google/cloud/firestore_v1beta1/proto/firestore_pb2.py
firestore/google/cloud/firestore_v1beta1/proto/write_pb2.py
grafeas/grafeas/grafeas_v1/proto/common_pb2.py
grafeas/grafeas/grafeas_v1/proto/image_pb2.py
grafeas/grafeas/grafeas_v1/proto/package_pb2.py
grafeas/grafeas/grafeas_v1/proto/provenance_pb2.py
grafeas/grafeas/grafeas_v1/proto/vulnerability_pb2.py
iot/google/cloud/iot_v1/proto/resources_pb2.py
kms/google/cloud/kms_v1/proto/resources_pb2.py
kms/google/cloud/kms_v1/proto/service_pb2.py
language/google/cloud/language_v1/proto/language_service_pb2.py
language/google/cloud/language_v1beta2/proto/language_service_pb2.py
logging/google/cloud/logging_v2/proto/log_entry_pb2.py
logging/google/cloud/logging_v2/proto/logging_config_pb2.py
logging/google/cloud/logging_v2/proto/logging_pb2.py
monitoring/google/cloud/monitoring_v3/proto/alert_service_pb2.py
monitoring/google/cloud/monitoring_v3/proto/metric_service_pb2.py
monitoring/google/cloud/monitoring_v3/proto/notification_pb2.py
monitoring/google/cloud/monitoring_v3/proto/span_context_pb2.py
monitoring/google/cloud/monitoring_v3/proto/uptime_pb2.py
monitoring/google/cloud/monitoring_v3/proto/uptime_service_pb2.py
phishingprotection/google/cloud/phishingprotection_v1beta1/proto/phishingprotection_pb2.py
pubsub/google/cloud/pubsub_v1/proto/pubsub_pb2.py
recommender/google/cloud/recommender_v1beta1/proto/recommendation_pb2.py
recommender/google/cloud/recommender_v1beta1/proto/recommender_service_pb2.py
redis/google/cloud/redis_v1/proto/cloud_redis_pb2.py
redis/google/cloud/redis_v1beta1/proto/cloud_redis_pb2.py
scheduler/google/cloud/scheduler_v1/proto/cloudscheduler_pb2.py
scheduler/google/cloud/scheduler_v1/proto/job_pb2.py
scheduler/google/cloud/scheduler_v1/proto/target_pb2.py
scheduler/google/cloud/scheduler_v1beta1/proto/cloudscheduler_pb2.py
scheduler/google/cloud/scheduler_v1beta1/proto/job_pb2.py
scheduler/google/cloud/scheduler_v1beta1/proto/target_pb2.py
securitycenter/google/cloud/securitycenter_v1/proto/asset_pb2.py
securitycenter/google/cloud/securitycenter_v1/proto/finding_pb2.py
securitycenter/google/cloud/securitycenter_v1/proto/organization_settings_pb2.py
securitycenter/google/cloud/securitycenter_v1/proto/security_marks_pb2.py
securitycenter/google/cloud/securitycenter_v1/proto/securitycenter_service_pb2.py
securitycenter/google/cloud/securitycenter_v1/proto/source_pb2.py
securitycenter/google/cloud/securitycenter_v1beta1/proto/asset_pb2.py
securitycenter/google/cloud/securitycenter_v1beta1/proto/finding_pb2.py
securitycenter/google/cloud/securitycenter_v1beta1/proto/organization_settings_pb2.py
securitycenter/google/cloud/securitycenter_v1beta1/proto/security_marks_pb2.py
securitycenter/google/cloud/securitycenter_v1beta1/proto/securitycenter_service_pb2.py
securitycenter/google/cloud/securitycenter_v1beta1/proto/source_pb2.py
spanner/google/cloud/spanner_admin_database_v1/proto/spanner_database_admin_pb2.py
spanner/google/cloud/spanner_admin_instance_v1/proto/spanner_instance_admin_pb2.py
spanner/google/cloud/spanner_v1/proto/mutation_pb2.py
spanner/google/cloud/spanner_v1/proto/query_plan_pb2.py
spanner/google/cloud/spanner_v1/proto/result_set_pb2.py
spanner/google/cloud/spanner_v1/proto/spanner_pb2.py
spanner/google/cloud/spanner_v1/proto/transaction_pb2.py
speech/google/cloud/speech_v1/proto/cloud_speech_pb2.py
speech/google/cloud/speech_v1p1beta1/proto/cloud_speech_pb2.py
talent/google/cloud/talent_v4beta1/proto/application_pb2.py
talent/google/cloud/talent_v4beta1/proto/application_service_pb2.py
talent/google/cloud/talent_v4beta1/proto/common_pb2.py
talent/google/cloud/talent_v4beta1/proto/company_pb2.py
talent/google/cloud/talent_v4beta1/proto/company_service_pb2.py
talent/google/cloud/talent_v4beta1/proto/completion_service_pb2.py
talent/google/cloud/talent_v4beta1/proto/event_pb2.py
talent/google/cloud/talent_v4beta1/proto/event_service_pb2.py
talent/google/cloud/talent_v4beta1/proto/filters_pb2.py
talent/google/cloud/talent_v4beta1/proto/histogram_pb2.py
talent/google/cloud/talent_v4beta1/proto/job_pb2.py
talent/google/cloud/talent_v4beta1/proto/job_service_pb2.py
talent/google/cloud/talent_v4beta1/proto/profile_pb2.py
talent/google/cloud/talent_v4beta1/proto/profile_service_pb2.py
talent/google/cloud/talent_v4beta1/proto/tenant_pb2.py
talent/google/cloud/talent_v4beta1/proto/tenant_service_pb2.py
tasks/google/cloud/tasks_v2/proto/cloudtasks_pb2.py
tasks/google/cloud/tasks_v2/proto/queue_pb2.py
tasks/google/cloud/tasks_v2/proto/target_pb2.py
tasks/google/cloud/tasks_v2/proto/task_pb2.py
tasks/google/cloud/tasks_v2beta2/proto/cloudtasks_pb2.py
tasks/google/cloud/tasks_v2beta2/proto/queue_pb2.py
tasks/google/cloud/tasks_v2beta2/proto/target_pb2.py
tasks/google/cloud/tasks_v2beta2/proto/task_pb2.py
tasks/google/cloud/tasks_v2beta3/proto/cloudtasks_pb2.py
tasks/google/cloud/tasks_v2beta3/proto/queue_pb2.py
tasks/google/cloud/tasks_v2beta3/proto/target_pb2.py
tasks/google/cloud/tasks_v2beta3/proto/task_pb2.py
texttospeech/google/cloud/texttospeech_v1/proto/cloud_tts_pb2.py
texttospeech/google/cloud/texttospeech_v1beta1/proto/cloud_tts_pb2.py
trace/google/cloud/trace_v1/proto/trace_pb2.py
trace/google/cloud/trace_v2/proto/trace_pb2.py
translate/google/cloud/translate_v3/proto/translation_service_pb2.py
translate/google/cloud/translate_v3beta1/proto/translation_service_pb2.py
videointelligence/google/cloud/videointelligence_v1/proto/video_intelligence_pb2.py
videointelligence/google/cloud/videointelligence_v1beta2/proto/video_intelligence_pb2.py
videointelligence/google/cloud/videointelligence_v1p1beta1/proto/video_intelligence_pb2.py
videointelligence/google/cloud/videointelligence_v1p2beta1/proto/video_intelligence_pb2.py
videointelligence/google/cloud/videointelligence_v1p3beta1/proto/video_intelligence_pb2.py
vision/google/cloud/vision_v1/proto/image_annotator_pb2.py
vision/google/cloud/vision_v1/proto/product_search_pb2.py
vision/google/cloud/vision_v1/proto/product_search_service_pb2.py
vision/google/cloud/vision_v1/proto/text_annotation_pb2.py
vision/google/cloud/vision_v1/proto/web_detection_pb2.py
vision/google/cloud/vision_v1p1beta1/proto/image_annotator_pb2.py
vision/google/cloud/vision_v1p1beta1/proto/text_annotation_pb2.py
vision/google/cloud/vision_v1p1beta1/proto/web_detection_pb2.py
vision/google/cloud/vision_v1p2beta1/proto/image_annotator_pb2.py
vision/google/cloud/vision_v1p2beta1/proto/text_annotation_pb2.py
vision/google/cloud/vision_v1p2beta1/proto/web_detection_pb2.py
vision/google/cloud/vision_v1p3beta1/proto/image_annotator_pb2.py
vision/google/cloud/vision_v1p3beta1/proto/product_search_service_pb2.py
vision/google/cloud/vision_v1p3beta1/proto/text_annotation_pb2.py
vision/google/cloud/vision_v1p3beta1/proto/web_detection_pb2.py
vision/google/cloud/vision_v1p4beta1/proto/image_annotator_pb2.py
vision/google/cloud/vision_v1p4beta1/proto/product_search_pb2.py
vision/google/cloud/vision_v1p4beta1/proto/product_search_service_pb2.py
vision/google/cloud/vision_v1p4beta1/proto/text_annotation_pb2.py
vision/google/cloud/vision_v1p4beta1/proto/web_detection_pb2.py
webrisk/google/cloud/webrisk_v1beta1/proto/webrisk_pb2.py
websecurityscanner/google/cloud/websecurityscanner_v1alpha/proto/scan_config_pb2.py
websecurityscanner/google/cloud/websecurityscanner_v1alpha/proto/web_security_scanner_pb2.py
websecurityscanner/google/cloud/websecurityscanner_v1beta/proto/scan_config_error_pb2.py
websecurityscanner/google/cloud/websecurityscanner_v1beta/proto/scan_config_pb2.py
websecurityscanner/google/cloud/websecurityscanner_v1beta/proto/scan_run_error_trace_pb2.py
websecurityscanner/google/cloud/websecurityscanner_v1beta/proto/scan_run_pb2.py
websecurityscanner/google/cloud/websecurityscanner_v1beta/proto/web_security_scanner_pb2.py

and these by the gapic-generator:

$ git grep -l "\\\\_"  | grep gapic
asset/google/cloud/asset_v1/gapic/asset_service_client.py
asset/google/cloud/asset_v1/gapic/transports/asset_service_grpc_transport.py
asset/google/cloud/asset_v1beta1/gapic/asset_service_client.py
asset/google/cloud/asset_v1beta1/gapic/transports/asset_service_grpc_transport.py
asset/google/cloud/asset_v1p2beta1/gapic/asset_service_client.py
asset/google/cloud/asset_v1p2beta1/gapic/transports/asset_service_grpc_transport.py
automl/google/cloud/automl_v1/gapic/auto_ml_client.py
automl/google/cloud/automl_v1/gapic/prediction_service_client.py
automl/google/cloud/automl_v1beta1/gapic/auto_ml_client.py
automl/google/cloud/automl_v1beta1/gapic/enums.py
automl/google/cloud/automl_v1beta1/gapic/prediction_service_client.py
automl/google/cloud/automl_v1beta1/gapic/transports/prediction_service_grpc_transport.py
bigquery/google/cloud/bigquery_v2/gapic/enums.py
bigquery_datatransfer/google/cloud/bigquery_datatransfer_v1/gapic/data_transfer_service_client.py
bigquery_datatransfer/google/cloud/bigquery_datatransfer_v1/gapic/transports/data_transfer_service_grpc_transport.py
bigtable/google/cloud/bigtable_admin_v2/gapic/bigtable_table_admin_client.py
container/google/cloud/container_v1/gapic/enums.py
container/google/cloud/container_v1beta1/gapic/cluster_manager_client.py
container/google/cloud/container_v1beta1/gapic/enums.py
container/google/cloud/container_v1beta1/gapic/transports/cluster_manager_grpc_transport.py
datacatalog/google/cloud/datacatalog_v1beta1/gapic/data_catalog_client.py
datacatalog/google/cloud/datacatalog_v1beta1/gapic/transports/data_catalog_grpc_transport.py
datalabeling/google/cloud/datalabeling_v1beta1/gapic/data_labeling_service_client.py
datalabeling/google/cloud/datalabeling_v1beta1/gapic/transports/data_labeling_service_grpc_transport.py
dataproc/google/cloud/dataproc_v1/gapic/cluster_controller_client.py
dataproc/google/cloud/dataproc_v1/gapic/enums.py
dataproc/google/cloud/dataproc_v1/gapic/job_controller_client.py
dataproc/google/cloud/dataproc_v1/gapic/workflow_template_service_client.py
dataproc/google/cloud/dataproc_v1beta2/gapic/autoscaling_policy_service_client.py
dataproc/google/cloud/dataproc_v1beta2/gapic/cluster_controller_client.py
dataproc/google/cloud/dataproc_v1beta2/gapic/enums.py
dataproc/google/cloud/dataproc_v1beta2/gapic/job_controller_client.py
dataproc/google/cloud/dataproc_v1beta2/gapic/transports/autoscaling_policy_service_grpc_transport.py
dataproc/google/cloud/dataproc_v1beta2/gapic/workflow_template_service_client.py
dlp/google/cloud/dlp_v2/gapic/dlp_service_client.py
dlp/google/cloud/dlp_v2/gapic/enums.py
dlp/google/cloud/dlp_v2/gapic/transports/dlp_service_grpc_transport.py
error_reporting/google/cloud/errorreporting_v1beta1/gapic/error_group_service_client.py
error_reporting/google/cloud/errorreporting_v1beta1/gapic/error_stats_service_client.py
firestore/google/cloud/firestore_admin_v1/gapic/firestore_admin_client.py
iot/google/cloud/iot_v1/gapic/device_manager_client.py
iot/google/cloud/iot_v1/gapic/enums.py
iot/google/cloud/iot_v1/gapic/transports/device_manager_grpc_transport.py
kms/google/cloud/kms_v1/gapic/enums.py
kms/google/cloud/kms_v1/gapic/key_management_service_client.py
kms/google/cloud/kms_v1/gapic/transports/key_management_service_grpc_transport.py
logging/google/cloud/logging_v2/gapic/logging_service_v2_client.py
monitoring/google/cloud/monitoring_v3/gapic/alert_policy_service_client.py
monitoring/google/cloud/monitoring_v3/gapic/enums.py
monitoring/google/cloud/monitoring_v3/gapic/metric_service_client.py
phishingprotection/google/cloud/phishingprotection_v1beta1/gapic/phishing_protection_service_client.py
pubsub/google/cloud/pubsub_v1/gapic/publisher_client.py
pubsub/google/cloud/pubsub_v1/gapic/subscriber_client.py
pubsub/google/cloud/pubsub_v1/gapic/transports/publisher_grpc_transport.py
pubsub/google/cloud/pubsub_v1/gapic/transports/subscriber_grpc_transport.py
recommender/google/cloud/recommender_v1beta1/gapic/recommender_client.py
redis/google/cloud/redis_v1/gapic/cloud_redis_client.py
redis/google/cloud/redis_v1/gapic/enums.py
redis/google/cloud/redis_v1beta1/gapic/cloud_redis_client.py
redis/google/cloud/redis_v1beta1/gapic/enums.py
securitycenter/google/cloud/securitycenter_v1/gapic/enums.py
securitycenter/google/cloud/securitycenter_v1/gapic/security_center_client.py
securitycenter/google/cloud/securitycenter_v1/gapic/transports/security_center_grpc_transport.py
securitycenter/google/cloud/securitycenter_v1beta1/gapic/enums.py
securitycenter/google/cloud/securitycenter_v1beta1/gapic/security_center_client.py
securitycenter/google/cloud/securitycenter_v1beta1/gapic/transports/security_center_grpc_transport.py
spanner/docs/gapic/v1/transactions.rst
spanner/google/cloud/spanner_admin_database_v1/gapic/database_admin_client.py
spanner/google/cloud/spanner_admin_database_v1/gapic/transports/database_admin_grpc_transport.py
spanner/google/cloud/spanner_admin_instance_v1/gapic/instance_admin_client.py
spanner/google/cloud/spanner_admin_instance_v1/gapic/transports/instance_admin_grpc_transport.py
spanner/google/cloud/spanner_v1/gapic/enums.py
spanner/google/cloud/spanner_v1/gapic/spanner_client.py
spanner/google/cloud/spanner_v1/gapic/transports/spanner_grpc_transport.py
speech/google/cloud/speech_v1/gapic/enums.py
speech/google/cloud/speech_v1p1beta1/gapic/enums.py
talent/google/cloud/talent_v4beta1/gapic/application_service_client.py
talent/google/cloud/talent_v4beta1/gapic/company_service_client.py
talent/google/cloud/talent_v4beta1/gapic/completion_client.py
talent/google/cloud/talent_v4beta1/gapic/enums.py
talent/google/cloud/talent_v4beta1/gapic/event_service_client.py
talent/google/cloud/talent_v4beta1/gapic/job_service_client.py
talent/google/cloud/talent_v4beta1/gapic/profile_service_client.py
talent/google/cloud/talent_v4beta1/gapic/tenant_service_client.py
tasks/google/cloud/tasks_v2/gapic/cloud_tasks_client.py
tasks/google/cloud/tasks_v2beta2/gapic/cloud_tasks_client.py
tasks/google/cloud/tasks_v2beta3/gapic/cloud_tasks_client.py
texttospeech/google/cloud/texttospeech_v1/gapic/text_to_speech_client.py
texttospeech/google/cloud/texttospeech_v1beta1/gapic/text_to_speech_client.py
trace/google/cloud/trace_v2/gapic/trace_service_client.py
translate/google/cloud/translate_v3/gapic/translation_service_client.py
translate/google/cloud/translate_v3/gapic/transports/translation_service_grpc_transport.py
translate/google/cloud/translate_v3beta1/gapic/translation_service_client.py
translate/google/cloud/translate_v3beta1/gapic/transports/translation_service_grpc_transport.py
vision/google/cloud/vision_v1/gapic/product_search_client.py
vision/google/cloud/vision_v1/gapic/transports/product_search_grpc_transport.py
vision/google/cloud/vision_v1p1beta1/gapic/enums.py
vision/google/cloud/vision_v1p3beta1/gapic/product_search_client.py
vision/google/cloud/vision_v1p3beta1/gapic/transports/product_search_grpc_transport.py
vision/google/cloud/vision_v1p4beta1/gapic/product_search_client.py
vision/google/cloud/vision_v1p4beta1/gapic/transports/product_search_grpc_transport.py
websecurityscanner/google/cloud/websecurityscanner_v1alpha/gapic/enums.py
websecurityscanner/google/cloud/websecurityscanner_v1alpha/gapic/web_security_scanner_client.py
websecurityscanner/google/cloud/websecurityscanner_v1beta/gapic/enums.py
websecurityscanner/google/cloud/websecurityscanner_v1beta/gapic/web_security_scanner_client.py

irm/synth.py has this workaround, which I guess we could propagate everywhere:

s.replace("google/**/*.py", r"\\_", "_")
craigcitro commented 4 years ago

Ah, thanks for digging @tseaver! I'm happy to file some bugs upstream on gapic-generator and protoc.

Thinking out loud: rather than try to correct the backslashes, would it be safer to prefix docstrings with r? (It seems like a safer solution, but I'm sure there's some different pathology I'm not thinking of ...)

tirkarthi commented 4 years ago

It doesn't stop just with \_ there are also other cases. Using find . -iname '*.py' | xargs -P 4 -I{} python3.8 -Wall -m py_compile {} is a better option. Attached is a full log. Escaping them or using raw strings is a better idea. In case you want to use raw strings I have a sample script to automatically add them and then manually validate it : https://github.com/tirkarthi/escape_sequence_fixer

google-cloud-warnings.txt

meredithslota commented 3 years ago

@tseaver The linked issues in your comment (https://github.com/googleapis/python-bigquery/issues/15#issuecomment-551228118) are both closed now - is this still actual, do you think?

fhinkel commented 3 years ago

Greetings, we're closing this. Looks like the issue got resolved. Please let us know if the issue needs to be reopened.