- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
def in_params(json, value, par_name, par_type, key=None):
"""
@param: par_type in [int, float, str, bool]
@return: is parameter in json
"""
if isinstance(json, dict):
return any(in_params(v, value, par_name, par_type, key=k) for k, v in json.iteritems())
if isinstance(json, list):
return any(in_params(e, value, par_name, par_type, key=None) for e in json)
# it's time to check value
if par_name and par_name != key:
return False
try:
if par_type == 'str':
return json.lower() == value.lower()
# type cast
return eval("""%s(%s) == %s(%s)""" % (par_type, json, par_type, value))
except:
return False
Pythoner 23.04.2014 16:35 # +1
1) неизвестен ее тип
2) автор не боится в эвал ее передавать, если это строка
........
сорь, ступил на счет 2
guest 23.04.2014 17:07 # 0
Бля, это эпично.
Что такое par_name?
orion 23.04.2014 17:10 # 0
guest 23.04.2014 17:13 # 0
orion 23.04.2014 17:29 # 0
orion 23.04.2014 17:33 # 0
в некоторых json'ах значения - 0, в некоторых '0' или 0.0. Хочется найти все нули
guest 23.04.2014 18:53 # +2
Запомни, eval не нужен. Помимо потенциальной уязвимости, он может выдать что угодно.
Алсо, хорошо прописывать не только назначение, но и типы переменных.
Ну и вообще код укуренный, если приебываться.
orion 23.04.2014 23:13 # 0
не пойдет. тип может быть bool
guest 24.04.2014 01:23 # +1
>тип может быть bool
facepalm.jphg
orion 24.04.2014 10:14 # 0
bormand 24.04.2014 10:14 # 0
orion 24.04.2014 12:03 # 0
Fai 23.04.2014 23:41 # +1
Короче пиздец.
WGH 24.04.2014 00:47 # +5
И какую бы не решает, решает он её через жопу.
guest 24.04.2014 01:24 # +4
orion 24.04.2014 10:13 # 0
юскейс, например, такой - найти все документы, у которых по ключу 'BlahBlahEnabled' лежит труъ (хотя там может быть например 1 или 1.0 или True)
roman-kashitsyn 24.04.2014 10:16 # 0
orion 24.04.2014 10:20 # 0
roman-kashitsyn 24.04.2014 10:21 # +3
orion 24.04.2014 10:34 # 0
roman-kashitsyn 24.04.2014 10:39 # +2
orion 24.04.2014 11:11 # 0
Вообще я немного наврал - схема у документов есть и хранится она тоже в монге. Но меняться она может хоть каждую минуту. Как только это понадобится разрабам игры.
И можно было бы один раз по схеме найти путь до параметра(также выполнить рекурсивный обход) и брать значения по этому найденному пути.
Но скорость поиска вполне сносная, да и пользуются им редко:) http://risovach.ru/upload/2013/10/mem/vovka_32787390_orig_.jpeg
roman-kashitsyn 24.04.2014 11:26 # +2
Не обязательно в топлевел и не обязательно все. Можно и в enabledFeatures.BlaBla, главное, чтобы был известный, фиксированный путь.
guest 24.04.2014 12:11 # 0
bormand 24.04.2014 12:12 # 0
guest 24.04.2014 12:17 # 0
bormand 24.04.2014 12:28 # +1
guest 24.04.2014 12:53 # 0
bormand 24.04.2014 12:55 # +2
guest 24.04.2014 13:35 # 0
Ну главная проблема тут - автору пришла в голову идея, и он реализует ее напролом.
bormand 24.04.2014 13:41 # 0
> Но меняться она может хоть каждую минуту. Как только это понадобится разрабам игры.
А если разрабы переименуют этот параметр, а не просто перенесут? :)
orion 24.04.2014 13:52 # 0
guest 24.04.2014 12:19 # 0
bormand 24.04.2014 12:35 # +1
Насчет curl'а - у меня сейчас нету виртуалки с mingw, и настраивать ее вломы, так что х.з. Сборка на офсайте без TLS-SRP?
guest 24.04.2014 12:36 # 0
bormand 24.04.2014 12:44 # +1
Да попробуй для начала бинарники curl и openssl с офсайта скачать. Вдруг они все правильно собрали?
> Алсо, гоу в тред
Пароль от гвфорума только дома, сорри.
guest 24.04.2014 12:54 # −1
kyzi007 25.04.2014 19:00 # 0
wvxvw 26.04.2014 18:01 # +1
БД, ну на счет монги не знаю, но может оптимизировать такого рода поиск разными техниками, например, динамическое програмирование. Ну и, конечно, может там объектов совсем не много, но если много, то имеет смысл задуматься о более рациональных способах поиска, даже в непроинформированом поиске есть лучше варианты, то же постепенное углубление или поиск лучем.
orion 26.04.2014 21:43 # +1
в монговских json'ах не может быть циклов. это древовидная структура
>может там объектов совсем не много
именно так. поэтому время поиска тут не является узким местом.
Больше тут доставляет "eval")