We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Windows Tempfile Error
On Windows, tempfiles attempted to be opened using h5py cause errors.

I do not have the error message in front of me at present, but I believe it was a 'file already exists' flavor of problem. 

We may need to remove the created tmpfile and just use the name....

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `WrightTools/_base.py`
Content:
```
1 """WrightTools base classes and associated."""
2 
3 
4 # --- import --------------------------------------------------------------------------------------
5 
6 
7 import shutil
8 import weakref
9 import tempfile
10 import posixpath
11 
12 import numpy as np
13 
14 import h5py
15 
16 
17 # --- define --------------------------------------------------------------------------------------
18 
19 
20 wt5_version = '0.0.0'
21 
22 
23 # --- dataset -------------------------------------------------------------------------------------
24 
25 
26 class Dataset(h5py.Dataset):
27     instances = {}
28 
29 
30 # --- group ---------------------------------------------------------------------------------------
31 
32 
33 class Group(h5py.Group):
34     instances = {}
35     class_name = 'Group'
36 
37     def __init__(self, filepath=None, parent=None, name=None, **kwargs):
38         if filepath is None:
39             return
40         if parent == '':
41             parent = posixpath.sep
42         # file
43         self.filepath = filepath
44         path = parent + posixpath.sep + name
45         file = h5py.File(self.filepath, 'a')
46         file.require_group(parent)
47         file.require_group(path)
48         h5py.Group.__init__(self, bind=file[path].id)
49         self.__n = 0
50         self.fid = self.file.fid
51         if name is not None:
52             self.attrs['name'] = name
53         self.attrs.update(kwargs)
54         self.attrs['class'] = self.class_name
55         # load from file
56         self._items = []
57         for name in self.item_names:
58             self._items.append(self[name])
59             setattr(self, name, self[name])
60         # kwargs
61         self.attrs.update(kwargs)
62         # the following are populated if not already recorded
63         self.__version__
64         self.natural_name
65 
66     def __new__(cls, *args, **kwargs):
67         # extract
68         filepath = args[0] if len(args) > 0 else kwargs.get('filepath', None)
69         parent = args[1] if len(args) > 1 else kwargs.get('parent', None)
70         name = args[2] if len(args) > 2 else kwargs.get('name', cls.class_name.lower())
71         edit_local = args[3] if len(args) > 3 else kwargs.get('edit_local', False)
72         # tempfile
73         tmpfile = None
74         if edit_local and filepath is None:
75             raise Exception  # TODO: better exception
76         if not edit_local:
77             tmpfile = tempfile.NamedTemporaryFile(prefix='', suffix='.wt5')
78             p = tmpfile.name
79             if filepath:
80                 shutil.copyfile(src=filepath, dst=p)
81         elif edit_local and filepath:
82             p = filepath
83         # construct fullpath
84         if parent is None:
85             parent = ''
86             name = '/'
87         fullpath = p + '::' + parent + name
88         # create and/or return
89         if fullpath not in cls.instances.keys():
90             kwargs['filepath'] = p
91             kwargs['parent'] = parent
92             kwargs['name'] = name
93             instance = super(Group, cls).__new__(cls)
94             cls.__init__(instance, **kwargs)
95             cls.instances[fullpath] = instance
96             if tmpfile:
97                 setattr(instance, '_tmpfile', tmpfile)
98                 weakref.finalize(instance, instance.close)
99             return instance
100         instance = cls.instances[fullpath]
101         return instance
102 
103     @property
104     def __version__(self):
105         if '__version__' not in self.file.attrs.keys():
106             self.file.attrs['__version__'] = wt5_version
107         return self.file.attrs['__version__']
108 
109     @property
110     def fullpath(self):
111         return self.filepath + '::' + self.name
112 
113     @property
114     def item_names(self):
115         if 'item_names' not in self.attrs.keys():
116             self.attrs['item_names'] = np.array([], dtype='S')
117         return self.attrs['item_names']
118 
119     @property
120     def natural_name(self):
121         if 'name' not in self.attrs.keys():
122             self.attrs['name'] = self.__class__.default_name
123         return self.attrs['name']
124 
125     @property
126     def parent(self):
127         from .collection import Collection
128         group = super().parent
129         parent = group.parent.name
130         if parent == posixpath.sep:
131             parent = None
132         return Collection(self.filepath, parent=parent, name=group.attrs['name'])
133 
134     def close(self):
135         if(self.fid.valid > 0):
136             self.__class__.instances.pop(self.fullpath)
137             self.file.flush()
138             self.file.close()
139             if hasattr(self, '_tmpfile'):
140                 self._tmpfile.close()
141 
142     def flush(self):
143         self.file.flush()
144
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/WrightTools/_base.py b/WrightTools/_base.py
--- a/WrightTools/_base.py
+++ b/WrightTools/_base.py
@@ -5,6 +5,7 @@
 
 
 import shutil
+import os
 import weakref
 import tempfile
 import posixpath
@@ -74,8 +75,8 @@
         if edit_local and filepath is None:
             raise Exception  # TODO: better exception
         if not edit_local:
-            tmpfile = tempfile.NamedTemporaryFile(prefix='', suffix='.wt5')
-            p = tmpfile.name
+            tmpfile = tempfile.mkstemp(prefix='', suffix='.wt5')
+            p = tmpfile[1]
             if filepath:
                 shutil.copyfile(src=filepath, dst=p)
         elif edit_local and filepath:
@@ -137,7 +138,8 @@
             self.file.flush()
             self.file.close()
             if hasattr(self, '_tmpfile'):
-                self._tmpfile.close()
+                os.close(self._tmpfile[0])
+                os.remove(self._tmpfile[1])
 
     def flush(self):
         self.file.flush()

{"golden_diff": "diff --git a/WrightTools/_base.py b/WrightTools/_base.py\n--- a/WrightTools/_base.py\n+++ b/WrightTools/_base.py\n@@ -5,6 +5,7 @@\n \n \n import shutil\n+import os\n import weakref\n import tempfile\n import posixpath\n@@ -74,8 +75,8 @@\n         if edit_local and filepath is None:\n             raise Exception  # TODO: better exception\n         if not edit_local:\n-            tmpfile = tempfile.NamedTemporaryFile(prefix='', suffix='.wt5')\n-            p = tmpfile.name\n+            tmpfile = tempfile.mkstemp(prefix='', suffix='.wt5')\n+            p = tmpfile[1]\n             if filepath:\n                 shutil.copyfile(src=filepath, dst=p)\n         elif edit_local and filepath:\n@@ -137,7 +138,8 @@\n             self.file.flush()\n             self.file.close()\n             if hasattr(self, '_tmpfile'):\n-                self._tmpfile.close()\n+                os.close(self._tmpfile[0])\n+                os.remove(self._tmpfile[1])\n \n     def flush(self):\n         self.file.flush()\n", "issue": "Windows Tempfile Error\nOn Windows, tempfiles attempted to be opened using h5py cause errors.\r\n\r\nI do not have the error message in front of me at present, but I believe it was a 'file already exists' flavor of problem. \r\n\r\nWe may need to remove the created tmpfile and just use the name....\n", "before_files": [{"content": "\"\"\"WrightTools base classes and associated.\"\"\"\n\n\n# --- import --------------------------------------------------------------------------------------\n\n\nimport shutil\nimport weakref\nimport tempfile\nimport posixpath\n\nimport numpy as np\n\nimport h5py\n\n\n# --- define --------------------------------------------------------------------------------------\n\n\nwt5_version = '0.0.0'\n\n\n# --- dataset -------------------------------------------------------------------------------------\n\n\nclass Dataset(h5py.Dataset):\n    instances = {}\n\n\n# --- group ---------------------------------------------------------------------------------------\n\n\nclass Group(h5py.Group):\n    instances = {}\n    class_name = 'Group'\n\n    def __init__(self, filepath=None, parent=None, name=None, **kwargs):\n        if filepath is None:\n            return\n        if parent == '':\n            parent = posixpath.sep\n        # file\n        self.filepath = filepath\n        path = parent + posixpath.sep + name\n        file = h5py.File(self.filepath, 'a')\n        file.require_group(parent)\n        file.require_group(path)\n        h5py.Group.__init__(self, bind=file[path].id)\n        self.__n = 0\n        self.fid = self.file.fid\n        if name is not None:\n            self.attrs['name'] = name\n        self.attrs.update(kwargs)\n        self.attrs['class'] = self.class_name\n        # load from file\n        self._items = []\n        for name in self.item_names:\n            self._items.append(self[name])\n            setattr(self, name, self[name])\n        # kwargs\n        self.attrs.update(kwargs)\n        # the following are populated if not already recorded\n        self.__version__\n        self.natural_name\n\n    def __new__(cls, *args, **kwargs):\n        # extract\n        filepath = args[0] if len(args) > 0 else kwargs.get('filepath', None)\n        parent = args[1] if len(args) > 1 else kwargs.get('parent', None)\n        name = args[2] if len(args) > 2 else kwargs.get('name', cls.class_name.lower())\n        edit_local = args[3] if len(args) > 3 else kwargs.get('edit_local', False)\n        # tempfile\n        tmpfile = None\n        if edit_local and filepath is None:\n            raise Exception  # TODO: better exception\n        if not edit_local:\n            tmpfile = tempfile.NamedTemporaryFile(prefix='', suffix='.wt5')\n            p = tmpfile.name\n            if filepath:\n                shutil.copyfile(src=filepath, dst=p)\n        elif edit_local and filepath:\n            p = filepath\n        # construct fullpath\n        if parent is None:\n            parent = ''\n            name = '/'\n        fullpath = p + '::' + parent + name\n        # create and/or return\n        if fullpath not in cls.instances.keys():\n            kwargs['filepath'] = p\n            kwargs['parent'] = parent\n            kwargs['name'] = name\n            instance = super(Group, cls).__new__(cls)\n            cls.__init__(instance, **kwargs)\n            cls.instances[fullpath] = instance\n            if tmpfile:\n                setattr(instance, '_tmpfile', tmpfile)\n                weakref.finalize(instance, instance.close)\n            return instance\n        instance = cls.instances[fullpath]\n        return instance\n\n    @property\n    def __version__(self):\n        if '__version__' not in self.file.attrs.keys():\n            self.file.attrs['__version__'] = wt5_version\n        return self.file.attrs['__version__']\n\n    @property\n    def fullpath(self):\n        return self.filepath + '::' + self.name\n\n    @property\n    def item_names(self):\n        if 'item_names' not in self.attrs.keys():\n            self.attrs['item_names'] = np.array([], dtype='S')\n        return self.attrs['item_names']\n\n    @property\n    def natural_name(self):\n        if 'name' not in self.attrs.keys():\n            self.attrs['name'] = self.__class__.default_name\n        return self.attrs['name']\n\n    @property\n    def parent(self):\n        from .collection import Collection\n        group = super().parent\n        parent = group.parent.name\n        if parent == posixpath.sep:\n            parent = None\n        return Collection(self.filepath, parent=parent, name=group.attrs['name'])\n\n    def close(self):\n        if(self.fid.valid > 0):\n            self.__class__.instances.pop(self.fullpath)\n            self.file.flush()\n            self.file.close()\n            if hasattr(self, '_tmpfile'):\n                self._tmpfile.close()\n\n    def flush(self):\n        self.file.flush()\n", "path": "WrightTools/_base.py"}], "after_files": [{"content": "\"\"\"WrightTools base classes and associated.\"\"\"\n\n\n# --- import --------------------------------------------------------------------------------------\n\n\nimport shutil\nimport os\nimport weakref\nimport tempfile\nimport posixpath\n\nimport numpy as np\n\nimport h5py\n\n\n# --- define --------------------------------------------------------------------------------------\n\n\nwt5_version = '0.0.0'\n\n\n# --- dataset -------------------------------------------------------------------------------------\n\n\nclass Dataset(h5py.Dataset):\n    instances = {}\n\n\n# --- group ---------------------------------------------------------------------------------------\n\n\nclass Group(h5py.Group):\n    instances = {}\n    class_name = 'Group'\n\n    def __init__(self, filepath=None, parent=None, name=None, **kwargs):\n        if filepath is None:\n            return\n        if parent == '':\n            parent = posixpath.sep\n        # file\n        self.filepath = filepath\n        path = parent + posixpath.sep + name\n        file = h5py.File(self.filepath, 'a')\n        file.require_group(parent)\n        file.require_group(path)\n        h5py.Group.__init__(self, bind=file[path].id)\n        self.__n = 0\n        self.fid = self.file.fid\n        if name is not None:\n            self.attrs['name'] = name\n        self.attrs.update(kwargs)\n        self.attrs['class'] = self.class_name\n        # load from file\n        self._items = []\n        for name in self.item_names:\n            self._items.append(self[name])\n            setattr(self, name, self[name])\n        # kwargs\n        self.attrs.update(kwargs)\n        # the following are populated if not already recorded\n        self.__version__\n        self.natural_name\n\n    def __new__(cls, *args, **kwargs):\n        # extract\n        filepath = args[0] if len(args) > 0 else kwargs.get('filepath', None)\n        parent = args[1] if len(args) > 1 else kwargs.get('parent', None)\n        name = args[2] if len(args) > 2 else kwargs.get('name', cls.class_name.lower())\n        edit_local = args[3] if len(args) > 3 else kwargs.get('edit_local', False)\n        # tempfile\n        tmpfile = None\n        if edit_local and filepath is None:\n            raise Exception  # TODO: better exception\n        if not edit_local:\n            tmpfile = tempfile.mkstemp(prefix='', suffix='.wt5')\n            p = tmpfile[1]\n            if filepath:\n                shutil.copyfile(src=filepath, dst=p)\n        elif edit_local and filepath:\n            p = filepath\n        # construct fullpath\n        if parent is None:\n            parent = ''\n            name = '/'\n        fullpath = p + '::' + parent + name\n        # create and/or return\n        if fullpath not in cls.instances.keys():\n            kwargs['filepath'] = p\n            kwargs['parent'] = parent\n            kwargs['name'] = name\n            instance = super(Group, cls).__new__(cls)\n            cls.__init__(instance, **kwargs)\n            cls.instances[fullpath] = instance\n            if tmpfile:\n                setattr(instance, '_tmpfile', tmpfile)\n                weakref.finalize(instance, instance.close)\n            return instance\n        instance = cls.instances[fullpath]\n        return instance\n\n    @property\n    def __version__(self):\n        if '__version__' not in self.file.attrs.keys():\n            self.file.attrs['__version__'] = wt5_version\n        return self.file.attrs['__version__']\n\n    @property\n    def fullpath(self):\n        return self.filepath + '::' + self.name\n\n    @property\n    def item_names(self):\n        if 'item_names' not in self.attrs.keys():\n            self.attrs['item_names'] = np.array([], dtype='S')\n        return self.attrs['item_names']\n\n    @property\n    def natural_name(self):\n        if 'name' not in self.attrs.keys():\n            self.attrs['name'] = self.__class__.default_name\n        return self.attrs['name']\n\n    @property\n    def parent(self):\n        from .collection import Collection\n        group = super().parent\n        parent = group.parent.name\n        if parent == posixpath.sep:\n            parent = None\n        return Collection(self.filepath, parent=parent, name=group.attrs['name'])\n\n    def close(self):\n        if(self.fid.valid > 0):\n            self.__class__.instances.pop(self.fullpath)\n            self.file.flush()\n            self.file.close()\n            if hasattr(self, '_tmpfile'):\n                os.close(self._tmpfile[0])\n                os.remove(self._tmpfile[1])\n\n    def flush(self):\n        self.file.flush()\n", "path": "WrightTools/_base.py"}]}