Add date-organize
subcommand
This commit is contained in:
parent
c3914738d5
commit
e2963403fe
8
docs/api/wuttjamaican/cmd.date_organize.rst
Normal file
8
docs/api/wuttjamaican/cmd.date_organize.rst
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
``wuttjamaican.cmd.date_organize``
|
||||||
|
==================================
|
||||||
|
|
||||||
|
.. automodule:: wuttjamaican.cmd.date_organize
|
||||||
|
:members:
|
||||||
|
|
||||||
|
.. program-output:: wutta date-organize -h
|
|
@ -10,6 +10,7 @@
|
||||||
app
|
app
|
||||||
cmd
|
cmd
|
||||||
cmd.base
|
cmd.base
|
||||||
|
cmd.date_organize
|
||||||
cmd.make_appdir
|
cmd.make_appdir
|
||||||
cmd.setup
|
cmd.setup
|
||||||
conf
|
conf
|
||||||
|
|
|
@ -51,5 +51,6 @@ console_scripts =
|
||||||
wutta = wuttjamaican.cmd.base:main
|
wutta = wuttjamaican.cmd.base:main
|
||||||
|
|
||||||
wutta.subcommands =
|
wutta.subcommands =
|
||||||
|
date-organize = wuttjamaican.cmd.date_organize:DateOrganize
|
||||||
make-appdir = wuttjamaican.cmd.make_appdir:MakeAppDir
|
make-appdir = wuttjamaican.cmd.make_appdir:MakeAppDir
|
||||||
setup = wuttjamaican.cmd.setup:Setup
|
setup = wuttjamaican.cmd.setup:Setup
|
||||||
|
|
59
src/wuttjamaican/cmd/date_organize.py
Normal file
59
src/wuttjamaican/cmd/date_organize.py
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
# -*- coding: utf-8; -*-
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# WuttJamaican -- Base package for Wutta Framework
|
||||||
|
# Copyright © 2023 Lance Edgar
|
||||||
|
#
|
||||||
|
# This file is part of Wutta Framework.
|
||||||
|
#
|
||||||
|
# Wutta Framework is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by the Free
|
||||||
|
# Software Foundation, either version 3 of the License, or (at your option) any
|
||||||
|
# later version.
|
||||||
|
#
|
||||||
|
# Wutta Framework is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
# more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# Wutta Framework. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
"""
|
||||||
|
WuttJamaican - subcommand ``date-organize``
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
from .base import Subcommand
|
||||||
|
|
||||||
|
|
||||||
|
class DateOrganize(Subcommand):
|
||||||
|
"""
|
||||||
|
Organize files in a given directory, according to date
|
||||||
|
"""
|
||||||
|
name = 'date-organize'
|
||||||
|
description = __doc__.strip()
|
||||||
|
|
||||||
|
def add_args(self):
|
||||||
|
""" """
|
||||||
|
self.parser.add_argument('folder', metavar='PATH',
|
||||||
|
help="Path to directory containing files which are "
|
||||||
|
"to be organized by date.")
|
||||||
|
|
||||||
|
def run(self, args):
|
||||||
|
""" """
|
||||||
|
today = datetime.date.today()
|
||||||
|
for filename in sorted(os.listdir(args.folder)):
|
||||||
|
path = os.path.join(args.folder, filename)
|
||||||
|
if os.path.isfile(path):
|
||||||
|
mtime = datetime.datetime.fromtimestamp(os.path.getmtime(path))
|
||||||
|
if mtime.date() < today:
|
||||||
|
datedir = mtime.strftime(os.sep.join(('%Y', '%m', '%d')))
|
||||||
|
datedir = os.path.join(args.folder, datedir)
|
||||||
|
if not os.path.exists(datedir):
|
||||||
|
os.makedirs(datedir)
|
||||||
|
shutil.move(path, datedir)
|
34
tests/cmd/test_date_organize.py
Normal file
34
tests/cmd/test_date_organize.py
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# -*- coding: utf-8; -*-
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
import os
|
||||||
|
|
||||||
|
from wuttjamaican.conf import WuttaConfig
|
||||||
|
from wuttjamaican.cmd import Command, date_organize
|
||||||
|
from wuttjamaican.testing import FileConfigTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestDateOrganize(FileConfigTestCase):
|
||||||
|
|
||||||
|
def test_run(self):
|
||||||
|
dates = [
|
||||||
|
datetime.date(2023, 11, 21),
|
||||||
|
datetime.date(2023, 11, 20),
|
||||||
|
datetime.date(2023, 10, 15),
|
||||||
|
datetime.date(2023, 9, 10),
|
||||||
|
]
|
||||||
|
|
||||||
|
for date in dates:
|
||||||
|
dt = datetime.datetime.combine(date, datetime.time(0))
|
||||||
|
filename = date.strftime('%Y%m%d.txt')
|
||||||
|
path = self.write_file(filename, '')
|
||||||
|
os.utime(path, (dt.timestamp(), dt.timestamp()))
|
||||||
|
|
||||||
|
cmd = Command(subcommands={
|
||||||
|
'date-organize': date_organize.DateOrganize,
|
||||||
|
})
|
||||||
|
cmd.run('date-organize', self.tempdir)
|
||||||
|
|
||||||
|
self.assertEqual(os.listdir(self.tempdir), ['2023'])
|
||||||
|
self.assertEqual(sorted(os.listdir(os.path.join(self.tempdir, '2023'))),
|
||||||
|
['09', '10', '11'])
|
Loading…
Reference in a new issue