0

私は単純なスパインサービスを持っています:

class JiraAdapter(ServiceBase):
    @srpc(Unicode, String, Unicode, _returns=Status)
    def CreateJiraIssueWithBase64Attachment(summary, base64attachment, attachment_filename):
        status = Status
        try:
            newkey = jira_client.createWithBase64Attachment(summary, base64attachment, attachment_filename)
            status.Code = StatusCodes.IssueCreated
            status.Message = unicode(newkey)
        except Exception as e:
            status.Code = StatusCodes.InternalError
            status.Message = u'Internal Exception: %s' % e.message
        return status

問題は、一部のプログラムが生成された base64string に 60 文字ごとに「\n」を挿入し、それがサービスのメソッドにエスケープ (「\\n」) されて奇妙な動作を引き起こすことです。これを回避するための設定などはありますか?

4

1 に答える 1

0

まず、投稿したコードに関するコメント:

  1. タイプをインスタンス化する必要があります(つまりstatus = Status()、の代わりにstatus = Status)。現状では、クラスにクラス属性を設定していますStatusこれは間違っているだけでなく、適切にロックせずにグローバル状態を変更することで競合状態を作り出しています。

  2. Jiraにはバイナリデータで問題を作成する方法がありますか?ByteArraybase64のエンコード/デコードを処理するものを使用できます。ByteArray文字列のシーケンスとして逆シリアル化されることに注意してください。

  3. カスタムbase64タイプを定義できます。

    Base64String = String(pattern='[0-9a-zA-Z/+=]+')
    

    String...そして、検証と一緒にプレーンの代わりにそれを使用して、無効な入力を簡単に拒否します。

  4. 「Status」オブジェクトを返す代わりに、必要に応じて例外を発生させるだけです(または、元の例外をバブルアップさせることもできます)。例外も、通常のオブジェクトと同じようにシリアル化されます。ただし、APIをどのように使用するかによって異なるため、これを決定します。

今あなたの元の質問のために:

ここで行う正しいことは、エスケープしている'\ n'(つまり、0x0a)をr "\ n"(つまり、0x5c 0x6e)として修正することであることに同意します。

あなたがそれに対処したいのであれば、私はあなたのコメントの解決策を推測します(すなわちbase64attachment = base64attachment.decode('string-escape')、最良の解決策でしょう。

それがお役に立てば幸いです。

よろしくお願いします、

于 2013-03-13T10:50:07.513 に答える