def summary(*cmdline_args): """Print a summary to stdout.""" from atelier.projects import load_projects headers = ( # ~ '#','Location', 'Project', # 'Old version', 'Version') def cells(self): self.load_fabfile() # print 20140116, self.module desc = "%s -- " % self.nickname desc += "(doc_trees : %s)\n" % ', '.join(self.doc_trees) url = self.SETUP_INFO.get('url', None) version = self.SETUP_INFO.get('version', '') if url: desc += "`%s <%s>`__ -- %s" % ( self.name, url, self.SETUP_INFO['description']) return ( '\n'.join(textwrap.wrap(desc, 60)), # self.dist.version, version) print(rstgen.table(headers, [cells(p) for p in load_projects()]))
def configure(globals_dict): # The following will load the `fabfile.py` of other # projects. Possible side effects. extlinks = dict() # linoticket=( # 'http://lino-framework.org/tickets/%s.html', # 'Lino Ticket #')) intersphinx_mapping = dict() for prj in load_projects(): # prj.load_fabfile() prj.load_tasks() for doc_tree in prj.doc_trees: p = prj.root_dir.child(doc_tree, '.build', 'objects.inv') if p.exists(): if doc_tree == 'docs': k = prj.nickname else: k = prj.nickname + doc_tree.replace('_', '') url = prj.intersphinx_urls.get(doc_tree) if url: intersphinx_mapping[k] = (url, p) if prj.srcref_url: k = '%s_srcref' % prj.nickname extlinks[str(k)] = (prj.srcref_url, '') globals_dict.update(intersphinx_mapping=intersphinx_mapping) if False: # no longer used globals_dict.update(extlinks=extlinks)
def commited_today(today=None): """Print all today's commits to stdout.""" from atelier.projects import load_projects from git import Repo today = get_current_date(today) rows = [] def load(self): self.load_fabfile() if env.revision_control_system != 'git': return repo = Repo(env.root_dir) kw = dict() ONEDAY = timedelta(days=1) yesterday = today - ONEDAY tomorrow = today + ONEDAY kw.update(after=yesterday.strftime("%Y-%m-%d"), before=tomorrow.strftime("%Y-%m-%d")) it = list(repo.iter_commits(**kw)) if len(it) == 0: return def fmtcommit(c): url = repo.remotes.origin.url if url.startswith("*****@*****.**"): url = "https://github.com/" + url[15:-4] \ + "/commit/" + c.hexsha s = "`{0} <{1}>`__".format(c.hexsha[-7:], url) if c.message and not c.message.startswith("http://"): s += " " + c.message return s url = self.SETUP_INFO.get('url', "oops") desc = "`%s <%s>`__" % (self.name, url) for c in it: ts = time.strftime("%H:%M", time.gmtime(c.committed_date)) rows.append([ts, desc, fmtcommit(c)]) for p in load_projects(): load(p) def mycmp(a, b): return cmp(a[0], b[0]) rows.sort(mycmp) print(rstgen.ul(["{0} : {1}\n{2}".format(*row) for row in rows]))
def configure(globals_dict, prjspec=None, **nicknames): """ Install doctrees of all (or some) atelier projects into the :envvar:`intersphinx_mapping` of your :xfile:`conf.py`. See :doc:`/sphinxext/interproject`. """ intersphinx_mapping = dict() # extlinks = dict() # this = atelier.current_project # if this is None: # raise Exception("current_project in {} is None!".format(globals_dict['__file__'])) this_conf_file = Path(globals_dict['__file__']).resolve() if prjspec: if isinstance(prjspec, str): prjspec = prjspec.split() prjlist = [get_project_info_from_mod(n) for n in prjspec] else: prjlist = [] # for p in load_projects(): for p in reversed(list(load_projects())): if this_conf_file.startswith(p.root_dir): # print("20190122 {} startswith {}".format(this_conf_file, p.root_dir)) continue prjlist.append(p) for k, v in nicknames.items(): p = get_project_from_nickname(k) if p: prjlist.append(p) else: intersphinx_mapping[k] = v # logger.info("20180907 prjlist {}".format(prjlist)) for prj in prjlist: # This will load the `tasks.py` of other # projects. Possible side effects. # print("20180428 {} {}".format(prj.name, prj.config['doc_trees'])) # config = prj.inv_namespace.configuration() # print("20180428 {} {}".format(prj.name, config['doc_trees'])) # ctx = Context(config) # for doc_tree in prj.config['doc_trees']: count = 0 for doc_tree in prj.get_doc_trees(): if not doc_tree.has_intersphinx: logger.info("%s has no intersphinx", p) continue count += 1 urls = prj.get_xconfig('intersphinx_urls') or {} url = urls.get(doc_tree.rel_path) if not url: if prjspec: logger.warning( "No intersphinx mapping for {} of {} ({})".format( doc_tree.rel_path, prj.nickname, urls)) continue # if prj.nickname == "getlino": # raise Exception("20191003 {}".format(doc_tree.src_path)) p = None src_path = doc_tree.src_path if src_path is not None: if this_conf_file == src_path.child('conf.py'): # don't add myself to intersphinx. continue if USE_LOCAL_BUILDS: # print("20190306a", doc_tree, src_path) # p = prj.root_dir.child(doc_tree, '.build', 'objects.inv') p = src_path.child('.build', 'objects.inv') if p.exists(): logger.info("Found local {}".format(p)) else: logger.info("File %s does not exist", p) p = None # The unique identifier can be used to prefix cross-reference targets # http://www.sphinx-doc.org/en/master/ext/intersphinx.html#confval-intersphinx_mapping k = prj.nickname + doc_tree.rel_path k = k.replace('_', '') k = str(k) if k in intersphinx_mapping: raise Exception("Duplicate intersphinx key {} used for {} " "(you ask to redefine it to {})".format( k, intersphinx_mapping[k], p)) intersphinx_mapping[k] = (url, p) if count == 0 and prjspec: logger.warning("No doctree for {}".format(prj)) # if prj.srcref_url: # k = '%s_srcref' % prj.nickname # extlinks[str(k)] = (prj.srcref_url, '') # atelier.current_project = this globals_dict.update(intersphinx_mapping=intersphinx_mapping)
def git_projects(): for prj in load_projects(): prj.load_info() if prj.config['revision_control_system'] == 'git': yield prj
from atelier.projects import load_projects for p in load_projects(): p.load_info() locale_dir = p.config['locale_dir'] if locale_dir: print("- :ref:`{}` : {}".format(p.nickname, locale_dir))
def configure(globals_dict, prjspec=None): intersphinx_mapping = dict() # extlinks = dict() # this = atelier.current_project # if this is None: # raise Exception("current_project in {} is None!".format(globals_dict['__file__'])) this_conf_file = Path(globals_dict['__file__']).resolve() if prjspec: if isinstance(prjspec, six.string_types): prjspec = prjspec.split() prjlist = [get_project_info_from_mod(n) for n in prjspec] else: prjlist = [] # for p in load_projects(): for p in reversed(list(load_projects())): if this_conf_file.startswith(p.root_dir): # print("20190122 {} startswith {}".format(this_conf_file, p.root_dir)) continue prjlist.append(p) # logger.info("20180907 prjlist {}".format(prjlist)) for prj in prjlist: # This will load the `tasks.py` of other # projects. Possible side effects. # print("20180428 {} {}".format(prj.name, prj.config['doc_trees'])) # config = prj.inv_namespace.configuration() # print("20180428 {} {}".format(prj.name, config['doc_trees'])) # ctx = Context(config) # for doc_tree in prj.config['doc_trees']: count = 0 for doc_tree in prj.get_doc_trees(): if not doc_tree.has_intersphinx: logger.info("%s has no intersphinx", p) continue count += 1 urls = prj.get_xconfig('intersphinx_urls') or {} url = urls.get(doc_tree.rel_path) if not url: if prjspec: logger.warning( "No intersphinx mapping for {} of {} ({})".format( doc_tree.rel_path, prj.nickname, urls)) continue p = None if USE_LOCAL_BUILDS: src_path = doc_tree.src_path # print("20190306a", doc_tree, src_path) if src_path is None or this_conf_file == src_path.child('conf.py'): continue # p = prj.root_dir.child(doc_tree, '.build', 'objects.inv') p = src_path.child('.build', 'objects.inv') if p.exists(): logger.info("Found local {}".format(p)) else: logger.info("File %s does not exist", p) p = None # The unique identifier can be used to prefix cross-reference targets # http://www.sphinx-doc.org/en/master/ext/intersphinx.html#confval-intersphinx_mapping k = prj.nickname + doc_tree.rel_path k = k.replace('_', '') k = six.text_type(k) # make sure it's not newstr from # future because that can cause # problems when intersphinx tries to # sort them if k in intersphinx_mapping: raise Exception("Duplicate intersphinx key {} used for {} " "(you ask to redefine it to {})".format( k, intersphinx_mapping[k], p)) intersphinx_mapping[k] = (url, p) if count == 0 and prjspec: logger.warning("No doctree for {}".format(prj)) # if prj.srcref_url: # k = '%s_srcref' % prj.nickname # extlinks[str(k)] = (prj.srcref_url, '') # atelier.current_project = this globals_dict.update(intersphinx_mapping=intersphinx_mapping)
def commited_today(ctx, today=None): """Print all today's commits to stdout.""" from atelier.projects import load_projects from git import Repo today = get_current_date(today) rows = [] def load(prj): # prj.load_fabfile() prj.load_tasks() # tsk, cfg = prj.ns.task_with_config('ci') cfg = prj.ns.configuration() if cfg['revision_control_system'] != 'git': # if cfg.revision_control_system != 'git': # print("20160816 {}".format(cfg)) return repo = Repo(cfg['root_dir']) kw = dict() ONEDAY = timedelta(days=1) yesterday = today - ONEDAY tomorrow = today + ONEDAY kw.update(after=yesterday.strftime("%Y-%m-%d"), before=tomorrow.strftime("%Y-%m-%d")) it = list(repo.iter_commits(**kw)) if len(it) == 0: # print("20160816 no commits in {}".format(prj.nickname)) return def fmtcommit(c): url = repo.remotes.origin.url if url.startswith("*****@*****.**"): url = "https://github.com/" + url[15:-4] \ + "/commit/" + c.hexsha elif url.startswith("git+ssh://[email protected]"): url = "https://github.com/" + url[25:-4] \ + "/commit/" + c.hexsha s = "`{0} <{1}>`__".format(c.hexsha[-7:], url) if c.message and not c.message.startswith("http://"): s += " " + c.message return s url = prj.SETUP_INFO.get('url', "oops") desc = "`%s <%s>`__" % (prj.name, url) for c in it: # ts = time.strftime("%H:%M", time.gmtime(c.committed_date)) ts = time.strftime("%Y-%m-%d %H:%M", time.localtime(c.committed_date)) rows.append([ts, desc, fmtcommit(c)]) for p in load_projects(): load(p) def mycmp(a, b): return cmp(a[0], b[0]) rows.sort(mycmp) print(rstgen.ul(["{0} : {1}\n{2}".format(*row) for row in rows]))