ipython / ipython/ipython

Navigator Unable to Browse Up Beyond a Volume Boundary on Windows

オープン
#9,911 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
16.8k
フォーク
4.5k
平均マージ
1日 2時間
マージ済み PR(30日)
6

説明

The navigator is unable to browse up the tree past the volume boundary on Windows.

Invoking `WindowsScanner.get_volume_ids()` from the following Python 2.7 code displays the current volumes on a Windows machine:

```
class VolumeTypes( object ):
NoType = 0
Unknown = 1
NoRootDirectory = 2
RemovableDisk = 4
LocalDisk = 8
NetworkDrive = 16
CompactDisc = 32
RamDisk = 64
AllTypes = Unknown | NoRootDirectory | RemovableDisk | LocalDisk | NetworkDrive | CompactDisc | RamDisk

@staticmethod
def get_types():
return [ VolumeTypes.NoType, VolumeTypes.Unknown, VolumeTypes.NoRootDirectory, VolumeTypes.RemovableDisk, VolumeTypes.LocalDisk, VolumeTypes.NetworkDrive, VolumeTypes.CompactDisc, VolumeTypes.RamDisk ]

@staticmethod
def get_wmi_value(type):
if type == VolumeTypes.Unknown:
result = 0
elif type == VolumeTypes.NoRootDirectory:
result = 1
elif type == VolumeTypes.RemovableDisk:
result = 2
elif type == VolumeTypes.LocalDisk:
result = 3
elif type == VolumeTypes.NetworkDrive:
result = 4
elif type == VolumeTypes.CompactDisk:
result = 5
elif type == VolumeTypes.RamDisk:
result = 6
else:
raise ValueError( "Volume type value '{}' has no WMI equivalent." % type )

return result

@staticmethod
def get_volume_type(wmi_type):
return VolumeTypes.get_types()[ wmi_type + 1 ]

class WindowsScanner( object ):
@staticmethod
def get_volumes( filter = None ):
if filter is None:
filter = VolumeTypes.AllTypes

import wmi
interface = wmi.WMI()

volumes = interface.Win32_LogicalDisk()
result = [ volume for volume in volumes if VolumeTypes.get_volume_type( volume.DriveType ) & filter != 0 ]

return result

@staticmethod
def get_occupied_volumes( filter = None ):
import os.path

result = [ volume for volume in WindowsScanner.get_volumes( filter ) if os.path.exists( volume.DriveType ) ]

return result

@staticmethod
def get_unoccupied_volumes( filter = None ):
import os.path

result = [ volume for volume in WindowsScanner.get_volumes( filter ) if not os.path.exists( volume.DriveType ) ]

return result

@staticmethod
def get_volume_ids( filter = None ):
return [ volume.DeviceID for volume in WindowsScanner.get_volumes( filter ) ]

@staticmethod
def get_occupied_volume_ids( filter = None ):
return [ volume.DeviceID for volume in WindowsScanner.get_occupied_volumes( filter ) ]

@staticmethod
def get_unoccupied_volume_ids( filter = None ):
return [ volume.DeviceID for volume in WindowsScanner.get_unoccupied_volumes( filter ) ]

```

I'm not sure where the code should be added, but the "Home" of the running notebook instance should probably be a location which allows for navigation across different volumes.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。