2017-01-31 12 views
3

Я ищу type_of способом, как показано ниже:Python BSON библиотека: получить BSON псевдоним

import bson 
bson.type_of(42) # it should return "int". 
bson.type_of("hello") # it should return "string". 
type("hello").__name__ # it returns "str" and not "string" therefore no suitable. 

Результаты Я хочу (int и string) являются BSON псевдоним (см https://docs.mongodb.com/manual/reference/bson-types/).

Этот метод type_of уже существует?

Это нормально, если он возвращает числа типов (1 для Double, 2 для String ...).

Спасибо,

Edit: Вот решение у меня на данный момент:

type_of = { 
    type(2.5).__name__: "number", 
    type(1).__name__: "number", 
    type("a_string").__name__: "string", 
    type([1, 2]).__name__: "array", 
    type(True).__name__: "bool" 
} # type_of[type(3).__name__] returns "number" 

ответ

1

Если вы хотите фактические типы BSON (число не тип BSON) Я не конечно, есть способ. Я использовал эту функцию, чтобы помочь разобраться, что питон будет кодировать объект как:

def what_bson_type(input): 
    import bson 
    return bson._ELEMENT_GETTER[bson.BSON.encode({"t":input})[4]].__name__[5:] 

Примечание: эти «типы» не соответствуют BSON спецификации, но они были достаточно хороши, чтобы помочь мне в прошлом ,

>>> what_bson_type("hi") 
'string' 
>>> what_bson_type(1) 
'int' 
>>> what_bson_type(sys.maxint) 
'int64' 
>>> what_bson_type(True) 
'boolean' 
>>> what_bson_type({"a":"b"}) 
'object' 
>>> what_bson_type(1.2) 
'float' 
>>> what_bson_type([1,2]) 
'array' 
>>> what_bson_type(re.compile(r".*")) 
'regex' 
>>> what_bson_type(bson.Binary("hi")) 
'binary' 
+0

Благодарим вас за ответ. Действительно, эти типы не совсем то, что я ищу. Тем не менее, я ищу метод из библиотеки bson, чтобы помочь мне. – Matias