def test_register_user_failed(self): usr = UserModel( username=self.first_user.username, password=self.first_user.password, email=self.first_user.email ) response_body = UserApi.register_user(usr).json() self.check_error(response_body, 'Username {} already exist'.format(usr.username)) usr.username = random_string(7) response_body = UserApi.register_user(usr).json() self.check_error(response_body, 'Email {} already exist'.format(usr.email.lower())) usr.email = random_string(7) response_body = UserApi.register_user(usr).json() self.check_error(response_body, 'Not valid email') usr.email = "{}@{}.{}".format(random_string(7), random_string(3), random_string(2)) usr.username = random_string(6) response_body = UserApi.register_user(usr).json() self.check_error(response_body, "Username must be greater than 6 characters") usr.username = random_string(7) usr.password = random_string(6) response_body = UserApi.register_user(usr).json() self.check_error(response_body, "Password must be greater than 6 characters")
def test_users_login(self): response_body = UserApi.login_user(self.first_user).json() self.check_user_view_model(self.first_user, response_body) self.first_user.token = response_body.get('token') response_body = UserApi.login_user(self.second_user).json() self.check_user_view_model(self.second_user, response_body) self.second_user.token = response_body.get('token')
def test_curr_user(self): response = UserApi.current_user(self.first_user.token).json() self.check_user_view_model(self.first_user, response) self.first_user.token = response.get('token') response = UserApi.current_user(self.second_user.token).json() self.check_user_view_model(self.second_user, response) self.second_user.token = response.get('token')
def test_register_users(self): response_body = UserApi.register_user(self.first_user).json() self.check_user_register_success(self.first_user, response_body) self.first_user.token = response_body.get('token') self.first_user.id = response_body.get('user').get('id') response_body = UserApi.register_user(self.second_user).json() self.check_user_register_success(self.second_user, response_body) self.second_user.token = response_body.get('token') self.second_user.id = response_body.get('user').get('id')
def test_login_failed(self): usr = UserModel( username = self.first_user.username, password = random_string(7) ) response_body = UserApi.login_user(usr).json() self.check_error(response_body, "Login failed")
def __init__(self): self.user_storage = {} self.api = UserApi('http://urbanalerts.ml', 'alice') self.request = None self.response = None self.tags = { "Урбанистика": "Urban", "Общество": "Social", "Экология": "Eco" } self.meanings = {"новое": "new_problem", "проблемы": "get_problems"} self.conversations = { "new_problem": { 0: self.get_title, 1: self.get_description, 2: self.get_address, 3: self.get_tag }, "new_": {} }
class AliceDialog: def __init__(self): self.user_storage = {} self.api = UserApi('http://urbanalerts.ml', 'alice') self.request = None self.response = None self.tags = { "Урбанистика": "Urban", "Общество": "Social", "Экология": "Eco" } self.meanings = {"новое": "new_problem", "проблемы": "get_problems"} self.conversations = { "new_problem": { 0: self.get_title, 1: self.get_description, 2: self.get_address, 3: self.get_tag }, "new_": {} } # Анализ сообщений для соотнесения с ключевыми словами def parse_message(self, message: str): message = message.split()[0].lower() # TODO обработку сообщений if message in list(self.meanings.keys()): meaning = self.meanings[message] else: meaning = "unclassed" return meaning # Выполнение на основании ключевых слов def execute(self, meaning: str): message = "" # if meaning == "profile": # response = self.api.user_profile(self.request.user_id, "alice") # pass # if response.status: # self.response.set_text(f"{response.text}") if meaning == "new_problem": message = 'Если хотите прервать действие скажите/введите "Отмена". "Дайте название проблеме.' self.user_storage["conversation"] = "new_problem" elif meaning == "get_problems": self.get_problems() # elif meaning == "stats": # pass # elif meaning == "comments/add": # pass # elif meaning == "problems/solved": # pass # elif meaning == "problems/all": # pass # elif meaning == "problems/active": # pass if meaning == "unclassed": self.response.set_text( f"Введите/скажите что-нибудь из списка: {', '.join(self.meanings)}" ) else: self.response.set_text(message) # Сброс диалоговых переменных def reset_conversation(self): self.user_storage["conversation"] = None self.user_storage["state"] = 0 self.user_storage["content"] = [] self.user_storage["buttons_mode"] = False # Функции для ConvHandler new # ================================================================================================================== def get_title(self): self.user_storage["state"] += 1 self.user_storage["content"].append(self.request.command) self.response.set_text("Дайте описание проблемы.") def get_description(self): self.user_storage["state"] += 1 self.user_storage["content"].append(self.request.command) self.response.set_text("Назовите адрес места с этой проблемой.") def get_address(self): self.user_storage["state"] += 1 self.user_storage["content"].append(self.request.command) self.response.set_text( f"Выберите один тег, подходящий для вашей проблемы, нажав на кнопку." ) buttons = [] for button in self.tags.keys(): buttons.append({ "title": button, "payload": { "pressed": True, "button": self.tags[button] }, "hide": True }) self.user_storage["buttons_mode"] = True self.response.set_buttons(buttons) def get_tag(self): tag = self.request.payload["button"] title, description, address = self.user_storage[ "content"] # tag уже присутствует как локальная переменная response = self.api.problem_new(title, description, tag, address) logger.info(response) self.response.set_text("Успешно отмечено.") self.reset_conversation() # Функции для ConvHandler get problems # ================================================================================================================== def get_problems(self): response = json.loads(self.api.get_problems().text) result = "" lenght = len(response) if len(response) > 5: lenght = 5 for i in range(lenght): result += f"{i+1} {response[i]['title']} {response[i]['description']} {response[i]['coors']}| " self.response.set_text( f"На данный момент актуальны следующие проблемы: {result}") # ================================================================================================================== # Основной обработчик def handle_dialog( self, request: AliceRequest ) -> AliceResponse: # alice_request, alice_response, session_storage self.request = request logger.info(request) self.response = AliceResponse(self.request) # Создаем тело ответа if self.request.is_new_session: self.user_storage["conversation"] = None self.user_storage["state"] = 0 self.user_storage["content"] = [] self.user_storage["buttons_mode"] = False self.response.set_text( 'Этот навык позволит вам оперативно опубликовывать ' 'экологические проблемы города, а также получать информацию по ним. ' 'Чтобы опубликовать проблему, скажите или введите "Новое", ' 'чтобы получить объявления - "Проблемы".') return self.response if self.user_storage["conversation"] is None: message = self.request.command.lower().strip() # .replace() # Предобработка message meaning = self.parse_message(message) self.execute(meaning) elif not self.user_storage["buttons_mode"]: if self.request.command.lower().strip() == "отмена": self.reset_conversation() self.response.set_text("Действие отменено") else: input_functions = self.user_storage["conversation"] state = self.user_storage["state"] self.conversations[input_functions][state]( ) # Запускаем функцию из очереди else: input_functions = self.user_storage["conversation"] state = self.user_storage["state"] self.conversations[input_functions][state]( ) # Запускаем функцию из очереди return self.response
def test_invalid_token(self): response = UserApi.current_user(random_string(16)) self.check_error(response.json(), "Invalid token")
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url from django.conf.urls import include from django.contrib import admin import views import settings from django.conf.urls.static import static from tastypie.api import Api from api import UserApi, BarCodeApi, SendToShopApi, ProductApi, InvoiceApi, ProductToShopApi, ShopApi v1_api = Api(api_name='v1') v1_api.register(UserApi()) v1_api.register(BarCodeApi()) v1_api.register(SendToShopApi()) v1_api.register(ProductApi()) v1_api.register(InvoiceApi()) v1_api.register(ShopApi()) v1_api.register(ProductToShopApi()) urlpatterns = [] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += [ url(r'^api/', include(v1_api.urls)), url(r'^admin/', admin.site.urls), url(r'^auth/', include('loginsys.urls')), url(r'^invoices/', views.invoices),
def __init__(self): self.users_data = {} self.user_api = UserApi('http://urbanalerts.ml', 'vk')
class BotMethods: def __init__(self): self.users_data = {} self.user_api = UserApi('http://urbanalerts.ml', 'vk') def start(self, bot: VkGroupBot, update: Update): if update.message == '!': bot.reply('Restarting dialog', remove_keyboard=True) return ConvIds.start user_id = update.from_id self.users_data[user_id] = {'state': ''} if bot.last_keyb is not None: row, col = bot.last_keyb.was_pressed(update.message) if row != -1: bot.reply(Replies.main_menu, keyboard=Keyb.menu) return ConvIds.main bot.reply(Replies.start_on, keyboard=Keyb.start) return ConvIds.start def main_menu(self, bot: VkGroupBot, update: Update): user_id = update.from_id self.users_data[user_id] = {'state': ''} row, col = Keyb.menu.was_pressed(update.message) if (row, col) == (0, 0): return self.new_problem(bot, update) elif (row, col) == (0, 1): return self.account(bot, update) elif (row, col) == (1, 0): bot.reply(Replies.menu_help) elif (row, col) == (2, 0): bot.reply(Replies.menu_about) else: bot.reply(Replies.press_keyb) return ConvIds.main def new_problem(self, bot: VkGroupBot, update: Update): user_id = update.from_id if self.users_data[user_id].get('data') is None: self.users_data[user_id] = {'state': 'title', 'data': {'title': '', 'photo': '', 'photo_id': '', 'descr': '', 'coord': '', 'tag': ''}} bot.reply(Replies.newprob_title, remove_keyboard=True) return ConvIds.new_problem state = self.users_data[user_id]['state'] if state == 'title': self.users_data[user_id]['data']['title'] = update.message bot.reply(Replies.newprob_photo, keyboard=Keyb.skip) state = 'photo' elif state == 'photo': if len(update.attachments) == 0: row, col = bot.last_keyb.was_pressed(update.message) if row == -1: bot.reply(Replies.newprob_photo_too_many) return ConvIds.new_problem self.users_data[user_id]['data']['photo'] = '' elif len(update.attachments) == 1: if update.attachments[0]['type'] == 'photo': photo = update.attachments[0]['photo'] biggest_photo = sorted(photo['sizes'], key=lambda x: -x['width'])[0]['url'] self.users_data[user_id]['data']['photo'] = biggest_photo # photo_id = f'photo{photo["owner_id"]}_{photo["id"]}_{photo["access_key"]}' photo_id = update.id self.users_data[user_id]['data']['photo_id'] = photo_id else: bot.reply(Replies.newprob_photo_too_many) return ConvIds.new_problem else: bot.reply(Replies.newprob_photo_too_many) return ConvIds.new_problem bot.reply(Replies.newprob_descr, remove_keyboard=True) state = 'descr' elif state == 'descr': self.users_data[user_id]['data']['descr'] = update.message bot.reply(Replies.newprob_coord, keyboard=Keyb.coords) state = 'coord' elif state == 'coord': row, col = bot.last_keyb.was_pressed(update.message) if (row, col) == (0, 0): bot.reply(Replies.newprob_coord_help) else: if update.geo: self.users_data[user_id]['data']['coord'] = (update.geo_latitude, update.geo_longitude) bot.reply(Replies.newprob_settg, keyboard=Keyb.tags) state = 'tag' else: bot.reply(Replies.newprob_coord) elif state == 'tag': if bot.last_keyb: row, col = bot.last_keyb.was_pressed(update.message) if row in [0, 1]: self.users_data[user_id]['data']['tag'] = bot.last_keyb.button_rows[row][col][0] problem_data = self.users_data[user_id]['data'] problem_str = Replies.newprob_apply.format(problem_data["title"], problem_data["descr"]) if problem_data['photo'] != '': bot.reply(problem_str, forward_messages=[self.users_data[user_id]['data']['photo_id']], keyboard=Keyb.apply) else: problem_str += ' Не загружена' bot.reply(problem_str, keyboard=Keyb.apply) state = 'apply' elif (row, col) == (2, 0): bot.reply(Replies.newprob_settg_help) return ConvIds.new_problem else: bot.reply(Replies.press_keyb) elif state == 'apply': row, col = bot.last_keyb.was_pressed(update.message) if (row, col) == (0, 0): # bot.reply(Replies.newprob_final_sending) data = self.users_data[user_id]['data'] # = API REQUEST = # tag_transformed = {'Экология': 'Eco', 'Урбанистика': 'Urban', 'Социальные проблемы': 'Social'}[data['tag']] self.user_api.problem_new(token='tg:123', title=data['title'], photo=data['photo'], description=data['descr'], tag=tag_transformed, latitude=data['coord'][0], longitude=data['coord'][1]) # = =========== = # bot.reply(Replies.newprob_final_ok, keyboard=Keyb.menu) return ConvIds.main elif (row, col) == (0, 1): bot.reply(Replies.newprob_final_canceld, keyboard=Keyb.menu) return ConvIds.main else: bot.reply(Replies.press_keyb) self.users_data[user_id]['state'] = state return ConvIds.new_problem def account(self, bot: VkGroupBot, update: Update): user_id = update.from_id if self.users_data[user_id]['state'] == '': self.users_data[user_id]['state'] = 'account' bot.reply(Replies.account_main, keyboard=Keyb.account_main) return ConvIds.account state = self.users_data[user_id]['state'] if state == 'account': row, col = bot.last_keyb.was_pressed(update.message) if (row, col) == (0, 0): state = 'sign up' bot.reply(Replies.account_regr, keyboard=Keyb.back) elif (row, col) == (0, 1): state = 'sign in' bot.reply(Replies.account_auth, keyboard=Keyb.back) elif (row, col) == (1, 0): bot.reply(Replies.back_main_menu, keyboard=Keyb.menu) return ConvIds.main else: bot.reply(Replies.press_keyb) elif state == 'sign in': bot.reply(Replies.account_sign_in, keyboard=Keyb.account_main) state = 'account' elif state == 'sign up': bot.reply(Replies.account_sign_in, keyboard=Keyb.account_main) state = 'account' self.users_data[user_id]['state'] = state return ConvIds.account