comparison piecrust/fastpickle.py @ 852:4850f8c21b6e

core: Start of the big refactor for PieCrust 3.0. * Everything is a `ContentSource`, including assets directories. * Most content sources are subclasses of the base file-system source. * A source is processed by a "pipeline", and there are 2 built-in pipelines, one for assets and one for pages. The asset pipeline is vaguely functional, but the page pipeline is completely broken right now. * Rewrite the baking process as just running appropriate pipelines on each content item. This should allow for better parallelization.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 17 May 2017 00:11:48 -0700
parents fcfbe103cfd1
children 8adc27285d93
comparison
equal deleted inserted replaced
851:2c7e57d80bba 852:4850f8c21b6e
100 'year': obj.year, 100 'year': obj.year,
101 'month': obj.month, 101 'month': obj.month,
102 'day': obj.day} 102 'day': obj.day}
103 elif op == _UNPICKLING: 103 elif op == _UNPICKLING:
104 return datetime.date( 104 return datetime.date(
105 obj['year'], obj['month'], obj['day']) 105 obj['year'], obj['month'], obj['day'])
106 106
107 107
108 def _datetime_convert(obj, func, op): 108 def _datetime_convert(obj, func, op):
109 if op == _PICKLING: 109 if op == _PICKLING:
110 return {'__class__': 'datetime', 110 return {'__class__': 'datetime',
115 'minute': obj.minute, 115 'minute': obj.minute,
116 'second': obj.second, 116 'second': obj.second,
117 'microsecond': obj.microsecond} 117 'microsecond': obj.microsecond}
118 elif op == _UNPICKLING: 118 elif op == _UNPICKLING:
119 return datetime.datetime( 119 return datetime.datetime(
120 obj['year'], obj['month'], obj['day'], 120 obj['year'], obj['month'], obj['day'],
121 obj['hour'], obj['minute'], obj['second'], obj['microsecond']) 121 obj['hour'], obj['minute'], obj['second'], obj['microsecond'])
122 122
123 123
124 def _time_convert(obj, func, op): 124 def _time_convert(obj, func, op):
125 if op == _PICKLING: 125 if op == _PICKLING:
126 return {'__class__': 'time', 126 return {'__class__': 'time',
128 'minute': obj.minute, 128 'minute': obj.minute,
129 'second': obj.second, 129 'second': obj.second,
130 'microsecond': obj.microsecond} 130 'microsecond': obj.microsecond}
131 elif op == _UNPICKLING: 131 elif op == _UNPICKLING:
132 return datetime.time( 132 return datetime.time(
133 obj['hour'], obj['minute'], obj['second'], obj['microsecond']) 133 obj['hour'], obj['minute'], obj['second'], obj['microsecond'])
134 134
135 135
136 _type_convert = { 136 _type_convert = {
137 type(None): _identity_dispatch, 137 type(None): _identity_dispatch,
138 bool: _identity_dispatch, 138 bool: _identity_dispatch,
139 int: _identity_dispatch, 139 int: _identity_dispatch,
140 float: _identity_dispatch, 140 float: _identity_dispatch,
141 str: _identity_dispatch, 141 str: _identity_dispatch,
142 datetime.date: _date_convert, 142 datetime.date: _date_convert,
143 datetime.datetime: _datetime_convert, 143 datetime.datetime: _datetime_convert,
144 datetime.time: _time_convert, 144 datetime.time: _time_convert,
145 tuple: _tuple_convert, 145 tuple: _tuple_convert,
146 list: _list_convert, 146 list: _list_convert,
147 dict: _dict_convert, 147 dict: _dict_convert,
148 set: _set_convert, 148 set: _set_convert,
149 collections.OrderedDict: _ordered_dict_convert, 149 collections.OrderedDict: _ordered_dict_convert,
150 } 150 }
151 151
152 152
153 _type_unconvert = { 153 _type_unconvert = {
154 type(None): _identity_dispatch, 154 type(None): _identity_dispatch,
155 bool: _identity_dispatch, 155 bool: _identity_dispatch,
156 int: _identity_dispatch, 156 int: _identity_dispatch,
157 float: _identity_dispatch, 157 float: _identity_dispatch,
158 str: _identity_dispatch, 158 str: _identity_dispatch,
159 'date': _date_convert, 159 'date': _date_convert,
160 'datetime': _datetime_convert, 160 'datetime': _datetime_convert,
161 'time': _time_convert, 161 'time': _time_convert,
162 } 162 }
163 163
164 164
165 _collection_unconvert = { 165 _collection_unconvert = {
166 '__type__:tuple': _tuple_convert, 166 '__type__:tuple': _tuple_convert,
167 '__type__:set': _set_convert, 167 '__type__:set': _set_convert,
168 } 168 }
169 169
170 170
171 _mapping_unconvert = { 171 _mapping_unconvert = {
172 'OrderedDict': _ordered_dict_convert 172 'OrderedDict': _ordered_dict_convert
173 } 173 }
174 174
175 175
176 def _pickle_object(obj): 176 def _pickle_object(obj):
177 t = type(obj) 177 t = type(obj)
178 conv = _type_convert.get(t) 178 conv = _type_convert.get(t)