| 78 | |
| 79 | @staticmethod |
| 80 | def create(params, record_type): # type: (KeeperParams, str) -> Optional['KeeperRecord'] |
| 81 | if not record_type: |
| 82 | record_type = 'login' |
| 83 | if record_type in {'legacy', 'general'}: |
| 84 | record = PasswordRecord() |
| 85 | elif record_type == 'file': |
| 86 | record = FileRecord() |
| 87 | else: |
| 88 | record = TypedRecord() |
| 89 | meta_data = None |
| 90 | if params.record_type_cache: |
| 91 | for rts in params.record_type_cache.values(): |
| 92 | try: |
| 93 | rto = json.loads(rts) |
| 94 | if '$id' in rto and rto['$id'].lower() == record_type.lower(): |
| 95 | meta_data = rto |
| 96 | break |
| 97 | except: |
| 98 | pass |
| 99 | if meta_data and 'fields' in meta_data: |
| 100 | for field in meta_data['fields']: |
| 101 | typed_field = TypedField() |
| 102 | typed_field.type = field.get('$ref', 'text') |
| 103 | typed_field.label = field.get('label', None) |
| 104 | record.fields.append(typed_field) |
| 105 | return record |
| 106 | |
| 107 | @staticmethod |
| 108 | def load(params, rec): |