2018年1月11日 星期四

(暫存) Python Dependency Management

參考資料

  1. Maven equivalent for python
  2. Python深入:Distutils发布Python模块

(暫存) AWS Step Function

名詞
  • terminal state:代表會讓流程結束的 State。具體有三種表現方式:
    1. State 具有 “End”: true 這個屬性。
    2. State 的種類是 “Type”: “Succeed” 或者 “Type”: “Fail”
訊息傳遞

在 Step Function 的每個 State 之間,預設狀況是呼叫一個 Task 時,Task 的回覆會成為 State 的 Output
然後原因是因為預設的 OutputPath 是 ‘$’。這裡 OutputPath 代表的是 Task 回覆的東西,要覆蓋到哪裡去。
如果 OutputPath 設為 null,表示回覆的內容不覆蓋,此時 State 的 Output 就會是 State 的 Input。
但如果 OutputPath 設定為像是 ‘$.result’ 的話,那麼 State 的 Output 就會是原本的 Input 再加上 result 這個 key。

參考資料
  1. Iterating with AWS Step Functions
  2. Forum: AWS Step Functions >Thread: Dynamic number of parallel tasks
  3. Amazon States Language

2018年1月10日 星期三

Python 的時間處理

字串轉時間

假設字串是「Wed, 10 Jan 2018 08:09:13 +0000」,可以使用這樣的 Pattern 來解析:

from datetime import datetime

time_text = 'Wed, 10 Jan 2018 08:09:13 +0000'
datetime.strptime(time_text, '%a, %d %b %Y %H:%M:%S %z')

其中 Pattern 的寫法可以參考官方的文件 [1]。

取得帶有時區資訊的現在時間
需要特別這麼做的原因,是因為如果是直接使用 datetime.now() 的話,得到的時間是沒有時區的
這在需要做時間比較時有可能會有問題,尤其在要比較的時間本身就有時區資訊的話,Python 會回傳錯誤訊息。

from datetime import datetime, timezone

datetime.now(timezone.utc)
計算時間
取得三小時前的時間

from datetime import datetime, timedelta, timezone

datetime.now(timezone.utc) - timedelta(hours=3)
參考資料
  1. strptime
  2. Python get current time in right timezone [duplicate]

2018年1月9日 星期二

AWS DynamoDB SDK v2 基礎使用(三):寫入資料

DynamoDB 不得不說,其實表達的格式相當囉唆~
所以想要存取 DynamoDB,無論如何程式碼都會寫得有點冗長。
而其中因為 Java 又是格式嚴謹的語言,於是又比別的語言再更囉唆一些……。

2018年1月3日 星期三

Python 的日誌

Python 內建就有個 logging 的套件 [1],可以使用設定檔來控制 log 的輸出。
不過實務上有一點小地方需要注意。

2017年12月28日 星期四

在 AWS Lambda 的 Python 程式匯入額外的套件

AWS Lambda 的執行環境有預設匯入的套件
如果使用了其他的套件,Python 程式就會拋出找不到套件的錯誤。

從 AWS 的官方文件 [1] 中,可以看出關於這個問題的解決方法
就是事先把套件裝進程式裡,當成是程式自身的一部分,一起打包送進 AWS Lambda。

具體來說,也就是假設我的 Python 程式的資料夾是放在 D:\python\my_project
則可以使用以下的指令,把套件指定安裝到專案資料夾中。

pip install requests -t D:\python\my_project

而做完後,就會看到專案資料夾跑出一大堆資料夾和檔案
之後要上傳到 AWS Lambda 時,把整個資料夾(也就是 D:\python\mu_project\* )壓縮成 zip
一起上傳到 AWS Lambda 即可。

參考資料
  1. Creating a Deployment Package (Python)

2017年12月21日 星期四

AWS SDK v2 疑似是 BUG 的 exclusiveStartKey?

這只是快速先紀錄一下目前遇到的狀況,但還沒有嚴謹地確認是不是其他邏輯造成的…..。

2017年12月19日 星期二

SLF4J 與其他 logging framework 實作綁定與橋接的關聯

使用 SLF4J 的時候,同時使用很多開源函式庫,會很容易導致各種 log 跑不出來或者 dependency 衝突的問題
本質上是因為不同開源函式庫,各自使用了不同的 logging framework
因而導致了 log 被輸出到沒有被設定的實作,或者相同的實作被重複綁定等等。