1cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Copyright 2015 The Chromium Authors. All rights reserved.
2cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Use of this source code is governed by a BSD-style license that can be
3cef7893435aa41160dd1255c43cb8498279738ccChris Craik# found in the LICENSE file.
4cef7893435aa41160dd1255c43cb8498279738ccChris Craik
57332cdb42368a904cbf7418de329868989e592daChris Craikfrom py_utils.refactor import annotated_symbol
6cef7893435aa41160dd1255c43cb8498279738ccChris Craik
7cef7893435aa41160dd1255c43cb8498279738ccChris Craik
8cef7893435aa41160dd1255c43cb8498279738ccChris Craikclass Module(object):
9cef7893435aa41160dd1255c43cb8498279738ccChris Craik
10cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def __init__(self, file_path):
11cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self._file_path = file_path
12cef7893435aa41160dd1255c43cb8498279738ccChris Craik
13cef7893435aa41160dd1255c43cb8498279738ccChris Craik    with open(self._file_path, 'r') as f:
14cef7893435aa41160dd1255c43cb8498279738ccChris Craik      self._snippet = annotated_symbol.Annotate(f)
15cef7893435aa41160dd1255c43cb8498279738ccChris Craik
16cef7893435aa41160dd1255c43cb8498279738ccChris Craik  @property
17cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def file_path(self):
18cef7893435aa41160dd1255c43cb8498279738ccChris Craik    return self._file_path
19cef7893435aa41160dd1255c43cb8498279738ccChris Craik
20cef7893435aa41160dd1255c43cb8498279738ccChris Craik  @property
21cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def modified(self):
22cef7893435aa41160dd1255c43cb8498279738ccChris Craik    return self._snippet.modified
23cef7893435aa41160dd1255c43cb8498279738ccChris Craik
24cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def FindAll(self, snippet_type):
25cef7893435aa41160dd1255c43cb8498279738ccChris Craik    return self._snippet.FindAll(snippet_type)
26cef7893435aa41160dd1255c43cb8498279738ccChris Craik
27cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def FindChildren(self, snippet_type):
28cef7893435aa41160dd1255c43cb8498279738ccChris Craik    return self._snippet.FindChildren(snippet_type)
29cef7893435aa41160dd1255c43cb8498279738ccChris Craik
30cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def Write(self):
31cef7893435aa41160dd1255c43cb8498279738ccChris Craik    """Write modifications to the file."""
32cef7893435aa41160dd1255c43cb8498279738ccChris Craik    if not self.modified:
33cef7893435aa41160dd1255c43cb8498279738ccChris Craik      return
34cef7893435aa41160dd1255c43cb8498279738ccChris Craik
35cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # Stringify before opening the file for writing.
36cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # If we fail, we won't truncate the file.
37cef7893435aa41160dd1255c43cb8498279738ccChris Craik    string = str(self._snippet)
38cef7893435aa41160dd1255c43cb8498279738ccChris Craik    with open(self._file_path, 'w') as f:
39cef7893435aa41160dd1255c43cb8498279738ccChris Craik      f.write(string)
40