Собрали в одном месте самые важные ссылки
и сделали Тренажер IT-инцидентов для DevOps/SRE
>>> from useful_collections.dict import ImmutableDict
>>> my_immutable_dict = ImmutableDict(key='immutable val')
# accessing dict item
>>> my_immutable_dict['key']
'immutable val'
# accessing dict item as attribute
>>> my_immutable_dict.key
'immutable val'
# trying to override dict value
>>> my_immutable_dict['key'] = 'new value'
Traceback (most recent call last):
...
useful_collections.dict.ForbiddenSetItem: __setitem__ method is forbidden for ImmutableDict objects
>>> my_immutable_dict.key = 'try again'
Traceback (most recent call last):
...
useful_collections.dict.ForbiddenSetAttr: __setattr__ method is forbidden for ImmutableDict objects
Несколько примеров сгенерированной музыки:
import handwritingio
hwio = handwritingio.Client('KEY', 'SECRET')
png = hwio.render_png({
'handwriting_id': '2D5S46A80003', # found in our catalog or by listing handwritings
'text': 'Handwriting with Python!',
'height': 'auto',
})
with open('handwriting.png', 'wb') as f:
f.write(png)
Довольно развитый аналог celery на основе Redis
Планировщик задачи может работать с разными БД, даже с обычной памятью. В качестве event loop может использовать asyncio
Инструмент разрабатывали с учетом дружелюбности к разработчику. Фреймворк работает с любыми объектами в формальном виде
Проект-костыль, который позволяет запустить автосборку статики. В реализации применяется обычный while True цикл.
Интересный проект, который пытается упростить написание софта для Интернета вешей. Работает это чудо на основе websocket и wamp протокола.
import bottle
import bottle_pymysql
app = bottle.Bottle()
# dbhost is optional, default is localhost
plugin = bottle_pymysql.Plugin(dbuser='user', dbpass='pass', dbname='some_db')
app.install(plugin)
@app.route('/show/<item>')
def show(item, pymydb):
pymydb.execute('SELECT * from items where name="%s"', (item,))
row = pymydb.fetchone()
if row:
return template('showitem', page=row)
return HTTPError(404, "Page not found")
from rc import CacheCluster
cache = CacheCluster({
'cache01': {'host': 'redis-host01'},
'cache02': {'host': 'redis-host02'},
'cache03': {'host': 'redis-host03'},
'cache04': {'host': 'redis-host04', 'db': 1},
})
Модуль позволяет настроить порядок исполнения тестов исходя из их названий. Вы можете разделить тесты на unit, интеграционные.
Этот boilerplate/Шаблон реализует поддержку различных соц.сетей, прикручен Django Rest Framework, документация и много чего еще.
import sqlite3 import tornado.ioloop import tornado.web import tornado_jsonapi.handlers import tornado_jsonapi.resource schema = { "title": "post", "properties": { "text": { "type": "string" }, "author": { "type": "string" } } } res = tornado_jsonapi.resource.DBAPI2Resource( schema, sqlite3, sqlite3.connect(':memory:')) res._create_table() application = tornado.web.Application([ ( r"/api/posts/([^/]*)", tornado_jsonapi.handlers.APIHandler, dict(resource=res) ) ]) application.listen(8888) tornado.ioloop.IOLoop.current().start()