Using time_id instead of time as a timestamp

This commit is contained in:
BroodingKangaroo 2020-04-27 09:56:57 +03:00
parent ec76445dd6
commit f0f1be76d1
3 changed files with 13 additions and 12 deletions

View File

@ -441,9 +441,9 @@ An integer number which represent number of scraped items stored in each output
file. Whenever the number of items exceeds this setting, a new file
creates and output redirects to it. The name of the new file will be selected
based on timestamp when the feed is being created and/or batch sequence number.
Therefore you must specify %(time)s or %(batch_id)s or both in the file path.
Therefore you must specify %(time_id)s or %(batch_id)s or both in the file path.
* ``%(time)s`` - gets replaced by a timestamp when the feed is being created
* ``%(time_id)s`` - gets replaced by a timestamp when the feed is being created
* ``%(batch_id)s`` - gets replaced by sequence number of batch
For instance::
@ -452,7 +452,7 @@ For instance::
Your request can be like::
scrapy crawl spidername -o dirname/%(batch_id)s-filename%(time)s.json
scrapy crawl spidername -o dirname/%(batch_id)s-filename%(time_id)s.json
The result directory tree of above can be like::

View File

@ -292,7 +292,7 @@ class FeedExporter:
:param uri: uri of the new batch to start
:param feed: dict with parameters of feed
:param spider: user spider
:param template_uri: template uri which contains %(time)s or %(batch_id)s to create new uri
:param template_uri: template uri which contains %(time_id)s or %(batch_id)s to create new uri
"""
if previous_batch_slot is not None:
previous_batch_id = previous_batch_slot.batch_id
@ -360,12 +360,12 @@ class FeedExporter:
def _batch_deliveries_supported(self, uri):
"""
If FEED_STORAGE_BATCH_SIZE setting is specified uri has to contain %(time)s or %(batch_id)s
If FEED_STORAGE_BATCH_SIZE setting is specified uri has to contain %(time_id)s or %(batch_id)s
to distinguish different files of partial output
"""
if self.storage_batch_size is None or '%(time)s' in uri or '%(batch_id)s' in uri:
if self.storage_batch_size is None or '%(time_id)s' in uri or '%(batch_id)s' in uri:
return True
logger.warning('%(time)s or %(batch_id)s must be in uri if FEED_STORAGE_BATCH_SIZE setting is specified')
logger.warning('%(time_id)s or %(batch_id)s must be in uri if FEED_STORAGE_BATCH_SIZE setting is specified')
return False
def _storage_supported(self, uri):
@ -397,8 +397,9 @@ class FeedExporter:
params = {}
for k in dir(spider):
params[k] = getattr(spider, k)
params['time'] = datetime.utcnow().replace(microsecond=0).isoformat().replace(':', '-')
params['time_id'] = datetime.utcnow().isoformat().replace(':', '-')
params['batch_id'] = slot.batch_id + 1 if slot is not None else 1
params['time'] = datetime.utcnow().isoformat().replace(':', '-')
uripar_function = load_object(uri_params) if uri_params else lambda x, y: None
uripar_function(params, spider)
return params

View File

@ -989,7 +989,7 @@ class FeedExportTest(FeedExportTestBase):
class PartialDeliveriesTest(FeedExportTestBase):
__test__ = True
_file_mark = '_%(time)s_#%(batch_id)s_'
_file_mark = '_%(time_id)s_#%(batch_id)s_'
@defer.inlineCallbacks
def run_and_export(self, spider_cls, settings):
@ -1146,7 +1146,7 @@ class PartialDeliveriesTest(FeedExportTestBase):
yield self.assertExported(items, header, rows, settings=settings)
def test_wrong_path(self):
""" If path is without %(time)s or %(batch_id)s an exception must be raised """
""" If path is without %(time_id)s or %(batch_id)s an exception must be raised """
settings = {
'FEEDS': {
self._random_temp_filename(): {'format': 'xml'},
@ -1236,7 +1236,7 @@ class PartialDeliveriesTest(FeedExportTestBase):
def test_batch_path_differ(self):
"""
Test that the name of all batch files differ from each other.
So %(time)s replaced with the current date.
So %(time_id)s replaced with the current date.
"""
items = [
self.MyItem({'foo': 'bar1', 'egg': 'spam1'}),
@ -1245,7 +1245,7 @@ class PartialDeliveriesTest(FeedExportTestBase):
]
settings = {
'FEEDS': {
os.path.join(self._random_temp_filename(), '%(time)s'): {
os.path.join(self._random_temp_filename(), '%(time_id)s'): {
'format': 'json',
},
},