Рубрики
Без рубрики

Играешь с Хайландом

LISP Python AWS Boto3 DynamoDB

Автор оригинала: Brian Jones.

В последнее время я пишу python, играю с различными лиспами (в основном common lisp) и много работаю на AWS. Поэтому я решил написать быстрый пост на классном лиспе на основе python, с которым я играл около 45 минут.

Хайланд

Вот как я настроил свою среду для быстрой разработки Hyland (официальные документы тоже довольно хороши. Я встал и побежал за 15 минут, а то и меньше.)

$ pyenv local 3.72 # this is just the latest I had installed already
$ pyenv virtualenv tmp-hy
$ pyenv activate 3.7.2/envs/tmp-hy
$ pip install git+https://github.com/hylang/hy.git

Эти 3 заклинания дадут вам хорошую изолированную установку Hylan g. Вы можете запустить интерпретатор, набрав просто hy или вы можете дать ему файл для жевания, сказав hy some-code.hy .

Поскольку в последнее время я часто использую DynamoDB, я решил попробовать немного boto3. Оказывается, это довольно просто.

если вы следуете за мной, убедитесь, что вы уже $ pip install git+https://github.com/hylang/hy.git а также обязательно запустите: $ pip install boto3

(import boto3)
(setv dynamo-resource (boto3.resource "dynamodb"))
(setv blog-post-table (dynamo-resource.Table "blog-posts"))
(setv key-expr {
  "id" "7"
  "md5" "ef7582d3ccac18418063bd19715614af" })
(print key-expr)
(setv item (get  (blog-post-table.get-item :Key key-expr ) "Item"))
(print item)

если вы введете: hy lispy-boto.hy он распечатает сообщение в блоге.

Еще лучше, мы могли бы определить такую функцию, как:

(setv dynamo-resource (boto3.resource "dynamodb"))

(defn lispy-get-item [hash_key_name hash_key_val range_key_name range_key_val table_name]
  (setv dynamo-table (dynamo-resource.Table table_name))
  (setv key-expr {
    hash_key_name hash_key_val
    range_key_name range_key_val })
  (get (dynamo-table.get-item :Key key-expr) "Item"))

и мы можем импортировать эту функцию в обычный ‘ol python, как:

import hy
lispy_boto = __import__("lispy-boto") # hack because I named the file with a `-`

item = lispy_boto.lispy_get_item(
  "id",
  "7",
  "md5",
  "ef7582d3ccac18418063bd19715614af",
  "blog-posts") # You could use kwargs to make this more pythonic

print(item)

Это всего лишь царапина на поверхности, но я был удивлен, насколько это было легко и как мало потребовалось возиться.

Hyland можно найти на github и docs не так уж и плохо. Действительно классный проект пишется здесь…