code: def generate_upload_policy(self, conditions, expiration=None, client=None):
          
          client = self._require_client(client)
          credentials = client._base_connection.credentials
          _signing.ensure_signed_credentials(credentials)
  
          if expiration is None:
              expiration = _NOW() + datetime.timedelta(hours=1)
  
          conditions = conditions + [{"bucket": self.name}]
  
          policy_document = {
              "expiration": _datetime_to_rfc3339(expiration),
              "conditions": conditions,
          }
  
          encoded_policy_document = base64.b64encode(
              json.dumps(policy_document).encode("utf-8")
          )
          signature = base64.b64encode(credentials.sign_bytes(encoded_policy_document))
  
          fields = {
              "bucket": self.name,
              "GoogleAccessId": credentials.signer_email,
              "policy": encoded_policy_document.decode("utf-8"),
              "signature": signature.decode("utf-8"),
          }
  
          return fields
docs: Create a signed upload policy for uploading objects.
  
          This method generates and signs a policy document. You can use
          `policy documents`_ to allow visitors to a website to upload files to
          Google Cloud Storage without giving them direct write access.
  
          For example:
  
          .. literalinclude:: snippets.py
              :start-after: [START policy_document]
              :end-before: [END policy_document]
  
          .. _policy documents:
              https://cloud.google.com/storage/docs/xml-api\
              /post-object#policydocument
  
          :type expiration: datetime
          :param expiration: Optional expiration in UTC. If not specified, the
                             policy will expire in 1 hour.
  
          :type conditions: list
          :param conditions: A list of conditions as described in the
                            `policy documents`_ documentation.
  
          :type client: :class:`~google.cloud.storage.client.Client`
          :param client: Optional. The client to use.  If not passed, falls back
                         to the ``client`` stored on the current bucket.
  
          :rtype: dict
          :returns: A dictionary of (form field name, form field value) of form
                    fields that should be added to your HTML upload form in order
                    to attach the signature.