From b66c5c2b88b032ea1abfe8b8fd7094b5789076e6 Mon Sep 17 00:00:00 2001
From: Hanzhen Yi <hzyi@google.com>
Date: Mon, 27 Aug 2018 15:32:14 -0700
Subject: [PATCH 1/6] samplegen: convert binary type to str

---
 .../google/api/codegen/py/standalone_sample.snip   | 14 ++++++++++++++
 .../codegen/testdata/py/python_library.baseline    |  3 +++
 2 files changed, 17 insertions(+)

diff --git a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
index e576ffeb58..1bc8333248 100644
--- a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
+++ b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
@@ -35,6 +35,14 @@
       @end
 
 
+      # FIXME(hzyi): handle ListInitType, MapInitType and StructInitType correctly
+      @join line : sample.initCode.argDefaultLines
+        @if line.lineType == "SimpleInitLine"
+          @if line.typeName == "str"
+            {@convertBinaryToStr(line.identifier)}
+          @end
+        @end
+      @end
     @end
     @if sample.initCode.lines
       {@initCode(sample.initCode.lines)}
@@ -76,6 +84,12 @@
   @end
 @end
 
+@private convertBinaryToStr(identifier)
+  if isinstance({@identifier}, six.binary_type):
+    {@identifier} = {@identifier}.decode('utf-8')
+
+@end
+
 @private optionalArrayMethodSampleCodeNonStreaming(apiMethod, initCode)
   {@singularResponseSampleCode(apiMethod, initCode)}
 @end
diff --git a/src/test/java/com/google/api/codegen/testdata/py/python_library.baseline b/src/test/java/com/google/api/codegen/testdata/py/python_library.baseline
index f57f26d788..3f0229b6e9 100644
--- a/src/test/java/com/google/api/codegen/testdata/py/python_library.baseline
+++ b/src/test/java/com/google/api/codegen/testdata/py/python_library.baseline
@@ -4345,6 +4345,9 @@ def sample_publish_series(name):
 
   # name = 'Math'
 
+  if isinstance(name, six.binary_type):
+    name = name.decode('utf-8')
+
   shelf = {'name': name}
 
   # TODO: Initialize ``books``:

From db7cdcd3b06ad70df08f2f8a5b54dd639fc28e18 Mon Sep 17 00:00:00 2001
From: Hanzhen Yi <hzyi@google.com>
Date: Tue, 28 Aug 2018 17:04:58 -0700
Subject: [PATCH 2/6] import six

---
 .../api/codegen/py/standalone_sample.snip       | 17 ++++++++++++++++-
 .../codegen/testdata/py/python_library.baseline |  1 +
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
index 1bc8333248..d1e1404c24 100644
--- a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
+++ b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
@@ -23,7 +23,10 @@
   @# [START {@sample.regionTag}]
 
   {@importList(sample.initCode.importSection.appImports)}
-
+  @if needsImportSix(sample.initCode.argDefaultParams)
+    import six
+  @end
+  
   def sample_{@apiMethod.name}({@sampleFuncParam(sample.initCode.argDefaultParams)}):
     @# [START {@sample.regionTag}_core]
 
@@ -84,6 +87,18 @@
   @end
 @end
 
+@private needsImportSix(defaultParams)
+  @join param : defaultParams
+    @if param.lineType == "SimpleInitLine"
+      @if param.typeName == "str"
+        needsImportSix: TRUE
+      @end
+    @end
+  @end
+@end
+
+
+
 @private convertBinaryToStr(identifier)
   if isinstance({@identifier}, six.binary_type):
     {@identifier} = {@identifier}.decode('utf-8')
diff --git a/src/test/java/com/google/api/codegen/testdata/py/python_library.baseline b/src/test/java/com/google/api/codegen/testdata/py/python_library.baseline
index 3f0229b6e9..369dce0b59 100644
--- a/src/test/java/com/google/api/codegen/testdata/py/python_library.baseline
+++ b/src/test/java/com/google/api/codegen/testdata/py/python_library.baseline
@@ -4337,6 +4337,7 @@ def sample_monolog_about_book():
 # [START canonical]
 
 from google.cloud.example import library_v1
+import six
 
 def sample_publish_series(name):
   # [START canonical_core]

From 4f23afc5590c7196221ce5d1cba9a73b17665654 Mon Sep 17 00:00:00 2001
From: Hanzhen Yi <hzyi@google.com>
Date: Tue, 28 Aug 2018 17:13:42 -0700
Subject: [PATCH 3/6] format

---
 .../com/google/api/codegen/py/standalone_sample.snip      | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
index d1e1404c24..959c39007a 100644
--- a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
+++ b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
@@ -23,10 +23,10 @@
   @# [START {@sample.regionTag}]
 
   {@importList(sample.initCode.importSection.appImports)}
-  @if needsImportSix(sample.initCode.argDefaultParams)
+  @if shouldImportSix(sample.initCode.argDefaultParams)
     import six
   @end
-  
+
   def sample_{@apiMethod.name}({@sampleFuncParam(sample.initCode.argDefaultParams)}):
     @# [START {@sample.regionTag}_core]
 
@@ -87,7 +87,7 @@
   @end
 @end
 
-@private needsImportSix(defaultParams)
+@private shouldImportSix(defaultParams)
   @join param : defaultParams
     @if param.lineType == "SimpleInitLine"
       @if param.typeName == "str"
@@ -97,8 +97,6 @@
   @end
 @end
 
-
-
 @private convertBinaryToStr(identifier)
   if isinstance({@identifier}, six.binary_type):
     {@identifier} = {@identifier}.decode('utf-8')

From 667ab536d4003a3ae82cf798e62476cf63e79593 Mon Sep 17 00:00:00 2001
From: Hanzhen Yi <hzyi@google.com>
Date: Wed, 29 Aug 2018 17:50:22 -0700
Subject: [PATCH 4/6] refactor

---
 .../api/codegen/py/standalone_sample.snip     | 22 +++++++++----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
index 959c39007a..16d074a7fb 100644
--- a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
+++ b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
@@ -23,7 +23,7 @@
   @# [START {@sample.regionTag}]
 
   {@importList(sample.initCode.importSection.appImports)}
-  @if shouldImportSix(sample.initCode.argDefaultParams)
+  @if convertText(sample)
     import six
   @end
 
@@ -39,13 +39,7 @@
 
 
       # FIXME(hzyi): handle ListInitType, MapInitType and StructInitType correctly
-      @join line : sample.initCode.argDefaultLines
-        @if line.lineType == "SimpleInitLine"
-          @if line.typeName == "str"
-            {@convertBinaryToStr(line.identifier)}
-          @end
-        @end
-      @end
+      {@convertText(sample)}
     @end
     @if sample.initCode.lines
       {@initCode(sample.initCode.lines)}
@@ -97,10 +91,16 @@
   @end
 @end
 
-@private convertBinaryToStr(identifier)
-  if isinstance({@identifier}, six.binary_type):
-    {@identifier} = {@identifier}.decode('utf-8')
+@private convertText(sample)
+  @join line : sample.initCode.argDefaultLines
+    @if line.lineType == "SimpleInitLine"
+      @if line.typeName == "str"
+        if isinstance({@line.identifier}, six.binary_type):
+          {@line.identifier} = {@line.identifier}.decode('utf-8')
 
+      @end
+    @end
+  @end
 @end
 
 @private optionalArrayMethodSampleCodeNonStreaming(apiMethod, initCode)

From cd978837b9aeff6c88a66f9420bf5e05d1e87fb0 Mon Sep 17 00:00:00 2001
From: Hanzhen Yi <hzyi@google.com>
Date: Thu, 30 Aug 2018 09:55:54 -0700
Subject: [PATCH 5/6] code review

---
 .../api/codegen/py/standalone_sample.snip     | 97 +++++++++----------
 1 file changed, 45 insertions(+), 52 deletions(-)

diff --git a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
index 16d074a7fb..394300a368 100644
--- a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
+++ b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
@@ -23,56 +23,59 @@
   @# [START {@sample.regionTag}]
 
   {@importList(sample.initCode.importSection.appImports)}
-  @if convertText(sample)
-    import six
-  @end
+  @let convertTextCode = convertText(sample)
+    @if convertTextCode
+      import six
+      
+    @end
 
-  def sample_{@apiMethod.name}({@sampleFuncParam(sample.initCode.argDefaultParams)}):
-    @# [START {@sample.regionTag}_core]
+    def sample_{@apiMethod.name}({@sampleFuncParam(sample.initCode.argDefaultParams)}):
+      @# [START {@sample.regionTag}_core]
 
-    client = {@apiMethod.apiModuleName}.{@apiMethod.apiClassName}()
+      client = {@apiMethod.apiModuleName}.{@apiMethod.apiClassName}()
 
-    @if sample.initCode.argDefaultLines
-      @join line : util.pretty(initCode(sample.initCode.argDefaultLines))
-        @# {@line}
-      @end
+      @if sample.initCode.argDefaultLines
+        @join line : util.pretty(initCode(sample.initCode.argDefaultLines))
+          @# {@line}
+        @end
 
 
-      # FIXME(hzyi): handle ListInitType, MapInitType and StructInitType correctly
-      {@convertText(sample)}
-    @end
-    @if sample.initCode.lines
-      {@initCode(sample.initCode.lines)}
+        # FIXME(hzyi): handle ListInitType, MapInitType and StructInitType correctly
+        {@convertTextCode}
+      @end
+      @if sample.initCode.lines
+        {@initCode(sample.initCode.lines)}
 
-    @end
-    @switch sample.callingForm
-    @case "Request"
-      {@optionalArrayMethodSampleCodeNonStreaming(apiMethod, sample.initCode)}
-      {@processResponse(sample)}
-    @case "RequestPaged"
-      {@pagedOptionalArrayMethodSampleCodePaged(apiMethod, sample)}
-    @case "RequestPagedAll"
-      {@pagedOptionalArrayMethodSampleCodeAll(apiMethod, sample)}
-    @case "RequestStreamingBidi"
-      {@optionalArrayMethodSampleCodeBidiStreaming(apiMethod, sample.initCode)}
-      {@processResponse(sample)}
-    @case "RequestStreamingClient"
-      {@optionalArrayMethodSampleCodeClientStreaming(apiMethod, sample.initCode)}
-      {@processResponse(sample)}
-    @case "RequestStreamingServer"
-      {@optionalArrayMethodSampleCodeServerStreaming(apiMethod, sample.initCode)}
-      {@processResponse(sample)}
-    @case "LongRunningPromise"
-      {@lroSampleCode(apiMethod, sample.initCode)}
-      {@processResponse(sample)}
-    @default
-      $unhandledCallingForm: {@sample.callingForm} in sample "{@apiMethod.getClass.getSimpleName}"$
-    @end
+      @end
+      @switch sample.callingForm
+      @case "Request"
+        {@optionalArrayMethodSampleCodeNonStreaming(apiMethod, sample.initCode)}
+        {@processResponse(sample)}
+      @case "RequestPaged"
+        {@pagedOptionalArrayMethodSampleCodePaged(apiMethod, sample)}
+      @case "RequestPagedAll"
+        {@pagedOptionalArrayMethodSampleCodeAll(apiMethod, sample)}
+      @case "RequestStreamingBidi"
+        {@optionalArrayMethodSampleCodeBidiStreaming(apiMethod, sample.initCode)}
+        {@processResponse(sample)}
+      @case "RequestStreamingClient"
+        {@optionalArrayMethodSampleCodeClientStreaming(apiMethod, sample.initCode)}
+        {@processResponse(sample)}
+      @case "RequestStreamingServer"
+        {@optionalArrayMethodSampleCodeServerStreaming(apiMethod, sample.initCode)}
+        {@processResponse(sample)}
+      @case "LongRunningPromise"
+        {@lroSampleCode(apiMethod, sample.initCode)}
+        {@processResponse(sample)}
+      @default
+        $unhandledCallingForm: {@sample.callingForm} in sample "{@apiMethod.getClass.getSimpleName}"$
+      @end
 
-    @# [END {@sample.regionTag}_core]
+      @# [END {@sample.regionTag}_core]
 
-  @# [END {@sample.regionTag}]
-  # FIXME(pongad): add a main method
+    @# [END {@sample.regionTag}]
+    # FIXME(pongad): add a main method
+  @end
 @end
 
 @private sampleFuncParam(defaultParams)
@@ -81,16 +84,6 @@
   @end
 @end
 
-@private shouldImportSix(defaultParams)
-  @join param : defaultParams
-    @if param.lineType == "SimpleInitLine"
-      @if param.typeName == "str"
-        needsImportSix: TRUE
-      @end
-    @end
-  @end
-@end
-
 @private convertText(sample)
   @join line : sample.initCode.argDefaultLines
     @if line.lineType == "SimpleInitLine"

From c1e7bc3b0f0ccfb5c9b80e70101e001df1989cd1 Mon Sep 17 00:00:00 2001
From: Hanzhen Yi <hzyi@google.com>
Date: Thu, 30 Aug 2018 12:54:14 -0700
Subject: [PATCH 6/6] conflicts

---
 .../com/google/api/codegen/py/standalone_sample.snip         | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
index f8ad6406ad..1b810af51e 100644
--- a/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
+++ b/src/main/resources/com/google/api/codegen/py/standalone_sample.snip
@@ -73,8 +73,9 @@
         $unhandledCallingForm: {@sample.callingForm} in sample "{@apiMethod.getClass.getSimpleName}"$
       @end
 
-    @# [END {@sample.regionTag}_core]
-  @# [END {@sample.regionTag}]
+      @# [END {@sample.regionTag}_core]
+    @# [END {@sample.regionTag}]
+  @end
 
   def main():
     @# FIXME: Convert argv from strings to the correct types.