
Maksim
05.12.2017
09:56:12
не совсем понял в чем суть

Kirill
05.12.2017
09:57:19
Это мне?)
Админка для слак-бота, если кто-то пишет в слак команду (хочу уйти в среду) , бот отправляет менеджерам в канал запрос (юзернейм хочет уйти в среду), один из менеджеров отвечает на запрос (да, уходи), юзер в пм получает ответ (менеджер сказал 'да, уходи')
В админке можно менять канал, куда пишет бот и смотреть статистику по всем запросам

Google


Artem
05.12.2017
10:04:06
https://lemki.pythonanywhere.com/ https://github.com/lemki/ask_leave_slack_bot
@staticmethod
def add_thread(data):
workspace = Workspace.objects.get(team_id=data.get('team_id'))
event = data.get('event')
if event.get('thread_ts'):
request = Request.objects.get(ts=event.get('thread_ts'))
if request:
slack_client = SlackClient(workspace.bot_access_token)
user_info = slack_client.api_call(
'users.info',
user=event.get('user'),
)
тут если не будет какого-либо интснаса из модели, то get() вернет эексепшн
и сама проверка if request: не проканает
request.is_answered = True
request.save()
тута, если апдейтишь поле is_answered, то апдейти только его:
requests.save(updated_fields=['is_answered'])
workspaces = Workspace.objects.filter(slackuser__user=user)
for workspace in workspaces:
request_objects = Request.objects.order_by('-created').filter(workspace=workspace)
slack_workspace = {
'team': workspace,
}
slack_requests = list()
ух держись тут с колчиесвом запросов в request модельку


Kirill
05.12.2017
10:07:59
У меня не хочет работать префреш релейтед)

Artem
05.12.2017
10:08:16
prefetch_related ?

Kirill
05.12.2017
10:08:48
Ну да, я так понимаю достаточно было выгрести workspaces
А на темплейте уже выводить реквесты

Artem
05.12.2017
10:10:10
context['slack_list_admin'] = SlackUser.objects.filter(is_admin=True, user=self.request.user)
context['slack_list_user'] = SlackUser.objects.filter(is_admin=False, user=self.request.user)
тут возможно ты получишь только одного пользователя, хотя могу сомневаться, но получи тут SlackUser без проверки нан is_admin, и потом циклом разгреби с проверкой на этот ключ в два массива, и их прокидывай

Kirill
05.12.2017
10:12:28
Оки, спасибо!

Artem
05.12.2017
10:12:43
а так, вполне аккуртно и читабельно

Igor
05.12.2017
10:19:58
Напомните, плиз, пакет, который при загрузке изображений будет их сжимать

Dmitriy
05.12.2017
10:20:41

Google

Admin
ERROR: S client not available

Igor
05.12.2017
10:22:18
да, спасибо))
смотрю пример:
x50 = ImageSpecField([
Adjust(contrast=1.2, sharpness=1.1),
ResizeToFit(50, 50, False),
],
source='logo',
options={
'quality': 90,
'progressive': True,
},
)а как задать, что бы пропорции сохранялись в изображении?

Ruslan
05.12.2017
10:25:09
прочитать доку, там можно было указать сохранение пропорций
обычно хватало указать одну из размерностей, дальше оно само соображало

Dan
05.12.2017
10:25:55
при ResizeToFit он сохраняет пропорции
и обрезает максимальную сторону до указаной
там несколько функций

Dmytro
05.12.2017
10:29:37
С ngrok проблемы вечно. У меня так одна апишка от ФБ была с непредсказуемый поведением.