mar10/wsgidav

"Provider does not support set_last_modified" error

andkrau opened this issue · 6 comments

Attempts to set the last modified date are failing with the error: Provider does not support set_last_modified.

Rolling back to v3.1.1 resolved the issue. I'm using an identical wsgidav.yaml between the two releases.

release: v4.0.1
server: cheroot
client: WinSCP

mar10 commented

Please share verbose logs and config file

Config file:

server: "cheroot"
host: 0.0.0.0
port: 8001
block_size: 8192
add_header_MS_Author_Via: true

hotfixes:
	emulate_win32_lastmod: false
	re_encode_path_info: true
	unquote_path_info: true
	treat_root_options_as_asterisk: false

#: Modify to customize the WSGI application stack:
middleware_stack:
	#- wsgidav.mw.cors.Cors
	#- wsgidav.debug_filter.WsgiDavDebugFilter
	- wsgidav.error_printer.ErrorPrinter
	- wsgidav.http_authenticator.HTTPAuthenticator
	#- wsgidav.dir_browser.WsgiDavDirBrowser
	- wsgidav.request_resolver.RequestResolver  # this must be the last middleware item

# ==============================================================================
# SHARES

mount_path: null

provider_mapping:
	"/": "H:/null"

# ==============================================================================
# AUTHENTICATION
http_authenticator:
	accept_basic: true
	accept_digest: false
	default_to_digest: false
	trusted_auth_header: null
	domain_controller: null

# Additional options for SimpleDomainController only:
simple_dc:
	user_mapping:
		"*":  # default (used for all shares that are not explicitly listed)
			"testUser":
				password: "testPass"

# Additional options for NTDomainController only:
nt_dc:
	preset_domain: null
	preset_server: null

# Additional options for PAMDomainController only:
pam_dc:
	service: "login"
	encoding: "utf-8"
	resetcreds: true


# ==============================================================================
# DEBUGGING

#: Set verbosity level (but will be overridden by -v or -q arguments)
verbose: 5

logging:
	#: Set logging output format
	#: (see https://docs.python.org/3/library/logging.html#logging.Formatter)
	logger_date_format: '%H:%M:%S'
	logger_format: '%(asctime)s.%(msecs)03d - %(levelname)-8s: %(message)s'
	# Example: Add date,thread id, and logger name:
	# logger_date_format: '%Y-%m-%d %H:%M:%S'
	# logger_format: '%(asctime)s.%(msecs)03d - <%(thread)05d> %(name)-27s %(levelname)-8s: %(message)s'

	#: Enable specific module loggers
	#: E.g. ['lock_manager', 'property_manager', 'http_authenticator', ...]
	# enable_loggers: ['http_authenticator', ]

	# Enable max. logging for certain http methods
	# E.g. ['COPY', 'DELETE', 'GET', 'HEAD', 'LOCK', 'MOVE', 'OPTIONS', 'PROPFIND', 'PROPPATCH', 'PUT', 'UNLOCK']
	debug_methods: []

	# Enable max. logging during  litmus suite tests that contain certain strings
	# E.g. ['lock_excl', 'notowner_modify', 'fail_cond_put_unlocked', ...]
	debug_litmus: []


# ----------------------------------------------------------------------------
# WsgiDavDirBrowser

dir_browser:
	enable: false
	ignore:
		- ".DS_Store"  # macOS folder meta data
		- "Thumbs.db"  # Windows image previews
		- "._*"  # macOS hidden data files
	icon: false
	response_trailer: true
	show_user: false
	show_logout: false
	davmount: false
	ms_sharepoint_support: false


# ----------------------------------------------------------------------------
# Property Manager
property_manager: null

# Optional additional live property modification
mutable_live_props:
	- "{DAV:}getlastmodified"

# ----------------------------------------------------------------------------
# Lock Manager

lock_storage: false

Logs:

13:17:26.859 - INFO    : WsgiDAV/4.0.1 Python/3.9.9 Windows-10-10.0.17763
13:17:26.860 - INFO    : Default encoding: 'utf-8' (file system: 'utf-8')
13:17:26.862 - INFO    : Lock manager:      None
13:17:26.863 - INFO    : Property manager:  None
13:17:26.864 - INFO    : Domain controller: SimpleDomainController()
13:17:26.865 - INFO    : Middleware stack:
13:17:26.866 - INFO    :   - wsgidav.error_printer.ErrorPrinter
13:17:26.867 - INFO    :   - wsgidav.http_authenticator.HTTPAuthenticator
13:17:26.868 - INFO    :   - wsgidav.request_resolver.RequestResolver
13:17:26.869 - INFO    : Registered DAV providers by route:
13:17:26.870 - INFO    :   - '/': FilesystemProvider for path 'H:\null' (Read-Write)
13:17:26.873 - WARNING : Basic authentication is enabled: It is highly recommended to enable SSL.
13:17:27.341 - INFO    : Running WsgiDAV/4.0.1 Cheroot/8.6.0 Python 3.9.9
13:17:27.341 - INFO    : Serving on http://0.0.0.0:8001 ...
13:17:29.430 - INFO    : 192.168.1.222 - testUser - [2022-01-30 19:17:29] "PROPFIND /Green/TestDirectory/" length=84, depth=1, connection="TE", agent="WinSCP/5.19.5 neon/0.31.2", elap=0.011sec -> 207 Multi-Status
13:17:49.791 - DEBUG   : Raising DAVError 404 Not Found: /Green/TestDirectory/FF_C1.ROM
13:17:49.793 - DEBUG   : Caught (404, '/Green/TestDirectory/FF_C1.ROM')
13:17:49.802 - INFO    : 192.168.1.222 - testUser - [2022-01-30 19:17:49] "PROPFIND /Green/TestDirectory/FF_C1.ROM" length=84, depth=0, connection="TE", agent="WinSCP/5.19.5 neon/0.31.2", elap=0.015sec -> 404 Not Found
13:17:51.221 - INFO    : 192.168.1.222 - testUser - [2022-01-30 19:17:51] "PUT /Green/TestDirectory/FF_C1.ROM" length=2097152, connection="TE", agent="WinSCP/5.19.5 neon/0.31.2", elap=1.388sec -> 201 Created
13:17:51.258 - WARNING : Provider does not support set_last_modified on /Green/TestDirectory/FF_C1.ROM.
13:17:51.260 - INFO    : 192.168.1.222 - testUser - [2022-01-30 19:17:51] "PROPPATCH /Green/TestDirectory/FF_C1.ROM" length=203, depth=0, connection="TE", agent="WinSCP/5.19.5 neon/0.31.2", elap=0.004sec -> 207 Multi-Status
13:17:51.604 - DEBUG   : mimetype(/Green/TestDirectory/FF_C1.ROM): None
13:17:51.605 - DEBUG   : mimetype(/Green/TestDirectory/FF_C1.ROM): None
13:17:51.606 - DEBUG   : mimetype(/Green/TestDirectory/FF_C1.ROM): None
13:17:51.609 - INFO    : 192.168.1.222 - testUser - [2022-01-30 19:17:51] "PROPFIND /Green/TestDirectory/" length=84, depth=1, connection="TE", agent="WinSCP/5.19.5 neon/0.31.2", elap=0.304sec -> 207 Multi-Status
mar10 commented

Does

hotfixes:
	emulate_win32_lastmod: true

help?

No, that did not make a difference. As far as I know, WinSCP uses getlastmodified.

This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs.
Thank you for your contributions.

I had a chance to dig around a little tonight and this incompatibility was introduced with the commit: API enforces some named keyword args (..., *, ...)